[Rt-commit] rt branch 5.0/lifecycle-viewer created. rt-5.0.2-292-g489f4054ab

BPS Git Server git at git.bestpractical.com
Thu Jul 28 11:47:01 UTC 2022


This is an automated email from the git hooks/post-receive script. It was
generated because a ref change was pushed to the repository containing
the project "rt".

The branch, 5.0/lifecycle-viewer has been created
        at  489f4054ab2d6a0d7e44f03e9a6936f6154c0834 (commit)

- Log -----------------------------------------------------------------
commit 489f4054ab2d6a0d7e44f03e9a6936f6154c0834
Author: sunnavy <sunnavy at bestpractical.com>
Date:   Wed Jul 13 04:02:50 2022 +0800

    Support to show lifecycle UI on ticket/asset display pages

diff --git a/etc/RT_Config.pm.in b/etc/RT_Config.pm.in
index 29dfb65ebd..ceaf6767ab 100644
--- a/etc/RT_Config.pm.in
+++ b/etc/RT_Config.pm.in
@@ -2839,6 +2839,14 @@ Set(%PriorityAsString,
     Default => { Low => 0, Medium => 50, High => 100 },
 );
 
+=item C<$ShowLifecycleViewer>
+
+Set to 1 to show lifecycle viewer on ticket/asset display pages.
+
+=cut
+
+Set($ShowLifecycleViewer, 0);
+
 =back
 
 =head2 Group Summary Configuration
diff --git a/lib/RT/Config.pm b/lib/RT/Config.pm
index 89276eeba7..2a28be0979 100644
--- a/lib/RT/Config.pm
+++ b/lib/RT/Config.pm
@@ -632,6 +632,16 @@ our %META;
         }
     },
 
+    ShowLifecycleViewer => {
+        Section         => 'Ticket display',
+        Overridable     => 1,
+        SortOrder       => 14,
+        Widget          => '/Widgets/Form/Boolean',
+        WidgetArguments => {
+            Description => 'Show lifecycle viewer',    #loc
+        },
+    },
+
     # User overridable locale options
     DateTimeFormat => {
         Section         => 'Locale',                       #loc
diff --git a/share/html/Asset/Elements/ShowSummary b/share/html/Asset/Elements/ShowSummary
index 5de4e2a399..791de939f3 100644
--- a/share/html/Asset/Elements/ShowSummary
+++ b/share/html/Asset/Elements/ShowSummary
@@ -84,5 +84,19 @@ for my $section (@sections) {
       TitleBoxARGS => { title_class => "inverse" },
       GroupingClass => 'col-4'
     &>
+
+% if ( RT->Config->Get( 'ShowLifecycleViewer', $session{CurrentUser} ) ) {
+% my $modify_url = RT->Config->Get('WebPath'). "/Admin/Lifecycles/Modify.html?Type=asset&Name=" . $AssetObj->LifecycleObj->Name;
+% my $expand = loc('Expand');
+    <div class="col-8">
+      <&| /Widgets/TitleBox, title => loc('Lifecycle'),
+          $session{'CurrentUser'}->HasRight(Object=> $RT::System, Right => 'SuperUser') ? (title_href => $modify_url) : (),
+          titleright_raw => qq{<a href="#" data-toggle="modal" data-target="#lifecycle-ui-viewer-modal"><span class="fas fa-expand-arrows-alt icon-bordered fa-2x" alt="$expand" data-toggle="tooltip" data-placement="top" data-original-title="$expand"></span></a>},
+          class => 'asset-info-lifecycle',
+      &>
+          <& /Elements/Lifecycle/Viewer, Object => $AssetObj &>
+      </&>
+    </div>
+% }
   </div>
 </div>
diff --git a/share/html/Elements/Lifecycle/Viewer b/share/html/Elements/Lifecycle/Viewer
new file mode 100644
index 0000000000..0ae4e683ac
--- /dev/null
+++ b/share/html/Elements/Lifecycle/Viewer
@@ -0,0 +1,184 @@
+%# BEGIN BPS TAGGED BLOCK {{{
+%#
+%# COPYRIGHT:
+%#
+%# This software is Copyright (c) 1996-2022 Best Practical Solutions, LLC
+%#                                          <sales at bestpractical.com>
+%#
+%# (Except where explicitly superseded by other copyright notices)
+%#
+%#
+%# LICENSE:
+%#
+%# This work is made available to you under the terms of Version 2 of
+%# the GNU General Public License. A copy of that license should have
+%# been provided with this software, but in any event can be snarfed
+%# from www.gnu.org.
+%#
+%# This work is distributed in the hope that it will be useful, but
+%# WITHOUT ANY WARRANTY; without even the implied warranty of
+%# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+%# General Public License for more details.
+%#
+%# You should have received a copy of the GNU General Public License
+%# along with this program; if not, write to the Free Software
+%# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+%# 02110-1301 or visit their web page on the internet at
+%# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html.
+%#
+%#
+%# CONTRIBUTION SUBMISSION POLICY:
+%#
+%# (The following paragraph is not intended to limit the rights granted
+%# to you to modify and distribute this software under the terms of
+%# the GNU General Public License and is only of importance to you if
+%# you choose to contribute your changes and enhancements to the
+%# community by submitting them to Best Practical Solutions, LLC.)
+%#
+%# By intentionally submitting any modifications, corrections or
+%# derivatives to this work, or any other work intended for use with
+%# Request Tracker, to Best Practical Solutions, LLC, you confirm that
+%# you are the copyright holder for those contributions and you grant
+%# Best Practical Solutions,  LLC a nonexclusive, worldwide, irrevocable,
+%# royalty-free, perpetual, license to use, copy, create derivative
+%# works based on those contributions, and sublicense and distribute
+%# those contributions and any derivatives thereof.
+%#
+%# END BPS TAGGED BLOCK }}}
+
+<div class="lifecycle-ui lifecycle-ui-viewer" id="lifecycle-ui-viewer" data-id="<% $Object->Id %>" data-status="<% $current_status %>">
+  <script type="text/javascript" src="<% RT->Config->Get('WebPath') %>/static/js/d3.min.js"></script>
+  <script type="text/javascript" src="<% RT->Config->Get('WebPath') %>/static/js/lifecycleui-viewer.js"></script>
+
+  <div class="lifecycle-ui-float">
+    <div id="lifecycle-ui-tooltip" data-toggle="tooltip" data-html="true"></div>
+
+% for my $status (keys %menus) {
+    <div class="lifecycle-ui-status-menu hidden" data-status="<% $status %>">
+%     my $menu = $menus{$status};
+      <& /Elements/Menu, menu => $menu &>
+    </div>
+% }
+  </div>
+
+  <div class="form-row">
+    <div class="col-12">
+      <svg></svg>
+    </div>
+  </div>
+
+  <div class="modal fade" id="lifecycle-ui-viewer-modal" data-id="<% $Object->Id %>" data-status="<% $current_status %>">
+    <div class="modal-dialog modal-xl modal-dialog-centered" role="document">
+      <div class="modal-content">
+        <div class="modal-header">
+          <h5 class="modal-title"><&|/l&>Lifecycle</&></h5>
+          <a href="javascript:void(0)" class="close" data-dismiss="modal" aria-label="Close">
+            <span aria-hidden="true">×</span>
+          </a>
+        </div>
+        <div class="modal-body">
+          <div class="form-row">
+            <div class="col-12">
+              <svg></svg>
+            </div>
+          </div>
+        </div>
+      </div>
+    </div>
+  </div>
+</div>
+
+
+
+<script type="text/javascript">
+  jQuery(function () {
+      new RT.LifecycleViewer( document.getElementById('lifecycle-ui-viewer'), <% $config |n %> <% $layout ? ", $layout" : () |n %> );
+      // Move to body to avoid container's position style, which ruins the position calculation of actions/tooltips.
+      jQuery('.lifecycle-ui-float').detach().appendTo('body');
+
+      jQuery('#lifecycle-ui-viewer-modal').on('shown.bs.modal', function() {
+          if ( !jQuery(this).hasClass('expanded') ) {
+            new RT.LifecycleViewer( document.getElementById('lifecycle-ui-viewer-modal'), <% $config |n %> <% $layout ? ", $layout" : () |n %> );
+            jQuery(this).addClass('expanded');
+          }
+      });
+  });
+</script>
+<%INIT>
+
+my $name = $Object->LifecycleObj->Name;
+
+my $config = JSON( RT->Config->Get('Lifecycles')->{$name} );
+
+my $conf = RT::Configuration->new( $session{CurrentUser} );
+$conf->LoadByCols( 'Name' => "LifecycleLayout-$name", Disabled => 0 );
+my $layout = JSON( $conf->_DeserializeContent( $conf->Content ) ) if $conf->Id;
+
+my $lifecycle = $Object->LifecycleObj;
+
+my %menus;
+
+# largely borrowed from /Elements/Tabs
+my $current_status         = $Object->Status;
+my $hide_resolve_with_deps = RT->Config->Get('HideResolveActionsWithDependencies')
+    && $Object->HasUnresolvedDependencies;
+my $query_string = sub {
+    my %args = @_;
+    my $u    = URI->new();
+    $u->query_form( map { $_ => $args{$_} } sort keys %args );
+    return $u->query;
+};
+
+for my $status ( $lifecycle->Valid ) {
+    $menus{$status} = RT::Interface::Web::Menu->new();
+}
+
+my $add_menu = sub {
+    my $next = shift;
+    my $info = shift || {};
+
+    return unless $lifecycle->IsTransition( $current_status => $next );
+
+    my $check = $lifecycle->CheckRight( $current_status => $next );
+    return unless $Object->CurrentUserHasRight($check);
+
+    return
+           if $hide_resolve_with_deps
+        && $lifecycle->IsInactive($next)
+        && !$lifecycle->IsInactive($current_status);
+
+    my $action = $info->{'update'} || '';
+    my $url    = '/Ticket/';
+    $url .= "Update.html?"
+        . $query_string->(
+            $action
+            ? ( Action => $action )
+            : ( SubmitTicket => 1, Status => $next ),
+            DefaultStatus => $next,
+            id            => $Object->Id,
+        );
+    my $key = $info->{'label'};
+    $menus{$next}->child(
+        $key       => title => loc($key),
+        path       => $url,
+        attributes => {
+            $info->{description}
+            ? (
+                'data-toggle'         => 'tooltip',
+                'data-original-title' => loc( $info->{description} ),
+                alt                   => loc( $info->{description} ),
+                )
+            : (),
+        }
+    );
+};
+
+foreach my $info ( $lifecycle->Actions($current_status) ) {
+    $add_menu->( $info->{to}, $info );
+}
+
+</%INIT>
+
+<%ARGS>
+$Object
+</%ARGS>
diff --git a/share/html/Ticket/Elements/ShowSummary b/share/html/Ticket/Elements/ShowSummary
index c929833660..540b1183e1 100644
--- a/share/html/Ticket/Elements/ShowSummary
+++ b/share/html/Ticket/Elements/ShowSummary
@@ -126,6 +126,19 @@ my $people_behavior = $InlineEdit ? ($inline_edit_behavior{People} || $inline_ed
     <& /Ticket/Elements/ShowAttachments, Ticket => $Ticket, Attachments => $Attachments, Count => RT->Config->Get('AttachmentListCount') &>
 % $m->callback( %ARGS, CallbackName => 'AfterAttachments' );
     <& /Ticket/Elements/ShowRequestor, Ticket => $Ticket &>
+
+% if ( RT->Config->Get( 'ShowLifecycleViewer', $session{CurrentUser} ) ) {
+% my $modify_url = RT->Config->Get('WebPath'). "/Admin/Lifecycles/Modify.html?Type=ticket&Name=" . $Ticket->LifecycleObj->Name;
+% my $expand = loc('Expand');
+    <&| /Widgets/TitleBox, title => loc('Lifecycle'),
+        $session{'CurrentUser'}->HasRight(Object=> $RT::System, Right => 'SuperUser') ? (title_href => $modify_url) : (),
+        titleright_raw => qq{<a href="#" data-toggle="modal" data-target="#lifecycle-ui-viewer-modal"><span class="fas fa-expand-arrows-alt icon-bordered fa-2x" alt="$expand" data-toggle="tooltip" data-placement="top" data-original-title="$expand"></span></a>},
+        class => 'ticket-info-lifecycle',
+    &>
+        <& /Elements/Lifecycle/Viewer, Object => $Ticket &>
+    </&>
+% }
+
 % $m->callback( %ARGS, CallbackName => 'LeftColumn' );
   </div>
   <div class="boxcontainer col-md-6">
diff --git a/share/static/css/elevator-light/boxes.css b/share/static/css/elevator-light/boxes.css
index d2d4f029f7..6474899c80 100644
--- a/share/static/css/elevator-light/boxes.css
+++ b/share/static/css/elevator-light/boxes.css
@@ -139,6 +139,9 @@ div.results .titlebox .titlebox-content {
 .titlebox.card.ticket-info-cfs, .titlebox.card.asset-info-cfs {
     border-top: 3px solid #D32F2F;
 }
+.titlebox.card.ticket-info-lifecycle, .titlebox.card.asset-info-lifecycle {
+    border-top: 3px solid #f3bf4c;
+}
 /* reset to default border for .card-body */
 #comp-Admin-Queues-DefaultValues .titlebox.card.ticket-info-cfs {
     border-top: 1px solid #dde4eb;
diff --git a/share/static/css/elevator-light/lifecycleui.css b/share/static/css/elevator-light/lifecycleui.css
index 9f0717dd2c..d52d26ac1b 100644
--- a/share/static/css/elevator-light/lifecycleui.css
+++ b/share/static/css/elevator-light/lifecycleui.css
@@ -58,3 +58,32 @@ svg .rect {
     position: absolute;
     z-index: 999;
 }
+
+.lifecycle-ui-status-menu {
+    position: absolute;
+    z-index: 99;
+}
+
+.lifecycle-ui-viewer .link {
+    stroke: #888;
+    cursor: crosshair;
+}
+
+.lifecycle-ui-viewer .marker {
+    fill: #888;
+}
+
+
+.lifecycle-ui-viewer .status-active {
+    cursor: pointer;
+}
+
+.lifecycle-ui-viewer .link-active {
+    stroke: #87a96b;
+    cursor: pointer;
+}
+
+.lifecycle-ui-viewer .marker-active,
+.lifecycle-ui-viewer .status-current {
+    fill: #87a96b;
+}
diff --git a/share/static/js/lifecycleui-viewer.js b/share/static/js/lifecycleui-viewer.js
new file mode 100644
index 0000000000..9befc13894
--- /dev/null
+++ b/share/static/js/lifecycleui-viewer.js
@@ -0,0 +1,451 @@
+jQuery(function () {
+    RT.LifecycleViewer = class LifecycleViewer {
+        constructor(container, config, layout) {
+            this.links_seq = 0;
+            this.nodes_seq = 0;
+            // Here we store the '' => transitions
+            this.create_nodes = [];
+
+            var self              = this;
+            self.width            = 900;
+            self.height           = 350;
+            self.node_radius      = 35;
+            self.layout           = layout;
+            self.enableSimulation = 1;
+            self.current_status   = container.getAttribute('data-status');
+            self.object_id        = container.getAttribute('data-id');
+            self.container        = container;
+
+            self.active_statuses  = config.transitions[self.current_status];
+            if ( self.layout ) {
+                self.enableSimulation = 0;
+            }
+
+            self.svg = d3.select(container).select('svg')
+                .attr("preserveAspectRatio", "xMinYMin meet")
+                .attr("viewBox", "0 0 "+self.width+" "+self.height)
+                .classed("svg-content-responsive", true)
+                .attr("border", 1);
+
+            self.svg.append("rect")
+                .classed("rect", true)
+                .attr("x", 0)
+                .attr("y", 0)
+                .attr("height", self.height)
+                .attr("width", self.width)
+                .style("stroke", 'black')
+                .style("fill", "none")
+                .style("stroke-width", 1);
+
+            self.config   = config;
+            self.links    = [];
+            self.nodes    = [];
+
+            self.NodesFromConfig(config);
+            self.nodes.forEach(function(source) {
+                self.LinksForNodeFromConfig(source.name).forEach(function(targetName) {
+                    // Get our target node
+                    var target = self.nodes.filter(function(source) { return source.name === targetName; })[0];
+                    if (!target) { return };
+
+                    if ( source.id < target.id ) {
+                        self.links.push({
+                            id: ++self.links_seq,
+                            source: source,
+                            target: target,
+                            start: false,
+                            end: true,
+                            descriptions: {
+                                [source.name + ' -> ' + target.name]: self.config.descriptions[source.name + ' -> ' + target.name],
+                                [target.name + ' -> ' + source.name]: self.config.descriptions[target.name + ' -> ' + source.name],
+                            }
+                        });
+                        return;
+                    }
+                    var link = self.links.filter(function(l) { return (l.source === target && l.target === source); })[0];
+                    if (link) {
+                        link.start = true;
+                    } else {
+                        self.links.push({
+                            id: ++self.links_seq,
+                            source: source,
+                            target: target,
+                            start: false,
+                            end: true,
+                            descriptions: {
+                                [source.name + ' -> ' + target.name]: self.config.descriptions[source.name + ' -> ' + target.name],
+                                [target.name + ' -> ' + source.name]: self.config.descriptions[target.name + ' -> ' + source.name],
+                            }
+                        });
+                    }
+                });
+                if ( !self.enableSimulation ) {
+                    if (self.layout[source.name][0]) source.x = parseInt(self.layout[source.name][0]);
+                    if (self.layout[source.name][1]) source.y = parseInt(self.layout[source.name][1]);
+                }
+            });
+
+            self.simulation = d3.forceSimulation();
+            const link_size = self.nodes.length > 10 ? 300 : self.nodes.length * 35;
+            if ( !self.enableSimulation ) {
+                self.simulation
+                  .force("link", null)
+                  .force("charge", null)
+                  .force("center", null)
+                  .force('collision', null);
+            }
+            else {
+                self.simulation
+                  .force("link", d3.forceLink().distance(link_size < 100 ? 200 : link_size).strength(0.2))
+                  .force("charge", d3.forceManyBody().strength(-200))
+                  .force("center", d3.forceCenter(self.width / 2, self.height / 2))
+                  .force('collision', d3.forceCollide().radius(function(d) {
+                    return d.radius
+                  }));
+            }
+
+            self.SetUp();
+            self.RenderNode();
+            self.RenderLink();
+
+            self.simulation
+                .nodes(self.nodes)
+                .on("tick", function (t) {
+                    self.node.attr("transform", function (d) {
+
+                        var x = d.x, y = d.y;
+                        if ( d.x + self.node_radius / 2 > self.width ) x = self.width - self.node_radius;
+                        if ( d.x - self.node_radius / 2 <= 0 ) x = self.node_radius;
+                        if ( d.y + self.node_radius / 2 > self.height ) y = self.height - self.node_radius;
+                        if ( d.y - self.node_radius / 2 <= 0 ) y = self.node_radius;
+
+                        if ( !self.enableSimulation ) {
+                            d.fx = x;
+                            d.fy = y;
+                        }
+                        else {
+                            d.fx = null;
+                            d.fy = null;
+                        }
+
+                        return "translate(" + x + "," + y + ")";
+                    });
+
+                    self.link.attr('d', (function(d) {
+                        var sx = d.source.x,
+                            sy = d.source.y,
+                            tx = d.target.x,
+                            ty = d.target.y;
+
+                        if ( sx + self.node_radius / 2 > self.width ) sx = self.width - self.node_radius;
+                        if ( sx - self.node_radius / 2 <= 0 ) sx = self.node_radius;
+                        if ( sy + self.node_radius / 2 > self.height ) sy = self.height - self.node_radius;
+                        if ( sy - self.node_radius / 2 <= 0 ) sy = self.node_radius;
+                        if ( tx + self.node_radius / 2 > self.width ) tx = self.width - self.node_radius;
+                        if ( tx - self.node_radius / 2 <= 0 ) tx = self.node_radius;
+                        if ( ty + self.node_radius / 2 > self.height ) ty = self.height - self.node_radius;
+                        if ( ty - self.node_radius / 2 <= 0 ) ty = self.node_radius;
+
+                        var deltaX = tx - sx,
+                        deltaY     = ty - sy,
+                        dist = Math.sqrt(deltaX * deltaX + deltaY * deltaY),
+                        normX = deltaX / dist,
+                        normY = deltaY / dist,
+                        sourcePadding = 45,
+                        targetPadding = 45,
+                        sourceX = sx + (sourcePadding * normX),
+                        sourceY = sy + (sourcePadding * normY),
+                        targetX = tx - (targetPadding * normX),
+                        targetY = ty - (targetPadding * normY);
+                        return 'M' + sourceX + ',' + sourceY + 'L' + targetX + ',' + targetY;
+                    })
+                );
+            });
+        }
+
+        SetUp() {
+            var self = this;
+
+            // define arrow markers for graph links
+            self.svg.append('svg:defs').append('svg:marker')
+                .attr('id', 'end-arrow')
+                .attr('viewBox', '0 -5 10 10')
+                .attr('refX', 6)
+                .attr('markerWidth', 5)
+                .attr('markerHeight', 5)
+                .attr('orient', 'auto')
+                .append('svg:path')
+                .attr('d', 'M0,-5L10,0L0,5')
+                .attr('class', 'marker');
+
+            self.svg.append('svg:defs').append('svg:marker')
+                .attr('id', 'end-arrow-active')
+                .attr('viewBox', '0 -5 10 10')
+                .attr('refX', 6)
+                .attr('markerWidth', 5)
+                .attr('markerHeight', 5)
+                .attr('orient', 'auto')
+                .append('svg:path')
+                .attr('d', 'M0,-5L10,0L0,5')
+                .attr('class', 'marker marker-active');
+
+            self.svg.append('svg:defs').append('svg:marker')
+                .attr('id', 'start-arrow')
+                .attr('viewBox', '0 -5 10 10')
+                .attr('refX', 6)
+                .attr('markerWidth', 5)
+                .attr('markerHeight', 5)
+                .attr('orient', 'auto')
+                .append('svg:path')
+                .attr('d', 'M10,-5L0,0L10,5')
+                .attr('class', 'marker');
+
+            self.svg.append('svg:defs').append('svg:marker')
+                .attr('id', 'start-arrow-active')
+                .attr('viewBox', '0 -5 10 10')
+                .attr('refX', 6)
+                .attr('markerWidth', 5)
+                .attr('markerHeight', 5)
+                .attr('orient', 'auto')
+                .append('svg:path')
+                .attr('d', 'M10,-5L0,0L10,5')
+                .attr('class', 'marker marker-active');
+
+            self.svg
+                .on('click', function () {
+                    d3.event.preventDefault();
+                    d3.event.stopPropagation();
+
+                    hide(jQuery('div.lifecycle-ui-status-menu'));
+                })
+                .on('contextmenu', function() { d3.event.preventDefault(); });
+        }
+
+        // Generate nodes from config
+        NodesFromConfig(config) {
+            var self = this;
+            self.nodes = [];
+
+            jQuery.each(['initial', 'active', 'inactive'], function (i, type) {
+                if ( config[type] ) {
+                    config[type].forEach(function(element) {
+                        self.nodes = self.nodes.concat({
+                            id: ++self.nodes_seq,
+                            name: element,
+                            type: type,
+                            description: config.descriptions[element],
+                            transition_description: config.descriptions[self.current_status + ' -> ' + element]
+                        });
+                    });
+                }
+            });
+        }
+
+        // Find all links associated with node object
+        LinksForNodeFromConfig (node, config) {
+            var config = config || this.config;
+
+            for (let [fromNode, toList] of Object.entries(config.transitions)) {
+                if ( fromNode == '' ) {
+                    this.create_nodes = toList;
+                }
+                else if ( fromNode.toLowerCase() == node.toLowerCase() ) {
+                    return toList;
+                }
+            }
+            return [];
+        }
+
+        RenderNode() {
+            var self = this;
+
+            self.node = self.svg.selectAll(".node")
+                .data(self.nodes.filter(function(d) { return d.id >= 0 }));
+
+            // Add new nodes and draw them
+            var nodeEnter = self.node.enter().append("g")
+                .attr("class", "node");
+
+            nodeEnter.append("circle");
+            nodeEnter.append("text");
+            nodeEnter.append("title");
+
+            self.node = nodeEnter.merge(self.node)
+                .attr("id", function(d) { return d.id });
+
+            self.node.call(d3.drag()
+                .on("start", function(d) {
+                    if (!d3.event.active) self.simulation.alphaTarget(0.3).restart();
+                    d.fx = d.x, d.fy = d.y;
+                })
+                .on("drag", function(d) {
+                    d.fx = d3.event.x, d.fy = d3.event.y;
+                })
+                .on("end", function(d) {
+                    if (!d3.event.active) self.simulation.alphaTarget(0);
+                    if ( !self.enableSimulation ) {
+                        d.fx = null, d.fy = null;
+                    }
+                }));
+
+            // Add our circle to our new node
+            self.node.select("circle")
+                .attr("r", self.node_radius)
+                .attr("stroke", "black")
+                .attr("class", function(d) {
+                    let classes = ['status', 'status-type-' + d.type];
+
+                    if ( d.name === self.current_status ) {
+                        classes.push('status-current');
+                    }
+
+                    if (self.active_statuses.includes(d.name)) {
+                        classes.push('status-active');
+                    }
+                    return classes.join(' ');
+                })
+                .on("click", function(d) {
+                    d3.event.stopPropagation();
+                    d3.event.preventDefault();
+                    if (self.active_statuses.includes(d.name)) {
+                        if ( self.config.type === 'asset' ) {
+                            location.href = RT.Config.WebPath + '/Asset/Modify.html?Update=1;DisplayAfter=1;Status=' + d.name + ';id=' + self.object_id;
+                        }
+                        else {
+                           location.href = RT.Config.WebPath + '/Ticket/Update.html?DefaultStatus=' + d.name + ';id=' + self.object_id;
+                        }
+                    }
+                })
+                .on('contextmenu', function(d) {
+                    hide(jQuery('div.lifecycle-ui-status-menu[data-status!=' + d.name + ']'));
+                    if (!self.active_statuses.includes(d.name)) return;
+
+                    let menu = jQuery('div.lifecycle-ui-status-menu[data-status=' + d.name + ']');
+                    menu.css('left', d3.event.pageX).css('top', d3.event.pageY);
+
+                    if ( !menu.find('.toplevel').hasClass('sf-menu') ) {
+                        menu.find('.toplevel').addClass('sf-menu sf-vertical sf-js-enabled sf-shadow').superfish({ speed: 'fast' });
+                    }
+                    show(menu);
+                })
+                .on('mouseover', function(d) {
+                    if ( d.transition_description ) {
+                        jQuery('#lifecycle-ui-tooltip').css('left', d3.event.pageX).css('top', d3.event.pageY);
+                        jQuery('#lifecycle-ui-tooltip').attr('data-original-title', d.transition_description);
+                        jQuery('#lifecycle-ui-tooltip').tooltip('show');
+                    }
+                })
+                .on('mouseout', function() {
+                    jQuery('#lifecycle-ui-tooltip').tooltip('hide');
+                });
+
+            self.node.select("text")
+                .text(function(d) { return d.name; })
+                .each(function () { self.TruncateLabel(this, self); })
+                .attr("x", function(d) {
+                    var node = d3.select(this), textLength = node.node().getComputedTextLength();
+                    if ( textLength > self.node_radius*2 ) textLength = self.node_radius*2;
+                    return -textLength/2+5; // +5 visually makes text in the center.
+                })
+                .attr("y", 0)
+                .style("font-size", "10px");
+
+            self.node.select('text').on('mouseover', function(d) {
+                if ( d.description ) {
+                    jQuery('#lifecycle-ui-tooltip').css('left', d3.event.pageX).css('top', d3.event.pageY);
+                    jQuery('#lifecycle-ui-tooltip').attr('data-original-title', d.description);
+                    jQuery('#lifecycle-ui-tooltip').tooltip('show');
+                }
+            })
+            .on('mouseout', function() {
+                jQuery('#lifecycle-ui-tooltip').tooltip('hide');
+            });
+        }
+
+        RenderLink() {
+            var self = this;
+
+            self.link = self.svg.selectAll(".link")
+                .data(self.links);
+
+            // Add new links and draw them
+            var linkEnter = self.link.enter().append("g")
+                .append("path")
+                .attr("class", 'link')
+                .style("marker-start", function(d) { return d.start ? 'url(#start-arrow)' : '' })
+                .style("marker-end", function(d) { return d.end ? 'url(#end-arrow)' : '' })
+                .attr("transform", "translate(0,0)");
+            self.link = linkEnter.merge(self.link);
+
+            self.link.filter(function(d) {
+                return d.source.name == self.current_status && self.active_statuses.includes(d.target.name)
+            }).style("marker-end", function(d) {
+                return d.end ? 'url(#end-arrow-active)' : ''
+            }).attr('class', 'link link-active');
+
+            self.link.filter(function(d) {
+                return d.target.name == self.current_status && self.active_statuses.includes(d.source.name)
+            }).style("marker-start", function(d) {
+                return d.end ? 'url(#start-arrow-active)' : ''
+            }).attr('class', 'link link-active');
+
+            self.link.on('mouseover', function(d) {
+                let descriptions = [];
+                let item = d.source.name + ' -> ' + d.target.name;
+                let reverse_item = d.target.name + ' -> ' + d.source.name;
+                // if it's bidirectional
+                if ( d.start ) {
+                    for ( let i of [item, reverse_item] ) {
+                        if ( d.descriptions[i] ) {
+                            descriptions.push(i + ': ' + d.descriptions[i]);
+                        }
+                    }
+                }
+                else {
+                    if ( d.descriptions[item] ) {
+                        descriptions.push(d.descriptions[item]);
+                    }
+                }
+
+                if ( descriptions.length ) {
+                    jQuery('#lifecycle-ui-tooltip').css('left', d3.event.pageX).css('top', d3.event.pageY);
+                    jQuery('#lifecycle-ui-tooltip').attr('data-original-title', descriptions.join('<br>'));
+                    jQuery('#lifecycle-ui-tooltip').tooltip('show');
+                }
+            })
+            .on('mouseout', function() {
+                jQuery('#lifecycle-ui-tooltip').tooltip('hide');
+            })
+            .on("click", function(d) {
+                d3.event.stopPropagation();
+                d3.event.preventDefault();
+                let status;
+                if ( d.source.name === self.current_status ) {
+                    status = d.target.name;
+                }
+                else if ( d.target.name === self.current_status ) {
+                    status = d.source.name;
+                }
+
+                if (status && self.active_statuses.includes(status)) {
+                    if ( self.config.type === 'asset' ) {
+                        location.href = RT.Config.WebPath + '/Asset/Modify.html?Update=1;DisplayAfter=1;Status=' + status + ';id=' + self.object_id;
+                    }
+                    else {
+                       location.href = RT.Config.WebPath + '/Ticket/Update.html?DefaultStatus=' + status + ';id=' + self.object_id;
+                    }
+                }
+            });
+        }
+        TruncateLabel(element, self) {
+            var node = d3.select(element), textLength = node.node().getComputedTextLength(), text = node.text();
+            var diameter = self.node_radius * 2 - textLength/4;
+
+            while (textLength > diameter && text.length > 0) {
+                text = text.slice(0, -1);
+                node.text(text + '…');
+                textLength = node.node().getComputedTextLength();
+            }
+        }
+    }
+});

commit 87ccf2da27030c1bc4647076fa657761164f853c
Author: sunnavy <sunnavy at bestpractical.com>
Date:   Sun Jul 10 16:27:55 2022 +0800

    Add fontawesome expand-arrows-alt icon for lifecycle modal viewer

diff --git a/devel/third-party/fontawesome-5.11.2/index.js b/devel/third-party/fontawesome-5.11.2/index.js
index 62ee5521f2..351696fa05 100644
--- a/devel/third-party/fontawesome-5.11.2/index.js
+++ b/devel/third-party/fontawesome-5.11.2/index.js
@@ -21,6 +21,7 @@ import {
     faAngleDoubleLeft as fasAngleDoubleLeft,
     faAngleRight as fasAngleRight,
     faAngleDoubleRight as fasAngleDoubleRight,
+    faExpandArrowsAlt as fasExpandArrowsAlt,
 } from '@fortawesome/free-solid-svg-icons'
 
 
@@ -68,6 +69,7 @@ library.add(
     fasAngleDoubleLeft,
     fasAngleRight,
     fasAngleDoubleRight,
+    fasExpandArrowsAlt,
     // Regular
     farEdit,
     farBookmark,
diff --git a/share/static/js/fontawesome.min.js b/share/static/js/fontawesome.min.js
index f8c49b6b63..c5401fa6f2 100644
--- a/share/static/js/fontawesome.min.js
+++ b/share/static/js/fontawesome.min.js
@@ -1 +1 @@
-(function(e){function t(i){if(a[i])return a[i].exports;var n=a[i]={i:i,l:!1,exports:{}};return e[i].call(n.exports,n,n.exports,t),n.l=!0,n.exports}var a={};return t.m=e,t.c=a,t.d=function(e,a,i){t.o(e,a)||Object.defineProperty(e,a,{enumerable:!0,get:i})},t.r=function(e){'undefined'!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:'Module'}),Object.defineProperty(e,'__esModule',{value:!0})},t.t=function(e,a){if(1&a&&(e=t(e)),8&a)return e;if(4&a&&'object'==typeof e&&e&&e.__esModule)return e;var i=Object.create(null);if(t.r(i),Object.defineProperty(i,'default',{enumerable:!0,value:e}),2&a&&'string'!=typeof e)for(var n in e)t.d(i,n,function(t){return e[t]}.bind(null,n));return i},t.n=function(e){var a=e&&e.__esModule?function(){return e['default']}:function(){return e};return t.d(a,'a',a),a},t.o=function(e,t){return Object.prototype.hasOwnProperty.call(e,t)},t.p='',t(t.s=5)})([function(e){var t=function(){return this}();try{t=t||new Function('return 
 this')()}catch(a){'object'==typeof window&&(t=window)}e.exports=t},function(e,t,a){'use strict';(function(e,i){function n(e){return n='function'==typeof Symbol&&'symbol'==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&'function'==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?'symbol':typeof e},n(e)}function r(e,t){if(!(e instanceof t))throw new TypeError('Cannot call a class as a function')}function c(e,t){for(var a=0,i;a<t.length;a++)i=t[a],i.enumerable=i.enumerable||!1,i.configurable=!0,'value'in i&&(i.writable=!0),Object.defineProperty(e,i.key,i)}function o(e,t,a){return t&&c(e.prototype,t),a&&c(e,a),e}function s(e,t,a){return t in e?Object.defineProperty(e,t,{value:a,enumerable:!0,configurable:!0,writable:!0}):e[t]=a,e}function l(e){for(var t=1;t<arguments.length;t++){var a=null==arguments[t]?{}:arguments[t],i=Object.keys(a);'function'==typeof Object.getOwnPropertySymbols&&(i=i.concat(Object.getOwnPropertySymbols(a).filter(function(e){ret
 urn Object.getOwnPropertyDescriptor(a,e).enumerable}))),i.forEach(function(t){s(e,t,a[t])})}return e}function f(e,t){return h(e)||b(e,t)||v()}function m(e){return u(e)||g(e)||y()}function u(e){if(Array.isArray(e)){for(var t=0,a=Array(e.length);t<e.length;t++)a[t]=e[t];return a}}function h(e){if(Array.isArray(e))return e}function g(e){if(Symbol.iterator in Object(e)||'[object Arguments]'===Object.prototype.toString.call(e))return Array.from(e)}function b(e,t){var a=[],i=!0,n=!1,r=void 0;try{for(var c=e[Symbol.iterator](),o;!(i=(o=c.next()).done)&&(a.push(o.value),!(t&&a.length===t));i=!0);}catch(e){n=!0,r=e}finally{try{i||null==c['return']||c['return']()}finally{if(n)throw r}}return a}function y(){throw new TypeError('Invalid attempt to spread non-iterable instance')}function v(){throw new TypeError('Invalid attempt to destructure non-iterable instance')}function x(e){var t=et.querySelector('script['+e+']');if(t)return t.getAttribute(e)}function k(e){return!(''!==e)||'false'!==e&&(!(
 'true'!==e)||e)}function z(e){nt&&(Tt?setTimeout(e,0):Pt.push(e))}function M(){for(var e=0;e<Yt.length;e++)Yt[e][0](Yt[e][1]);Yt=[],Xt=!1}function N(e,t){Yt.push([e,t]),Xt||(Xt=!0,Ft(M,0))}function C(e,t){function a(e){I(t,e)}function i(e){S(t,e)}try{e(a,i)}catch(t){i(t)}}function A(e){var t=e.owner,a=t._state,i=t._data,n=e[a],r=e.then;if('function'==typeof n){a=Rt;try{i=n(i)}catch(t){S(r,t)}}L(r,i)||(a===Rt&&I(r,i),a===Ot&&S(r,i))}function L(t,e){var a;try{if(t===e)throw new TypeError('A promises callback cannot return that same promise.');if(e&&('function'==typeof e||'object'===n(e))){var i=e.then;if('function'==typeof i)return i.call(e,function(i){a||(a=!0,e===i?E(t,i):I(t,i))},function(e){a||(a=!0,S(t,e))}),!0}}catch(i){return a||S(t,i),!0}return!1}function I(e,t){e!==t&&L(e,t)||E(e,t)}function E(e,t){e._state===Ht&&(e._state=Vt,e._data=t,N(T,e))}function S(e,t){e._state===Ht&&(e._state=Vt,e._data=t,N(H,e))}function _(e){e._then=e._then.forEach(A)}function T(e){e._state=Rt,_(e)}
 function H(t){t._state=Ot,_(t),!t._handled&&jt&&e.process.emit('unhandledRejection',t._data,t)}function V(t){e.process.emit('rejectionHandled',t)}function R(e){if('function'!=typeof e)throw new TypeError('Promise resolver '+e+' is not a function');if(!1==this instanceof R)throw new TypeError('Failed to construct \'Promise\': Please use the \'new\' operator, this object constructor cannot be called as a function.');this._then=[],C(e,this)}function O(e){return~Lt.indexOf(e)}function D(e){if(e&&nt){var t=et.createElement('style');t.setAttribute('type','text/css'),t.innerHTML=e;for(var a=et.head.childNodes,n=null,r=a.length-1;-1<r;r--){var i=a[r],c=(i.tagName||'').toUpperCase();-1<['STYLE','LINK'].indexOf(c)&&(n=i)}return et.head.insertBefore(t,n),e}}function j(){for(var e=12,t='';0<e--;)t+=Wt[0|62*Math.random()];return t}function F(e){for(var t=[],a=(e||[]).length>>>0;a--;)t[a]=e[a];return t}function Y(e){return e.classList?F(e.classList):(e.getAttribute('class')||'').split(' ').filter
 (function(e){return e})}function X(e,t){var a=t.split('-'),i=a[0],n=a.slice(1).join('-');return i!==e||''===n||O(n)?null:n}function B(e){return''.concat(e).replace(/&/g,'&').replace(/"/g,'"').replace(/'/g,''').replace(/</g,'<').replace(/>/g,'>')}function U(e){return Object.keys(e||{}).reduce(function(t,a){return t+''.concat(a,'="').concat(B(e[a]),'" ')},'').trim()}function W(e){return Object.keys(e||{}).reduce(function(t,a){return t+''.concat(a,': ').concat(e[a],';')},'')}function q(e){return e.size!==d.size||e.x!==d.x||e.y!==d.y||e.rotate!==d.rotate||e.flipX||e.flipY}function G(e){var t=e.transform,a=e.containerWidth,i=e.iconWidth,n={transform:'translate('.concat(a/2,' 256)')},r='translate('.concat(32*t.x,', ').concat(32*t.y,') '),c='scale('.concat(t.size/16*(t.flipX?-1:1),', ').concat(t.size/16*(t.flipY?-1:1),') '),o='rotate('.concat(t.rotate,' 0 0)'),s={transform:''.concat(r,' ').concat(c,' ').concat(o)},l={transform:'translate('.concat(-1*(i/2),' -256)')};retu
 rn{outer:n,inner:s,path:l}}function K(e){var t=e.transform,a=e.width,i=void 0===a?ot:a,n=e.height,r=void 0===n?ot:n,c=e.startCentered,o=void 0!==c&&c,s='';return s+=o&&rt?'translate('.concat(t.x/Ut-i/2,'em, ').concat(t.y/Ut-r/2,'em) '):o?'translate(calc(-50% + '.concat(t.x/Ut,'em), calc(-50% + ').concat(t.y/Ut,'em)) '):'translate('.concat(t.x/Ut,'em, ').concat(t.y/Ut,'em) '),s+='scale('.concat(t.size/Ut*(t.flipX?-1:1),', ').concat(t.size/Ut*(t.flipY?-1:1),') '),s+='rotate('.concat(t.rotate,'deg) '),s}function $(e){var t=!(1<arguments.length&&void 0!==arguments[1])||arguments[1];return e.attributes&&(e.attributes.fill||t)&&(e.attributes.fill='black'),e}function J(e){return'g'===e.tag?e.children:[e]}function Q(e){var t=e.children,a=e.attributes,i=e.main,n=e.mask,r=e.transform,c=i.width,o=i.icon,s=n.width,f=n.icon,d=G({transform:r,containerWidth:s,iconWidth:c}),m={tag:'rect',attributes:l({},qt,{fill:'white'})},u=o.children?{children:o.children.map($)}:{},p={tag:'g',attributes:l({},d.in
 ner),children:[$(l({tag:o.tag,attributes:l({},o.attributes,d.path)},u))]},h={tag:'g',attributes:l({},d.outer),children:[p]},g='mask-'.concat(j()),b='clip-'.concat(j()),y={tag:'mask',attributes:l({},qt,{id:g,maskUnits:'userSpaceOnUse',maskContentUnits:'userSpaceOnUse'}),children:[m,h]},v={tag:'defs',children:[{tag:'clipPath',attributes:{id:b},children:J(f)},y]};return t.push(v,{tag:'rect',attributes:l({fill:'currentColor',"clip-path":'url(#'.concat(b,')'),mask:'url(#'.concat(g,')')},qt)}),{children:t,attributes:a}}function Z(e){var t=e.children,a=e.attributes,i=e.main,n=e.transform,r=e.styles,c=W(r);if(0<c.length&&(a.style=c),q(n)){var o=G({transform:n,containerWidth:i.width,iconWidth:i.width});t.push({tag:'g',attributes:l({},o.outer),children:[{tag:'g',attributes:l({},o.inner),children:[{tag:i.icon.tag,children:i.icon.children,attributes:l({},i.icon.attributes,o.path)}]}]})}else t.push(i.icon);return{children:t,attributes:a}}function ee(e){var t=e.children,a=e.main,i=e.mask,n=e.attr
 ibutes,r=e.styles,c=e.transform;if(q(c)&&a.found&&!i.found){var o=a.width,s=a.height,f={x:o/s/2,y:.5};n.style=W(l({},r,{"transform-origin":''.concat(f.x+c.x/16,'em ').concat(f.y+c.y/16,'em')}))}return[{tag:'svg',attributes:n,children:t}]}function te(e){var t=e.prefix,a=e.iconName,i=e.children,n=e.attributes,r=e.symbol,c=!0===r?''.concat(t,'-').concat(St.familyPrefix,'-').concat(a):r;return[{tag:'svg',attributes:{style:'display: none;'},children:[{tag:'symbol',attributes:l({},n,{id:c}),children:i}]}]}function ae(e){var t=e.icons,a=t.main,i=t.mask,n=e.prefix,r=e.iconName,c=e.transform,o=e.symbol,s=e.title,f=e.extra,d=e.watchable,m=i.found?i:a,u=m.width,p=m.height,h='fa-w-'.concat(Math.ceil(16*(u/p))),g=[St.replacementClass,r?''.concat(St.familyPrefix,'-').concat(r):'',h].filter(function(e){return-1===f.classes.indexOf(e)}).concat(f.classes).join(' '),b={children:[],attributes:l({},f.attributes,{"data-prefix":n,"data-icon":r,class:g,role:f.attributes.role||'img',xmlns:'http://www.w3.or
 g/2000/svg',viewBox:'0 0 '.concat(u,' ').concat(p)})};void 0!==d&&d&&(b.attributes[ft]=''),s&&b.children.push({tag:'title',attributes:{id:b.attributes['aria-labelledby']||'title-'.concat(j())},children:[s]});var y=l({},b,{prefix:n,iconName:r,main:a,mask:i,transform:c,symbol:o,styles:f.styles}),v=i.found&&a.found?Q(y):Z(y),x=v.children,w=v.attributes;return y.children=x,y.attributes=w,o?te(y):ee(y)}function ie(e){var t=e.content,a=e.width,i=e.height,n=e.transform,r=e.title,c=e.extra,o=e.watchable,s=l({},c.attributes,r?{title:r}:{},{class:c.classes.join(' ')});void 0!==o&&o&&(s[ft]='');var f=l({},c.styles);q(n)&&(f.transform=K({transform:n,startCentered:!0,width:a,height:i}),f['-webkit-transform']=f.transform);var d=W(f);0<d.length&&(s.style=d);var m=[];return m.push({tag:'span',attributes:s,children:[t]}),r&&m.push({tag:'span',attributes:{class:'sr-only'},children:[r]}),m}function ne(e){var t=e.content,a=e.title,i=e.extra,n=l({},i.attributes,a?{title:a}:{},{class:i.classes.join(' ')}
 ),r=W(i.styles);0<r.length&&(n.style=r);var c=[];return c.push({tag:'span',attributes:n,children:[t]}),a&&c.push({tag:'span',attributes:{class:'sr-only'},children:[a]}),c}function re(e){for(var t='',a=0,i;a<e.length;a++)i=e.charCodeAt(a).toString(16),t+=('000'+i).slice(-4);return t}function ce(e,t){var a=2<arguments.length&&arguments[2]!==void 0?arguments[2]:{},i=a.skipHooks,n=Object.keys(t).reduce(function(e,a){var i=t[a],n=!!i.icon;return n?e[i.iconName]=i.icon:e[a]=i,e},{});'function'!=typeof w.hooks.addPack||void 0!==i&&i?w.styles[e]=l({},w.styles[e]||{},n):w.hooks.addPack(e,n),'fas'===e&&ce('fa',t)}function oe(e,t){return(aa[e]||{})[t]}function se(e,t){return(ia[e]||{})[t]}function le(e){return na[e]||{prefix:null,iconName:null}}function fe(e){return e.reduce(function(e,t){var a=X(St.familyPrefix,t);if(ca[t])e.prefix=t;else if(St.autoFetchSvg&&-1<['fas','far','fal','fad','fab','fa'].indexOf(t))e.prefix=t;else if(a){var i='fa'===e.prefix?le(a):{};e.iconName=i.iconName||a,e.prefi
 x=i.prefix||e.prefix}else t!==St.replacementClass&&0!==t.indexOf('fa-w-')&&e.rest.push(t);return e},oa())}function de(e,t,a){if(e&&e[t]&&e[t][a])return{prefix:t,iconName:a,icon:e[t][a]}}function me(e){var t=e.tag,a=e.attributes,i=void 0===a?{}:a,n=e.children,r=void 0===n?[]:n;return'string'==typeof e?B(e):'<'.concat(t,' ').concat(U(i),'>').concat(r.map(me).join(''),'</').concat(t,'>')}function ue(e){var t=e.getAttribute?e.getAttribute(ft):null;return'string'==typeof t}function pe(){if(!0===St.autoReplaceSvg)return la.replace;var e=la[St.autoReplaceSvg];return e||la.replace}function he(e){e()}function ge(e,t){var a='function'==typeof t?t:sa;if(0===e.length)a();else{var i=he;St.mutateApproach===gt&&(i=Ze.requestAnimationFrame||he),i(function(){var t=pe(),i=Jt.begin('mutate');e.map(t),i(),a()})}}function be(){fa=!0}function ye(){fa=!1}function ve(e){if(tt&&St.observeMutations){var t=e.treeCallback,a=e.nodeCallback,i=e.pseudoElementsCallback,n=e.observeMutationsRoot,r=void 0===n?et:n;da
 =new tt(function(e){fa||F(e).forEach(function(e){if('childList'===e.type&&0<e.addedNodes.length&&!ue(e.addedNodes[0])&&(St.searchPseudoElements&&i(e.target),t(e.target)),'attributes'===e.type&&e.target.parentNode&&St.searchPseudoElements&&i(e.target.parentNode),'attributes'===e.type&&ue(e.target)&&~Ct.indexOf(e.attributeName))if('class'===e.attributeName){var n=fe(Y(e.target)),r=n.prefix,c=n.iconName;r&&e.target.setAttribute('data-prefix',r),c&&e.target.setAttribute('data-icon',c)}else a(e.target)})}),nt&&da.observe(r,{childList:!0,attributes:!0,characterData:!0,subtree:!0})}}function xe(){da&&da.disconnect()}function we(e){var t=e.getAttribute('style'),a=[];return t&&(a=t.split(';').reduce(function(e,t){var a=t.split(':'),i=a[0],n=a.slice(1);return i&&0<n.length&&(e[i]=n.join(':').trim()),e},{})),a}function ke(e){var t=e.getAttribute('data-prefix'),a=e.getAttribute('data-icon'),i=void 0===e.innerText?'':e.innerText.trim(),n=fe(Y(e));return t&&a&&(n.prefix=t,n.iconName=a),n.prefix&&
 1<i.length?n.iconName=se(n.prefix,e.innerText):n.prefix&&1===i.length&&(n.iconName=oe(n.prefix,re(e.innerText))),n}function ze(e){return ma(e.getAttribute('data-fa-transform'))}function Me(e){var t=e.getAttribute('data-fa-symbol');return null!==t&&(!(''!==t)||t)}function Ne(e){var t=F(e.attributes).reduce(function(e,t){return'class'!==e.name&&'style'!==e.name&&(e[t.name]=t.value),e},{}),a=e.getAttribute('title');return St.autoA11y&&(a?t['aria-labelledby']=''.concat(St.replacementClass,'-title-').concat(j()):(t['aria-hidden']='true',t.focusable='false')),t}function Ce(e){var t=e.getAttribute('data-fa-mask');return t?fe(t.split(' ').map(function(e){return e.trim()})):oa()}function Ae(){return{iconName:null,title:null,prefix:null,transform:d,symbol:!1,mask:null,extra:{classes:[],styles:{},attributes:{}}}}function Le(e){var t=ke(e),a=t.iconName,i=t.prefix,n=t.rest,r=we(e),c=ze(e),o=Me(e),s=Ne(e),l=Ce(e);return{iconName:a,title:e.getAttribute('title'),prefix:i,transform:c,symbol:o,mask:l
 ,extra:{classes:n,styles:r,attributes:s}}}function Ie(e){this.name='MissingIcon',this.message=e||'Icon unavailable',this.stack=new Error().stack}function Ee(e){var t=e[0],a=e[1],i=e.slice(4),n=f(i,1),r=n[0],c=null;return c=Array.isArray(r)?{tag:'g',attributes:{class:''.concat(St.familyPrefix,'-').concat(At.GROUP)},children:[{tag:'path',attributes:{class:''.concat(St.familyPrefix,'-').concat(At.SECONDARY),fill:'currentColor',d:r[0]}},{tag:'path',attributes:{class:''.concat(St.familyPrefix,'-').concat(At.PRIMARY),fill:'currentColor',d:r[1]}}]}:{tag:'path',attributes:{fill:'currentColor',d:r}},{found:!0,width:t,height:a,icon:c}}function Se(e,t){return new Bt(function(a,i){if(e&&t&&wa[t]&&wa[t][e]){var r=wa[t][e];return a(Ee(r))}'object'===n(Ze.FontAwesomeKitConfig)&&'string'==typeof window.FontAwesomeKitConfig.token&&({}['fa-kit-token']=Ze.FontAwesomeKitConfig.token),e&&t&&!St.showMissingIcons?i(new Ie('Icon is missing for prefix '.concat(t,' with icon name ').concat(e))):a({found:!1,w
 idth:512,height:512,icon:xa})})}function _e(e,t){var a=t.iconName,i=t.title,n=t.prefix,r=t.transform,c=t.symbol,o=t.mask,s=t.extra;return new Bt(function(t){Bt.all([Se(a,n),Se(o.iconName,o.prefix)]).then(function(o){var l=f(o,2),d=l[0],m=l[1];t([e,ae({icons:{main:d,mask:m},prefix:n,iconName:a,transform:r,symbol:c,mask:m,title:i,extra:s,watchable:!0})])})})}function Pe(e,t){var a=t.title,i=t.transform,n=t.extra,r=null,c=null;if(rt){var o=parseInt(getComputedStyle(e).fontSize,10),s=e.getBoundingClientRect();r=s.width/o,c=s.height/o}return St.autoA11y&&!a&&(n.attributes['aria-hidden']='true'),Bt.resolve([e,ie({content:e.innerHTML,width:r,height:c,transform:i,title:a,extra:n,watchable:!0})])}function Te(e){var t=Le(e);return~t.extra.classes.indexOf(wt)?Pe(e,t):_e(e,t)}function He(e){var t=1<arguments.length&&arguments[1]!==void 0?arguments[1]:null;if(nt){var a=et.documentElement.classList,i=function(e){return a.add(''.concat(ht,'-').concat(e))},n=function(e){return a.remove(''.concat(ht
 ,'-').concat(e))},r=St.autoFetchSvg?Object.keys(vt):Object.keys(ka),c=['.'.concat(wt,':not([').concat(ft,'])')].concat(r.map(function(e){return'.'.concat(e,':not([').concat(ft,'])')})).join(', ');if(0!==c.length){var o=[];try{o=F(e.querySelectorAll(c))}catch(t){}if(0<o.length)i('pending'),n('complete');else return;var s=Jt.begin('onTree'),l=o.reduce(function(e,t){try{var a=Te(t);a&&e.push(a)}catch(t){!yt&&t instanceof Ie&&console.error(t)}return e},[]);return new Bt(function(e,a){Bt.all(l).then(function(a){ge(a,function(){i('active'),i('complete'),n('pending'),'function'==typeof t&&t(),s(),e()})}).catch(function(){s(),a()})})}}}function Ve(e){var t=1<arguments.length&&arguments[1]!==void 0?arguments[1]:null;Te(e).then(function(e){e&&ge([e],t)})}function Re(e,t){var a=''.concat(mt).concat(t.replace(':','-'));return new Bt(function(i,n){if(null!==e.getAttribute(a))return i();var r=F(e.children),c=r.filter(function(e){return e.getAttribute(dt)===t})[0],o=Ze.getComputedStyle(e,t),s=o.ge
 tPropertyValue('font-family').match(kt),f=o.getPropertyValue('font-weight');if(c&&!s)return e.removeChild(c),i();if(s){var d=o.getPropertyValue('content'),m=~['Solid','Regular','Light','Duotone','Brands'].indexOf(s[1])?xt[s[1].toLowerCase()]:zt[f],u=re(3===d.length?d.substr(1,1):d),p=oe(m,u),h=p;if(p&&(!c||c.getAttribute(ut)!==m||c.getAttribute(pt)!==h)){e.setAttribute(a,h),c&&e.removeChild(c);var g=Ae(),b=g.extra;b.attributes[dt]=t,Se(p,m).then(function(n){var r=ae(l({},g,{icons:{main:n,mask:oa()},prefix:m,iconName:h,extra:b,watchable:!0})),c=et.createElement('svg');':before'===t?e.insertBefore(c,e.firstChild):e.appendChild(c),c.outerHTML=r.map(function(e){return me(e)}).join('\n'),e.removeAttribute(a),i()}).catch(n)}else i()}else i()})}function Oe(e){return Bt.all([Re(e,':before'),Re(e,':after')])}function De(e){return e.parentNode!==document.head&&!~bt.indexOf(e.tagName.toUpperCase())&&!e.getAttribute(dt)&&(!e.parentNode||'svg'!==e.parentNode.tagName)}function je(e){return nt?new
  Bt(function(t,a){var i=F(e.querySelectorAll('*')).filter(De).map(Oe),n=Jt.begin('searchPseudoElements');be(),Bt.all(i).then(function(){n(),ye(),t()}).catch(function(){n(),ye(),a()})}):void 0}function Fe(){var e=St.familyPrefix,t=St.replacementClass,a=za;if(e!==st||t!==lt){var i=/\.fa\-/g,n=/\--fa\-/g,r=/\.svg-inline--fa/g;a=a.replace(i,'.'.concat(e,'-')).replace(n,'--'.concat(e,'-')).replace(r,'.'.concat(t))}return a}function Ye(){St.autoAddCss&&!Ca&&(D(Fe()),Ca=!0)}function Xe(e,t){return Object.defineProperty(e,'abstract',{get:t}),Object.defineProperty(e,'html',{get:function(){return e.abstract.map(function(e){return me(e)})}}),Object.defineProperty(e,'node',{get:function(){if(nt){var t=et.createElement('div');return t.innerHTML=e.html,t.children}}}),e}function Be(e){var t=e.prefix,a=void 0===t?'fa':t,i=e.iconName;return i?de(Na.definitions,a,i)||de(w.styles,a,i):void 0}a.d(t,'b',function(){return Na}),a.d(t,'a',function(){return Aa});var Ue=function(){},We={},qe={},Ge=null,Ke={m
 ark:Ue,measure:Ue};try{'undefined'!=typeof window&&(We=window),'undefined'!=typeof document&&(qe=document),'undefined'!=typeof MutationObserver&&(Ge=MutationObserver),'undefined'!=typeof performance&&(Ke=performance)}catch(t){}var $e=We.navigator||{},Je=$e.userAgent,Qe=void 0===Je?'':Je,Ze=We,et=qe,tt=Ge,at=Ke,it=!!Ze.document,nt=!!et.documentElement&&!!et.head&&'function'==typeof et.addEventListener&&'function'==typeof et.createElement,rt=~Qe.indexOf('MSIE')||~Qe.indexOf('Trident/'),ct='___FONT_AWESOME___',ot=16,st='fa',lt='svg-inline--fa',ft='data-fa-i2svg',dt='data-fa-pseudo-element',mt='data-fa-pseudo-element-pending',ut='data-prefix',pt='data-icon',ht='fontawesome-i2svg',gt='async',bt=['HTML','HEAD','STYLE','SCRIPT'],yt=function(){try{return!0}catch(t){return!1}}(),vt={fas:'solid',far:'regular',fal:'light',fad:'duotone',fab:'brands',fa:'solid'},xt={solid:'fas',regular:'far',light:'fal',duotone:'fad',brands:'fab'},wt='fa-layers-text',kt=/Font Awesome 5 (Solid|Regular|Light|Duoto
 ne|Brands|Free|Pro)/,zt={900:'fas',400:'far',normal:'far',300:'fal'},Mt=[1,2,3,4,5,6,7,8,9,10],Nt=Mt.concat([11,12,13,14,15,16,17,18,19,20]),Ct=['class','data-prefix','data-icon','data-fa-transform','data-fa-mask'],At={GROUP:'group',SWAP_OPACITY:'swap-opacity',PRIMARY:'primary',SECONDARY:'secondary'},Lt=['xs','sm','lg','fw','ul','li','border','pull-left','pull-right','spin','pulse','rotate-90','rotate-180','rotate-270','flip-horizontal','flip-vertical','flip-both','stack','stack-1x','stack-2x','inverse','layers','layers-text','layers-counter',At.GROUP,At.SWAP_OPACITY,At.PRIMARY,At.SECONDARY].concat(Mt.map(function(e){return''.concat(e,'x')})).concat(Nt.map(function(e){return'w-'.concat(e)})),It=Ze.FontAwesomeConfig||{};if(et&&'function'==typeof et.querySelector){[['data-family-prefix','familyPrefix'],['data-replacement-class','replacementClass'],['data-auto-replace-svg','autoReplaceSvg'],['data-auto-add-css','autoAddCss'],['data-auto-a11y','autoA11y'],['data-search-pseudo-elements',
 'searchPseudoElements'],['data-observe-mutations','observeMutations'],['data-mutate-approach','mutateApproach'],['data-keep-original-source','keepOriginalSource'],['data-measure-performance','measurePerformance'],['data-show-missing-icons','showMissingIcons']].forEach(function(e){var t=f(e,2),a=t[0],i=t[1],n=k(x(a));n!==void 0&&null!==n&&(It[i]=n)})}var Et=l({},{familyPrefix:st,replacementClass:lt,autoReplaceSvg:!0,autoAddCss:!0,autoA11y:!0,searchPseudoElements:!1,observeMutations:!0,mutateApproach:'async',keepOriginalSource:!0,measurePerformance:!1,showMissingIcons:!0},It);Et.autoReplaceSvg||(Et.observeMutations=!1);var St=l({},Et);Ze.FontAwesomeConfig=St;var _t=Ze||{};_t[ct]||(_t[ct]={}),_t[ct].styles||(_t[ct].styles={}),_t[ct].hooks||(_t[ct].hooks={}),_t[ct].shims||(_t[ct].shims=[]);var w=_t[ct],Pt=[],Tt=!1;nt&&(Tt=(et.documentElement.doScroll?/^loaded|^c/:/^loaded|^i|^c/).test(et.readyState),!Tt&&et.addEventListener('DOMContentLoaded',function e(){et.removeEventListener('DOMCont
 entLoaded',e),Tt=1,Pt.map(function(e){return e()})}));var Ht='pending',Vt='settled',Rt='fulfilled',Ot='rejected',Dt=function(){},jt='undefined'!=typeof e&&'undefined'!=typeof e.process&&'function'==typeof e.process.emit,Ft='undefined'==typeof i?setTimeout:i,Yt=[],Xt;R.prototype={constructor:R,_state:Ht,_then:null,_data:void 0,_handled:!1,then:function(e,t){var a={owner:this,then:new this.constructor(Dt),fulfilled:e,rejected:t};return(t||e)&&!this._handled&&(this._handled=!0,this._state===Ot&&jt&&N(V,this)),this._state===Rt||this._state===Ot?N(A,a):this._then.push(a),a.then},catch:function(e){return this.then(null,e)}},R.all=function(e){if(!Array.isArray(e))throw new TypeError('You must pass an array to Promise.all().');return new R(function(t,a){function n(e){return c++,function(a){r[e]=a,--c||t(r)}}for(var r=[],c=0,o=0,i;o<e.length;o++)i=e[o],i&&'function'==typeof i.then?i.then(n(o),a):r[o]=i;c||t(r)})},R.race=function(e){if(!Array.isArray(e))throw new TypeError('You must pass an a
 rray to Promise.race().');return new R(function(t,a){for(var n=0,i;n<e.length;n++)i=e[n],i&&'function'==typeof i.then?i.then(t,a):t(i)})},R.resolve=function(e){return e&&'object'===n(e)&&e.constructor===R?e:new R(function(t){t(e)})},R.reject=function(e){return new R(function(t,a){a(e)})};var Bt='function'==typeof Promise?Promise:R,Ut=ot,d={size:16,x:0,y:0,rotate:0,flipX:!1,flipY:!1},Wt='0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ',qt={x:0,y:0,width:'100%',height:'100%'},Gt=function(){},Kt=St.measurePerformance&&at&&at.mark&&at.measure?at:{mark:Gt,measure:Gt},p='FA "5.11.2"',$t=function(e){Kt.mark(''.concat(p,' ').concat(e,' ends')),Kt.measure(''.concat(p,' ').concat(e),''.concat(p,' ').concat(e,' begins'),''.concat(p,' ').concat(e,' ends'))},Jt={begin:function(e){return Kt.mark(''.concat(p,' ').concat(e,' begins')),function(){return $t(e)}},end:$t},Qt=function(e,t){return function(i,a,n,r){return e.call(t,i,a,n,r)}},Zt=function(e,t,a,n){var r=Object.keys(e),c=r.le
 ngth,o=n===void 0?t:Qt(t,n),s,i,l;for(void 0===a?(s=1,l=e[r[0]]):(s=0,l=a);s<c;s++)i=r[s],l=o(l,e[i],i,e);return l},ea=w.styles,ta=w.shims,aa={},ia={},na={},ra=function(){var e=function(e){return Zt(ea,function(t,a,i){return t[i]=Zt(a,e,{}),t},{})};aa=e(function(e,t,a){return t[3]&&(e[t[3]]=a),e}),ia=e(function(e,t,a){var i=t[2];return e[a]=a,i.forEach(function(t){e[t]=a}),e});var t='far'in ea;na=Zt(ta,function(e,a){var i=a[0],n=a[1],r=a[2];return'far'!==n||t||(n='fas'),e[i]={prefix:n,iconName:r},e},{})};ra();var ca=w.styles,oa=function(){return{prefix:null,iconName:null,rest:[]}},sa=function(){},la={replace:function(e){var t=e[0],a=e[1],i=a.map(function(e){return me(e)}).join('\n');if(t.parentNode&&t.outerHTML)t.outerHTML=i+(St.keepOriginalSource&&'svg'!==t.tagName.toLowerCase()?'<!-- '.concat(t.outerHTML,' -->'):'');else if(t.parentNode){var n=document.createElement('span');t.parentNode.replaceChild(n,t),n.outerHTML=i}},nest:function(e){var t=e[0],a=e[1];if(~Y(t).indexOf(St.replac
 ementClass))return la.replace(e);var i=new RegExp(''.concat(St.familyPrefix,'-.*'));delete a[0].attributes.style,delete a[0].attributes.id;var n=a[0].attributes.class.split(' ').reduce(function(e,t){return t===St.replacementClass||t.match(i)?e.toSvg.push(t):e.toNode.push(t),e},{toNode:[],toSvg:[]});a[0].attributes.class=n.toSvg.join(' ');var r=a.map(function(e){return me(e)}).join('\n');t.setAttribute('class',n.toNode.join(' ')),t.setAttribute(ft,''),t.innerHTML=r}},fa=!1,da=null,ma=function(e){var t={size:16,x:0,y:0,flipX:!1,flipY:!1,rotate:0};return e?e.toLowerCase().split(' ').reduce(function(e,t){var a=t.toLowerCase().split('-'),i=a[0],n=a.slice(1).join('-');return i&&'h'===n?(e.flipX=!0,e):i&&'v'===n?(e.flipY=!0,e):(n=parseFloat(n),isNaN(n))?e:('grow'===i?e.size+=n:'shrink'===i?e.size-=n:'left'===i?e.x-=n:'right'===i?e.x+=n:'up'===i?e.y-=n:'down'===i?e.y+=n:'rotate'===i?e.rotate+=n:void 0,e)},t):t};Ie.prototype=Object.create(Error.prototype),Ie.prototype.constructor=Ie;var ua={
 fill:'currentColor'},pa={attributeType:'XML',repeatCount:'indefinite',dur:'2s'},ha={tag:'path',attributes:l({},ua,{d:'M156.5,447.7l-12.6,29.5c-18.7-9.5-35.9-21.2-51.5-34.9l22.7-22.7C127.6,430.5,141.5,440,156.5,447.7z M40.6,272H8.5 c1.4,21.2,5.4,41.7,11.7,61.1L50,321.2C45.1,305.5,41.8,289,40.6,272z M40.6,240c1.4-18.8,5.2-37,11.1-54.1l-29.5-12.6 C14.7,194.3,10,216.7,8.5,240H40.6z M64.3,156.5c7.8-14.9,17.2-28.8,28.1-41.5L69.7,92.3c-13.7,15.6-25.5,32.8-34.9,51.5 L64.3,156.5z M397,419.6c-13.9,12-29.4,22.3-46.1,30.4l11.9,29.8c20.7-9.9,39.8-22.6,56.9-37.6L397,419.6z M115,92.4 c13.9-12,29.4-22.3,46.1-30.4l-11.9-29.8c-20.7,9.9-39.8,22.6-56.8,37.6L115,92.4z M447.7,355.5c-7.8,14.9-17.2,28.8-28.1,41.5 l22.7,22.7c13.7-15.6,25.5-32.9,34.9-51.5L447.7,355.5z M471.4,272c-1.4,18.8-5.2,37-11.1,54.1l29.5,12.6 c7.5-21.1,12.2-43.5,13.6-66.8H471.4z M321.2,462c-15.7,5-32.2,8.2-49.2,9.4v32.1c21.2-1.4,41.7-5.4,61.1-11.7L321.2,462z M240,471.4c-18.8-1.4-37-5.2-54.1-11.1l-12.6,29.5c21.1,7.5,43.5,12.2,66.8,13.6V
 471.4z M462,190.8c5,15.7,8.2,32.2,9.4,49.2h32.1 c-1.4-21.2-5.4-41.7-11.7-61.1L462,190.8z M92.4,397c-12-13.9-22.3-29.4-30.4-46.1l-29.8,11.9c9.9,20.7,22.6,39.8,37.6,56.9 L92.4,397z M272,40.6c18.8,1.4,36.9,5.2,54.1,11.1l12.6-29.5C317.7,14.7,295.3,10,272,8.5V40.6z M190.8,50 c15.7-5,32.2-8.2,49.2-9.4V8.5c-21.2,1.4-41.7,5.4-61.1,11.7L190.8,50z M442.3,92.3L419.6,115c12,13.9,22.3,29.4,30.5,46.1 l29.8-11.9C470,128.5,457.3,109.4,442.3,92.3z M397,92.4l22.7-22.7c-15.6-13.7-32.8-25.5-51.5-34.9l-12.6,29.5 C370.4,72.1,384.4,81.5,397,92.4z'})},ga=l({},pa,{attributeName:'opacity'}),ba={tag:'circle',attributes:l({},ua,{cx:'256',cy:'364',r:'28'}),children:[{tag:'animate',attributes:l({},pa,{attributeName:'r',values:'28;14;28;28;14;28;'})},{tag:'animate',attributes:l({},ga,{values:'1;0;1;1;0;1;'})}]},ya={tag:'path',attributes:l({},ua,{opacity:'1',d:'M263.7,312h-16c-6.6,0-12-5.4-12-12c0-71,77.4-63.9,77.4-107.8c0-20-17.8-40.2-57.4-40.2c-29.1,0-44.3,9.6-59.2,28.7 c-3.9,5-11.1,6-16.2,2.4l-13.1-9.2c-5.6-3.9
 -6.9-11.8-2.6-17.2c21.2-27.2,46.4-44.7,91.2-44.7c52.3,0,97.4,29.8,97.4,80.2 c0,67.6-77.4,63.5-77.4,107.8C275.7,306.6,270.3,312,263.7,312z'}),children:[{tag:'animate',attributes:l({},ga,{values:'1;0;0;0;0;1;'})}]},va={tag:'path',attributes:l({},ua,{opacity:'0',d:'M232.5,134.5l7,168c0.3,6.4,5.6,11.5,12,11.5h9c6.4,0,11.7-5.1,12-11.5l7-168c0.3-6.8-5.2-12.5-12-12.5h-23 C237.7,122,232.2,127.7,232.5,134.5z'}),children:[{tag:'animate',attributes:l({},ga,{values:'0;0;1;1;0;0;'})}]},xa={tag:'g',children:[ha,ba,ya,va]},wa=w.styles,ka=w.styles,za='svg:not(:root).svg-inline--fa {\n  overflow: visible;\n}\n\n.svg-inline--fa {\n  display: inline-block;\n  font-size: inherit;\n  height: 1em;\n  overflow: visible;\n  vertical-align: -0.125em;\n}\n.svg-inline--fa.fa-lg {\n  vertical-align: -0.225em;\n}\n.svg-inline--fa.fa-w-1 {\n  width: 0.0625em;\n}\n.svg-inline--fa.fa-w-2 {\n  width: 0.125em;\n}\n.svg-inline--fa.fa-w-3 {\n  width: 0.1875em;\n}\n.svg-inline--fa.fa-w-4 {\n  width: 0.25em;\n}\n.svg-in
 line--fa.fa-w-5 {\n  width: 0.3125em;\n}\n.svg-inline--fa.fa-w-6 {\n  width: 0.375em;\n}\n.svg-inline--fa.fa-w-7 {\n  width: 0.4375em;\n}\n.svg-inline--fa.fa-w-8 {\n  width: 0.5em;\n}\n.svg-inline--fa.fa-w-9 {\n  width: 0.5625em;\n}\n.svg-inline--fa.fa-w-10 {\n  width: 0.625em;\n}\n.svg-inline--fa.fa-w-11 {\n  width: 0.6875em;\n}\n.svg-inline--fa.fa-w-12 {\n  width: 0.75em;\n}\n.svg-inline--fa.fa-w-13 {\n  width: 0.8125em;\n}\n.svg-inline--fa.fa-w-14 {\n  width: 0.875em;\n}\n.svg-inline--fa.fa-w-15 {\n  width: 0.9375em;\n}\n.svg-inline--fa.fa-w-16 {\n  width: 1em;\n}\n.svg-inline--fa.fa-w-17 {\n  width: 1.0625em;\n}\n.svg-inline--fa.fa-w-18 {\n  width: 1.125em;\n}\n.svg-inline--fa.fa-w-19 {\n  width: 1.1875em;\n}\n.svg-inline--fa.fa-w-20 {\n  width: 1.25em;\n}\n.svg-inline--fa.fa-pull-left {\n  margin-right: 0.3em;\n  width: auto;\n}\n.svg-inline--fa.fa-pull-right {\n  margin-left: 0.3em;\n  width: auto;\n}\n.svg-inline--fa.fa-border {\n  height: 1.5em;\n}\n.svg-inline--fa.fa-li {\n
   width: 2em;\n}\n.svg-inline--fa.fa-fw {\n  width: 1.25em;\n}\n\n.fa-layers svg.svg-inline--fa {\n  bottom: 0;\n  left: 0;\n  margin: auto;\n  position: absolute;\n  right: 0;\n  top: 0;\n}\n\n.fa-layers {\n  display: inline-block;\n  height: 1em;\n  position: relative;\n  text-align: center;\n  vertical-align: -0.125em;\n  width: 1em;\n}\n.fa-layers svg.svg-inline--fa {\n  -webkit-transform-origin: center center;\n          transform-origin: center center;\n}\n\n.fa-layers-counter, .fa-layers-text {\n  display: inline-block;\n  position: absolute;\n  text-align: center;\n}\n\n.fa-layers-text {\n  left: 50%;\n  top: 50%;\n  -webkit-transform: translate(-50%, -50%);\n          transform: translate(-50%, -50%);\n  -webkit-transform-origin: center center;\n          transform-origin: center center;\n}\n\n.fa-layers-counter {\n  background-color: #ff253a;\n  border-radius: 1em;\n  -webkit-box-sizing: border-box;\n          box-sizing: border-box;\n  color: #fff;\n  height: 1.5em;\n  li
 ne-height: 1;\n  max-width: 5em;\n  min-width: 1.5em;\n  overflow: hidden;\n  padding: 0.25em;\n  right: 0;\n  text-overflow: ellipsis;\n  top: 0;\n  -webkit-transform: scale(0.25);\n          transform: scale(0.25);\n  -webkit-transform-origin: top right;\n          transform-origin: top right;\n}\n\n.fa-layers-bottom-right {\n  bottom: 0;\n  right: 0;\n  top: auto;\n  -webkit-transform: scale(0.25);\n          transform: scale(0.25);\n  -webkit-transform-origin: bottom right;\n          transform-origin: bottom right;\n}\n\n.fa-layers-bottom-left {\n  bottom: 0;\n  left: 0;\n  right: auto;\n  top: auto;\n  -webkit-transform: scale(0.25);\n          transform: scale(0.25);\n  -webkit-transform-origin: bottom left;\n          transform-origin: bottom left;\n}\n\n.fa-layers-top-right {\n  right: 0;\n  top: 0;\n  -webkit-transform: scale(0.25);\n          transform: scale(0.25);\n  -webkit-transform-origin: top right;\n          transform-origin: top right;\n}\n\n.fa-layers-top-left {
 \n  left: 0;\n  right: auto;\n  top: 0;\n  -webkit-transform: scale(0.25);\n          transform: scale(0.25);\n  -webkit-transform-origin: top left;\n          transform-origin: top left;\n}\n\n.fa-lg {\n  font-size: 1.3333333333em;\n  line-height: 0.75em;\n  vertical-align: -0.0667em;\n}\n\n.fa-xs {\n  font-size: 0.75em;\n}\n\n.fa-sm {\n  font-size: 0.875em;\n}\n\n.fa-1x {\n  font-size: 1em;\n}\n\n.fa-2x {\n  font-size: 2em;\n}\n\n.fa-3x {\n  font-size: 3em;\n}\n\n.fa-4x {\n  font-size: 4em;\n}\n\n.fa-5x {\n  font-size: 5em;\n}\n\n.fa-6x {\n  font-size: 6em;\n}\n\n.fa-7x {\n  font-size: 7em;\n}\n\n.fa-8x {\n  font-size: 8em;\n}\n\n.fa-9x {\n  font-size: 9em;\n}\n\n.fa-10x {\n  font-size: 10em;\n}\n\n.fa-fw {\n  text-align: center;\n  width: 1.25em;\n}\n\n.fa-ul {\n  list-style-type: none;\n  margin-left: 2.5em;\n  padding-left: 0;\n}\n.fa-ul > li {\n  position: relative;\n}\n\n.fa-li {\n  left: -2em;\n  position: absolute;\n  text-align: center;\n  width: 2em;\n  line-height: inher
 it;\n}\n\n.fa-border {\n  border: solid 0.08em #eee;\n  border-radius: 0.1em;\n  padding: 0.2em 0.25em 0.15em;\n}\n\n.fa-pull-left {\n  float: left;\n}\n\n.fa-pull-right {\n  float: right;\n}\n\n.fa.fa-pull-left,\n.fas.fa-pull-left,\n.far.fa-pull-left,\n.fal.fa-pull-left,\n.fab.fa-pull-left {\n  margin-right: 0.3em;\n}\n.fa.fa-pull-right,\n.fas.fa-pull-right,\n.far.fa-pull-right,\n.fal.fa-pull-right,\n.fab.fa-pull-right {\n  margin-left: 0.3em;\n}\n\n.fa-spin {\n  -webkit-animation: fa-spin 2s infinite linear;\n          animation: fa-spin 2s infinite linear;\n}\n\n.fa-pulse {\n  -webkit-animation: fa-spin 1s infinite steps(8);\n          animation: fa-spin 1s infinite steps(8);\n}\n\n at -webkit-keyframes fa-spin {\n  0% {\n    -webkit-transform: rotate(0deg);\n            transform: rotate(0deg);\n  }\n  100% {\n    -webkit-transform: rotate(360deg);\n            transform: rotate(360deg);\n  }\n}\n\n at keyframes fa-spin {\n  0% {\n    -webkit-transform: rotate(0deg);\n            tran
 sform: rotate(0deg);\n  }\n  100% {\n    -webkit-transform: rotate(360deg);\n            transform: rotate(360deg);\n  }\n}\n.fa-rotate-90 {\n  -ms-filter: "progid:DXImageTransform.Microsoft.BasicImage(rotation=1)";\n  -webkit-transform: rotate(90deg);\n          transform: rotate(90deg);\n}\n\n.fa-rotate-180 {\n  -ms-filter: "progid:DXImageTransform.Microsoft.BasicImage(rotation=2)";\n  -webkit-transform: rotate(180deg);\n          transform: rotate(180deg);\n}\n\n.fa-rotate-270 {\n  -ms-filter: "progid:DXImageTransform.Microsoft.BasicImage(rotation=3)";\n  -webkit-transform: rotate(270deg);\n          transform: rotate(270deg);\n}\n\n.fa-flip-horizontal {\n  -ms-filter: "progid:DXImageTransform.Microsoft.BasicImage(rotation=0, mirror=1)";\n  -webkit-transform: scale(-1, 1);\n          transform: scale(-1, 1);\n}\n\n.fa-flip-vertical {\n  -ms-filter: "progid:DXImageTransform.Microsoft.BasicImage(rotation=2, mirror=1)";\n  -webkit-transform: scale(1, -1);\n          transform: scale
 (1, -1);\n}\n\n.fa-flip-both, .fa-flip-horizontal.fa-flip-vertical {\n  -ms-filter: "progid:DXImageTransform.Microsoft.BasicImage(rotation=2, mirror=1)";\n  -webkit-transform: scale(-1, -1);\n          transform: scale(-1, -1);\n}\n\n:root .fa-rotate-90,\n:root .fa-rotate-180,\n:root .fa-rotate-270,\n:root .fa-flip-horizontal,\n:root .fa-flip-vertical,\n:root .fa-flip-both {\n  -webkit-filter: none;\n          filter: none;\n}\n\n.fa-stack {\n  display: inline-block;\n  height: 2em;\n  position: relative;\n  width: 2.5em;\n}\n\n.fa-stack-1x,\n.fa-stack-2x {\n  bottom: 0;\n  left: 0;\n  margin: auto;\n  position: absolute;\n  right: 0;\n  top: 0;\n}\n\n.svg-inline--fa.fa-stack-1x {\n  height: 1em;\n  width: 1.25em;\n}\n.svg-inline--fa.fa-stack-2x {\n  height: 2em;\n  width: 2.5em;\n}\n\n.fa-inverse {\n  color: #fff;\n}\n\n.sr-only {\n  border: 0;\n  clip: rect(0, 0, 0, 0);\n  height: 1px;\n  margin: -1px;\n  overflow: hidden;\n  padding: 0;\n  position: absolute;\n  width: 1px;\n}\n\
 n.sr-only-focusable:active, .sr-only-focusable:focus {\n  clip: auto;\n  height: auto;\n  margin: 0;\n  overflow: visible;\n  position: static;\n  width: auto;\n}\n\n.svg-inline--fa .fa-primary {\n  fill: var(--fa-primary-color, currentColor);\n  opacity: 1;\n  opacity: var(--fa-primary-opacity, 1);\n}\n\n.svg-inline--fa .fa-secondary {\n  fill: var(--fa-secondary-color, currentColor);\n  opacity: 0.4;\n  opacity: var(--fa-secondary-opacity, 0.4);\n}\n\n.svg-inline--fa.fa-swap-opacity .fa-primary {\n  opacity: 0.4;\n  opacity: var(--fa-secondary-opacity, 0.4);\n}\n\n.svg-inline--fa.fa-swap-opacity .fa-secondary {\n  opacity: 1;\n  opacity: var(--fa-primary-opacity, 1);\n}\n\n.svg-inline--fa mask .fa-primary,\n.svg-inline--fa mask .fa-secondary {\n  fill: black;\n}\n\n.fad.fa-inverse {\n  color: #fff;\n}',Ma=function(){function e(){r(this,e),this.definitions={}}return o(e,[{key:'add',value:function(){for(var e=this,t=arguments.length,a=Array(t),i=0;i<t;i++)a[i]=arguments[i];var n=a.r
 educe(this._pullDefinitions,{});Object.keys(n).forEach(function(t){e.definitions[t]=l({},e.definitions[t]||{},n[t]),ce(t,n[t]),ra()})}},{key:'reset',value:function(){this.definitions={}}},{key:'_pullDefinitions',value:function(e,t){var a=t.prefix&&t.iconName&&t.icon?{0:t}:t;return Object.keys(a).map(function(t){var i=a[t],n=i.prefix,r=i.iconName,c=i.icon;e[n]||(e[n]={}),e[n][r]=c}),e}}]),e}(),Na=new Ma,Ca=!1,Aa={i2svg:function(){var e=0<arguments.length&&arguments[0]!==void 0?arguments[0]:{};if(nt){Ye();var t=e.node,a=void 0===t?et:t,i=e.callback,n=void 0===i?function(){}:i;return St.searchPseudoElements&&je(a),He(a,n)}return Bt.reject('Operation requires a DOM of some kind.')},css:Fe,insertCss:function(){Ca||(D(Fe()),Ca=!0)},watch:function(){var e=0<arguments.length&&arguments[0]!==void 0?arguments[0]:{},t=e.autoReplaceSvgRoot,a=e.observeMutationsRoot;!1===St.autoReplaceSvg&&(St.autoReplaceSvg=!0),St.observeMutations=!0,z(function(){Ea({autoReplaceSvgRoot:t}),ve({treeCallback:He,no
 deCallback:Ve,pseudoElementsCallback:je,observeMutationsRoot:a})})}},La=function(e){return function(t){var a=1<arguments.length&&void 0!==arguments[1]?arguments[1]:{},i=(t||{}).icon?t:Be(t||{}),n=a.mask;return n&&(n=(n||{}).icon?n:Be(n||{})),e(i,l({},a,{mask:n}))}}(function(e){var t=1<arguments.length&&arguments[1]!==void 0?arguments[1]:{},a=t.transform,i=void 0===a?d:a,n=t.symbol,r=t.mask,c=void 0===r?null:r,o=t.title,s=void 0===o?null:o,f=t.classes,m=void 0===f?[]:f,u=t.attributes,p=void 0===u?{}:u,h=t.styles,g=void 0===h?{}:h;if(e){var b=e.prefix,y=e.iconName,v=e.icon;return Xe(l({type:'icon'},e),function(){return Ye(),St.autoA11y&&(s?p['aria-labelledby']=''.concat(St.replacementClass,'-title-').concat(j()):(p['aria-hidden']='true',p.focusable='false')),ae({icons:{main:Ee(v),mask:c?Ee(c.icon):{found:!1,width:null,height:null,icon:{}}},prefix:b,iconName:y,transform:l({},d,i),symbol:void 0!==n&&n,title:s,extra:{attributes:p,styles:g,classes:m}})})}}),Ia={noAuto:function(){St.autoRe
 placeSvg=!1,St.observeMutations=!1,xe()},config:St,dom:Aa,library:Na,parse:{transform:function(e){return ma(e)}},findIconDefinition:Be,icon:La,text:function(e){var t=1<arguments.length&&arguments[1]!==void 0?arguments[1]:{},a=t.transform,i=void 0===a?d:a,n=t.title,r=void 0===n?null:n,c=t.classes,o=void 0===c?[]:c,s=t.attributes,f=void 0===s?{}:s,u=t.styles,p=void 0===u?{}:u;return Xe({type:'text',content:e},function(){return Ye(),ie({content:e,transform:l({},d,i),title:r,extra:{attributes:f,styles:p,classes:[''.concat(St.familyPrefix,'-layers-text')].concat(m(o))}})})},counter:function(e){var t=1<arguments.length&&arguments[1]!==void 0?arguments[1]:{},a=t.title,i=void 0===a?null:a,n=t.classes,r=void 0===n?[]:n,c=t.attributes,o=void 0===c?{}:c,s=t.styles,l=void 0===s?{}:s;return Xe({type:'counter',content:e},function(){return Ye(),ne({content:e.toString(),title:i,extra:{attributes:o,styles:l,classes:[''.concat(St.familyPrefix,'-layers-counter')].concat(m(r))}})})},layer:function(e){v
 ar t=1<arguments.length&&arguments[1]!==void 0?arguments[1]:{},a=t.classes,i=void 0===a?[]:a;return Xe({type:'layer'},function(){Ye();var t=[];return e(function(e){Array.isArray(e)?e.map(function(e){t=t.concat(e.abstract)}):t=t.concat(e.abstract)}),[{tag:'span',attributes:{class:[''.concat(St.familyPrefix,'-layers')].concat(m(i)).join(' ')},children:t}]})},toHtml:me},Ea=function(){var e=0<arguments.length&&arguments[0]!==void 0?arguments[0]:{},t=e.autoReplaceSvgRoot,a=void 0===t?et:t;(0<Object.keys(w.styles).length||St.autoFetchSvg)&&nt&&St.autoReplaceSvg&&Ia.dom.i2svg({node:a})}}).call(this,a(0),a(2).setImmediate)},function(e,t,a){(function(e){function i(e,t){this._id=e,this._clearFn=t}var n='undefined'!=typeof e&&e||'undefined'!=typeof self&&self||window,r=Function.prototype.apply;t.setTimeout=function(){return new i(r.call(setTimeout,n,arguments),clearTimeout)},t.setInterval=function(){return new i(r.call(setInterval,n,arguments),clearInterval)},t.clearTimeout=t.clearInterval=fun
 ction(e){e&&e.close()},i.prototype.unref=i.prototype.ref=function(){},i.prototype.close=function(){this._clearFn.call(n,this._id)},t.enroll=function(e,t){clearTimeout(e._idleTimeoutId),e._idleTimeout=t},t.unenroll=function(e){clearTimeout(e._idleTimeoutId),e._idleTimeout=-1},t._unrefActive=t.active=function(e){clearTimeout(e._idleTimeoutId);var t=e._idleTimeout;0<=t&&(e._idleTimeoutId=setTimeout(function(){e._onTimeout&&e._onTimeout()},t))},a(3),t.setImmediate='undefined'!=typeof self&&self.setImmediate||'undefined'!=typeof e&&e.setImmediate||this&&this.setImmediate,t.clearImmediate='undefined'!=typeof self&&self.clearImmediate||'undefined'!=typeof e&&e.clearImmediate||this&&this.clearImmediate}).call(this,a(0))},function(e,t,a){(function(e,t){(function(e){'use strict';function a(e){'function'!=typeof e&&(e=new Function(''+e));for(var t=Array(arguments.length-1),a=0;a<t.length;a++)t[a]=arguments[a+1];var i={callback:e,args:t};return u[m]=i,b(m),m++}function i(e){delete u[e]}function
  n(e){var t=e.callback,a=e.args;switch(a.length){case 0:t();break;case 1:t(a[0]);break;case 2:t(a[0],a[1]);break;case 3:t(a[0],a[1],a[2]);break;default:t.apply(void 0,a);}}function r(e){if(p)setTimeout(r,0,e);else{var t=u[e];if(t){p=!0;try{n(t)}finally{i(e),p=!1}}}}function c(){b=function(e){t.nextTick(function(){r(e)})}}function o(){if(e.postMessage&&!e.importScripts){var t=!0,a=e.onmessage;return e.onmessage=function(){t=!1},e.postMessage('','*'),e.onmessage=a,t}}function s(){var t='setImmediate$'+Math.random()+'$',a=function(a){a.source===e&&'string'==typeof a.data&&0===a.data.indexOf(t)&&r(+a.data.slice(t.length))};e.addEventListener?e.addEventListener('message',a,!1):e.attachEvent('onmessage',a),b=function(a){e.postMessage(t+a,'*')}}function l(){var e=new MessageChannel;e.port1.onmessage=function(e){var t=e.data;r(t)},b=function(t){e.port2.postMessage(t)}}function f(){var e=h.documentElement;b=function(t){var a=h.createElement('script');a.onreadystatechange=function(){r(t),a.on
 readystatechange=null,e.removeChild(a),a=null},e.appendChild(a)}}function d(){b=function(e){setTimeout(r,0,e)}}if(!e.setImmediate){var m=1,u={},p=!1,h=e.document,g=Object.getPrototypeOf&&Object.getPrototypeOf(e),b;g=g&&g.setTimeout?g:e,'[object process]'==={}.toString.call(e.process)?c():o()?s():e.MessageChannel?l():h&&'onreadystatechange'in h.createElement('script')?f():d(),g.setImmediate=a,g.clearImmediate=i}})('undefined'==typeof self?'undefined'==typeof e?this:e:self)}).call(this,a(0),a(4))},function(e){function t(){throw new Error('setTimeout has not been defined')}function a(){throw new Error('clearTimeout has not been defined')}function n(e){if(f===setTimeout)return setTimeout(e,0);if((f===t||!f)&&setTimeout)return f=setTimeout,setTimeout(e,0);try{return f(e,0)}catch(t){try{return f.call(null,e,0)}catch(t){return f.call(this,e,0)}}}function i(e){if(d===clearTimeout)return clearTimeout(e);if((d===a||!d)&&clearTimeout)return d=clearTimeout,clearTimeout(e);try{return d(e)}catch(
 t){try{return d.call(null,e)}catch(t){return d.call(this,e)}}}function r(){u&&h&&(u=!1,h.length?m=h.concat(m):p=-1,m.length&&c())}function c(){if(!u){var e=n(r);u=!0;for(var t=m.length;t;){for(h=m,m=[];++p<t;)h&&h[p].run();p=-1,t=m.length}h=null,u=!1,i(e)}}function o(e,t){this.fun=e,this.array=t}function s(){}var l=e.exports={},f,d;(function(){try{f='function'==typeof setTimeout?setTimeout:t}catch(a){f=t}try{d='function'==typeof clearTimeout?clearTimeout:a}catch(t){d=a}})();var m=[],u=!1,p=-1,h;l.nextTick=function(e){var t=Array(arguments.length-1);if(1<arguments.length)for(var a=1;a<arguments.length;a++)t[a-1]=arguments[a];m.push(new o(e,t)),1!==m.length||u||n(c)},o.prototype.run=function(){this.fun.apply(null,this.array)},l.title='browser',l.browser=!0,l.env={},l.argv=[],l.version='',l.versions={},l.on=s,l.addListener=s,l.once=s,l.off=s,l.removeListener=s,l.removeAllListeners=s,l.emit=s,l.prependListener=s,l.prependOnceListener=s,l.listeners=function(){return[]},l.binding=function
 (){throw new Error('process.binding is not supported')},l.cwd=function(){return'/'},l.chdir=function(){throw new Error('process.chdir is not supported')},l.umask=function(){return 0}},function(e,t,a){'use strict';a.r(t);var i=a(1),n={prefix:'fas',iconName:'angle-double-left',icon:[448,512,[],'f100','M223.7 239l136-136c9.4-9.4 24.6-9.4 33.9 0l22.6 22.6c9.4 9.4 9.4 24.6 0 33.9L319.9 256l96.4 96.4c9.4 9.4 9.4 24.6 0 33.9L393.7 409c-9.4 9.4-24.6 9.4-33.9 0l-136-136c-9.5-9.4-9.5-24.6-.1-34zm-192 34l136 136c9.4 9.4 24.6 9.4 33.9 0l22.6-22.6c9.4-9.4 9.4-24.6 0-33.9L127.9 256l96.4-96.4c9.4-9.4 9.4-24.6 0-33.9L201.7 103c-9.4-9.4-24.6-9.4-33.9 0l-136 136c-9.5 9.4-9.5 24.6-.1 34z']},r={prefix:'fas',iconName:'angle-double-right',icon:[448,512,[],'f101','M224.3 273l-136 136c-9.4 9.4-24.6 9.4-33.9 0l-22.6-22.6c-9.4-9.4-9.4-24.6 0-33.9l96.4-96.4-96.4-96.4c-9.4-9.4-9.4-24.6 0-33.9L54.3 103c9.4-9.4 24.6-9.4 33.9 0l136 136c9.5 9.4 9.5 24.6.1 34zm192-34l-136-136c-9.4-9.4-24.6-9.4-33.9 0l-22.6 22.6c-9.
 4 9.4-9.4 24.6 0 33.9l96.4 96.4-96.4 96.4c-9.4 9.4-9.4 24.6 0 33.9l22.6 22.6c9.4 9.4 24.6 9.4 33.9 0l136-136c9.4-9.2 9.4-24.4 0-33.8z']},c={prefix:'fas',iconName:'angle-left',icon:[256,512,[],'f104','M31.7 239l136-136c9.4-9.4 24.6-9.4 33.9 0l22.6 22.6c9.4 9.4 9.4 24.6 0 33.9L127.9 256l96.4 96.4c9.4 9.4 9.4 24.6 0 33.9L201.7 409c-9.4 9.4-24.6 9.4-33.9 0l-136-136c-9.5-9.4-9.5-24.6-.1-34z']},o={prefix:'fas',iconName:'angle-right',icon:[256,512,[],'f105','M224.3 273l-136 136c-9.4 9.4-24.6 9.4-33.9 0l-22.6-22.6c-9.4-9.4-9.4-24.6 0-33.9l96.4-96.4-96.4-96.4c-9.4-9.4-9.4-24.6 0-33.9L54.3 103c9.4-9.4 24.6-9.4 33.9 0l136 136c9.5 9.4 9.5 24.6.1 34z']},s={prefix:'fas',iconName:'bookmark',icon:[384,512,[],'f02e','M0 512V48C0 21.49 21.49 0 48 0h288c26.51 0 48 21.49 48 48v464L192 400 0 512z']},l={prefix:'fas',iconName:'cog',icon:[512,512,[],'f013','M487.4 315.7l-42.6-24.6c4.3-23.2 4.3-47 0-70.2l42.6-24.6c4.9-2.8 7.1-8.6 5.5-14-11.1-35.6-30-67.8-54.7-94.6-3.8-4.1-10-5.1-14.8-2.3L380.8 110c-17.9-15.
 4-38.5-27.3-60.8-35.1V25.8c0-5.6-3.9-10.5-9.4-11.7-36.7-8.2-74.3-7.8-109.2 0-5.5 1.2-9.4 6.1-9.4 11.7V75c-22.2 7.9-42.8 19.8-60.8 35.1L88.7 85.5c-4.9-2.8-11-1.9-14.8 2.3-24.7 26.7-43.6 58.9-54.7 94.6-1.7 5.4.6 11.2 5.5 14L67.3 221c-4.3 23.2-4.3 47 0 70.2l-42.6 24.6c-4.9 2.8-7.1 8.6-5.5 14 11.1 35.6 30 67.8 54.7 94.6 3.8 4.1 10 5.1 14.8 2.3l42.6-24.6c17.9 15.4 38.5 27.3 60.8 35.1v49.2c0 5.6 3.9 10.5 9.4 11.7 36.7 8.2 74.3 7.8 109.2 0 5.5-1.2 9.4-6.1 9.4-11.7v-49.2c22.2-7.9 42.8-19.8 60.8-35.1l42.6 24.6c4.9 2.8 11 1.9 14.8-2.3 24.7-26.7 43.6-58.9 54.7-94.6 1.5-5.5-.7-11.3-5.6-14.1zM256 336c-44.1 0-80-35.9-80-80s35.9-80 80-80 80 35.9 80 80-35.9 80-80 80z']},f={prefix:'fas',iconName:'comment',icon:[512,512,[],'f075','M256 32C114.6 32 0 125.1 0 240c0 49.6 21.4 95 57 130.7C44.5 421.1 2.7 466 2.2 466.5c-2.2 2.3-2.8 5.7-1.5 8.7S4.8 480 8 480c66.3 0 116-31.8 140.6-51.4 32.7 12.3 69 19.4 107.4 19.4 141.4 0 256-93.1 256-208S397.4 32 256 32z']},d={prefix:'fas',iconName:'edit',icon:[576,512,[],'
 f044','M402.6 83.2l90.2 90.2c3.8 3.8 3.8 10 0 13.8L274.4 405.6l-92.8 10.3c-12.4 1.4-22.9-9.1-21.5-21.5l10.3-92.8L388.8 83.2c3.8-3.8 10-3.8 13.8 0zm162-22.9l-48.8-48.8c-15.2-15.2-39.9-15.2-55.2 0l-35.4 35.4c-3.8 3.8-3.8 10 0 13.8l90.2 90.2c3.8 3.8 10 3.8 13.8 0l35.4-35.4c15.2-15.3 15.2-40 0-55.2zM384 346.2V448H64V128h229.8c3.2 0 6.2-1.3 8.5-3.5l40-40c7.6-7.6 2.2-20.5-8.5-20.5H48C21.5 64 0 85.5 0 112v352c0 26.5 21.5 48 48 48h352c26.5 0 48-21.5 48-48V306.2c0-10.7-12.9-16-20.5-8.5l-40 40c-2.2 2.3-3.5 5.3-3.5 8.5z']},m={prefix:'fas',iconName:'envelope-open-text',icon:[512,512,[],'f658','M176 216h160c8.84 0 16-7.16 16-16v-16c0-8.84-7.16-16-16-16H176c-8.84 0-16 7.16-16 16v16c0 8.84 7.16 16 16 16zm-16 80c0 8.84 7.16 16 16 16h160c8.84 0 16-7.16 16-16v-16c0-8.84-7.16-16-16-16H176c-8.84 0-16 7.16-16 16v16zm96 121.13c-16.42 0-32.84-5.06-46.86-15.19L0 250.86V464c0 26.51 21.49 48 48 48h416c26.51 0 48-21.49 48-48V250.86L302.86 401.94c-14.02 10.12-30.44 15.19-46.86 15.19zm237.61-254.18c-8.85-6.94-1
 7.24-13.47-29.61-22.81V96c0-26.51-21.49-48-48-48h-77.55c-3.04-2.2-5.87-4.26-9.04-6.56C312.6 29.17 279.2-.35 256 0c-23.2-.35-56.59 29.17-73.41 41.44-3.17 2.3-6 4.36-9.04 6.56H96c-26.51 0-48 21.49-48 48v44.14c-12.37 9.33-20.76 15.87-29.61 22.81A47.995 47.995 0 0 0 0 200.72v10.65l96 69.35V96h320v184.72l96-69.35v-10.65c0-14.74-6.78-28.67-18.39-37.77z']},u={prefix:'fas',iconName:'forward',icon:[512,512,[],'f04e','M500.5 231.4l-192-160C287.9 54.3 256 68.6 256 96v320c0 27.4 31.9 41.8 52.5 24.6l192-160c15.3-12.8 15.3-36.4 0-49.2zm-256 0l-192-160C31.9 54.3 0 68.6 0 96v320c0 27.4 31.9 41.8 52.5 24.6l192-160c15.3-12.8 15.3-36.4 0-49.2z']},p={prefix:'fas',iconName:'key',icon:[512,512,[],'f084','M512 176.001C512 273.203 433.202 352 336 352c-11.22 0-22.19-1.062-32.827-3.069l-24.012 27.014A23.999 23.999 0 0 1 261.223 384H224v40c0 13.255-10.745 24-24 24h-40v40c0 13.255-10.745 24-24 24H24c-13.255 0-24-10.745-24-24v-78.059c0-6.365 2.529-12.47 7.029-16.971l161.802-161.802C163.108 213.814 160 195.271 1
 60 176 160 78.798 238.797.001 335.999 0 433.488-.001 512 78.511 512 176.001zM336 128c0 26.51 21.49 48 48 48s48-21.49 48-48-21.49-48-48-48-48 21.49-48 48z']},h={prefix:'fas',iconName:'link',icon:[512,512,[],'f0c1','M326.612 185.391c59.747 59.809 58.927 155.698.36 214.59-.11.12-.24.25-.36.37l-67.2 67.2c-59.27 59.27-155.699 59.262-214.96 0-59.27-59.26-59.27-155.7 0-214.96l37.106-37.106c9.84-9.84 26.786-3.3 27.294 10.606.648 17.722 3.826 35.527 9.69 52.721 1.986 5.822.567 12.262-3.783 16.612l-13.087 13.087c-28.026 28.026-28.905 73.66-1.155 101.96 28.024 28.579 74.086 28.749 102.325.51l67.2-67.19c28.191-28.191 28.073-73.757 0-101.83-3.701-3.694-7.429-6.564-10.341-8.569a16.037 16.037 0 0 1-6.947-12.606c-.396-10.567 3.348-21.456 11.698-29.806l21.054-21.055c5.521-5.521 14.182-6.199 20.584-1.731a152.482 152.482 0 0 1 20.522 17.197zM467.547 44.449c-59.261-59.262-155.69-59.27-214.96 0l-67.2 67.2c-.12.12-.25.25-.36.37-58.566 58.892-59.387 154.781.36 214.59a152.454 152.454 0 0 0 20.521 17.196c6.
 402 4.468 15.064 3.789 20.584-1.731l21.054-21.055c8.35-8.35 12.094-19.239 11.698-29.806a16.037 16.037 0 0 0-6.947-12.606c-2.912-2.005-6.64-4.875-10.341-8.569-28.073-28.073-28.191-73.639 0-101.83l67.2-67.19c28.239-28.239 74.3-28.069 102.325.51 27.75 28.3 26.872 73.934-1.155 101.96l-13.087 13.087c-4.35 4.35-5.769 10.79-3.783 16.612 5.864 17.194 9.042 34.999 9.69 52.721.509 13.906 17.454 20.446 27.294 10.606l37.106-37.106c59.271-59.259 59.271-155.699.001-214.959z']},g={prefix:'fas',iconName:'list',icon:[512,512,[],'f03a','M80 368H16a16 16 0 0 0-16 16v64a16 16 0 0 0 16 16h64a16 16 0 0 0 16-16v-64a16 16 0 0 0-16-16zm0-320H16A16 16 0 0 0 0 64v64a16 16 0 0 0 16 16h64a16 16 0 0 0 16-16V64a16 16 0 0 0-16-16zm0 160H16a16 16 0 0 0-16 16v64a16 16 0 0 0 16 16h64a16 16 0 0 0 16-16v-64a16 16 0 0 0-16-16zm416 176H176a16 16 0 0 0-16 16v32a16 16 0 0 0 16 16h320a16 16 0 0 0 16-16v-32a16 16 0 0 0-16-16zm0-320H176a16 16 0 0 0-16 16v32a16 16 0 0 0 16 16h320a16 16 0 0 0 16-16V80a16 16 0 0 0-16-16zm0 160H1
 76a16 16 0 0 0-16 16v32a16 16 0 0 0 16 16h320a16 16 0 0 0 16-16v-32a16 16 0 0 0-16-16z']},b={prefix:'fas',iconName:'paperclip',icon:[448,512,[],'f0c6','M43.246 466.142c-58.43-60.289-57.341-157.511 1.386-217.581L254.392 34c44.316-45.332 116.351-45.336 160.671 0 43.89 44.894 43.943 117.329 0 162.276L232.214 383.128c-29.855 30.537-78.633 30.111-107.982-.998-28.275-29.97-27.368-77.473 1.452-106.953l143.743-146.835c6.182-6.314 16.312-6.422 22.626-.241l22.861 22.379c6.315 6.182 6.422 16.312.241 22.626L171.427 319.927c-4.932 5.045-5.236 13.428-.648 18.292 4.372 4.634 11.245 4.711 15.688.165l182.849-186.851c19.613-20.062 19.613-52.725-.011-72.798-19.189-19.627-49.957-19.637-69.154 0L90.39 293.295c-34.763 35.56-35.299 93.12-1.191 128.313 34.01 35.093 88.985 35.137 123.058.286l172.06-175.999c6.177-6.319 16.307-6.433 22.626-.256l22.877 22.364c6.319 6.177 6.434 16.307.256 22.626l-172.06 175.998c-59.576 60.938-155.943 60.216-214.77-.485z']},y={prefix:'fas',iconName:'pencil-alt',icon:[512,512,[],
 'f303','M497.9 142.1l-46.1 46.1c-4.7 4.7-12.3 4.7-17 0l-111-111c-4.7-4.7-4.7-12.3 0-17l46.1-46.1c18.7-18.7 49.1-18.7 67.9 0l60.1 60.1c18.8 18.7 18.8 49.1 0 67.9zM284.2 99.8L21.6 362.4.4 483.9c-2.9 16.4 11.4 30.6 27.8 27.8l121.5-21.3 262.6-262.6c4.7-4.7 4.7-12.3 0-17l-111-111c-4.8-4.7-12.4-4.7-17.1 0zM124.1 339.9c-5.5-5.5-5.5-14.3 0-19.8l154-154c5.5-5.5 14.3-5.5 19.8 0s5.5 14.3 0 19.8l-154 154c-5.5 5.5-14.3 5.5-19.8 0zM88 424h48v36.3l-64.5 11.3-31.1-31.1L51.7 376H88v48z']},v={prefix:'fas',iconName:'plus',icon:[448,512,[],'f067','M416 208H272V64c0-17.67-14.33-32-32-32h-32c-17.67 0-32 14.33-32 32v144H32c-17.67 0-32 14.33-32 32v32c0 17.67 14.33 32 32 32h144v144c0 17.67 14.33 32 32 32h32c17.67 0 32-14.33 32-32V304h144c17.67 0 32-14.33 32-32v-32c0-17.67-14.33-32-32-32z']},x={prefix:'fas',iconName:'project-diagram',icon:[640,512,[],'f542','M384 320H256c-17.67 0-32 14.33-32 32v128c0 17.67 14.33 32 32 32h128c17.67 0 32-14.33 32-32V352c0-17.67-14.33-32-32-32zM192 32c0-17.67-14.33-32-32-32H32C
 14.33 0 0 14.33 0 32v128c0 17.67 14.33 32 32 32h95.72l73.16 128.04C211.98 300.98 232.4 288 256 288h.28L192 175.51V128h224V64H192V32zM608 0H480c-17.67 0-32 14.33-32 32v128c0 17.67 14.33 32 32 32h128c17.67 0 32-14.33 32-32V32c0-17.67-14.33-32-32-32z']},w={prefix:'fas',iconName:'reply',icon:[512,512,[],'f3e5','M8.309 189.836L184.313 37.851C199.719 24.546 224 35.347 224 56.015v80.053c160.629 1.839 288 34.032 288 186.258 0 61.441-39.581 122.309-83.333 154.132-13.653 9.931-33.111-2.533-28.077-18.631 45.344-145.012-21.507-183.51-176.59-185.742V360c0 20.7-24.3 31.453-39.687 18.164l-176.004-152c-11.071-9.562-11.086-26.753 0-36.328z']},k={prefix:'fas',iconName:'times',icon:[352,512,[],'f00d','M242.72 256l100.07-100.07c12.28-12.28 12.28-32.19 0-44.48l-22.24-22.24c-12.28-12.28-32.19-12.28-44.48 0L176 189.28 75.93 89.21c-12.28-12.28-32.19-12.28-44.48 0L9.21 111.45c-12.28 12.28-12.28 32.19 0 44.48L109.28 256 9.21 356.07c-12.28 12.28-12.28 32.19 0 44.48l22.24 22.24c12.28 12.28 32.2 12.28 44.48 0L1
 76 322.72l100.07 100.07c12.28 12.28 32.2 12.28 44.48 0l22.24-22.24c12.28-12.28 12.28-32.19 0-44.48L242.72 256z']},z={prefix:'far',iconName:'arrow-alt-circle-up',icon:[512,512,[],'f35b','M256 504c137 0 248-111 248-248S393 8 256 8 8 119 8 256s111 248 248 248zm0-448c110.5 0 200 89.5 200 200s-89.5 200-200 200S56 366.5 56 256 145.5 56 256 56zm20 328h-40c-6.6 0-12-5.4-12-12V256h-67c-10.7 0-16-12.9-8.5-20.5l99-99c4.7-4.7 12.3-4.7 17 0l99 99c7.6 7.6 2.2 20.5-8.5 20.5h-67v116c0 6.6-5.4 12-12 12z']},M={prefix:'far',iconName:'bookmark',icon:[384,512,[],'f02e','M336 0H48C21.49 0 0 21.49 0 48v464l192-112 192 112V48c0-26.51-21.49-48-48-48zm0 428.43l-144-84-144 84V54a6 6 0 0 1 6-6h276c3.314 0 6 2.683 6 5.996V428.43z']},N={prefix:'far',iconName:'calendar-alt',icon:[448,512,[],'f073','M148 288h-40c-6.6 0-12-5.4-12-12v-40c0-6.6 5.4-12 12-12h40c6.6 0 12 5.4 12 12v40c0 6.6-5.4 12-12 12zm108-12v-40c0-6.6-5.4-12-12-12h-40c-6.6 0-12 5.4-12 12v40c0 6.6 5.4 12 12 12h40c6.6 0 12-5.4 12-12zm96 0v-40c0-6.6-5.4
 -12-12-12h-40c-6.6 0-12 5.4-12 12v40c0 6.6 5.4 12 12 12h40c6.6 0 12-5.4 12-12zm-96 96v-40c0-6.6-5.4-12-12-12h-40c-6.6 0-12 5.4-12 12v40c0 6.6 5.4 12 12 12h40c6.6 0 12-5.4 12-12zm-96 0v-40c0-6.6-5.4-12-12-12h-40c-6.6 0-12 5.4-12 12v40c0 6.6 5.4 12 12 12h40c6.6 0 12-5.4 12-12zm192 0v-40c0-6.6-5.4-12-12-12h-40c-6.6 0-12 5.4-12 12v40c0 6.6 5.4 12 12 12h40c6.6 0 12-5.4 12-12zm96-260v352c0 26.5-21.5 48-48 48H48c-26.5 0-48-21.5-48-48V112c0-26.5 21.5-48 48-48h48V12c0-6.6 5.4-12 12-12h40c6.6 0 12 5.4 12 12v52h128V12c0-6.6 5.4-12 12-12h40c6.6 0 12 5.4 12 12v52h48c26.5 0 48 21.5 48 48zm-48 346V160H48v298c0 3.3 2.7 6 6 6h340c3.3 0 6-2.7 6-6z']},C={prefix:'far',iconName:'check-circle',icon:[512,512,[],'f058','M256 8C119.033 8 8 119.033 8 256s111.033 248 248 248 248-111.033 248-248S392.967 8 256 8zm0 48c110.532 0 200 89.451 200 200 0 110.532-89.451 200-200 200-110.532 0-200-89.451-200-200 0-110.532 89.451-200 200-200m140.204 130.267l-22.536-22.718c-4.667-4.705-12.265-4.736-16.97-.068L215.346 303.
 697l-59.792-60.277c-4.667-4.705-12.265-4.736-16.97-.069l-22.719 22.536c-4.705 4.667-4.736 12.265-.068 16.971l90.781 91.516c4.667 4.705 12.265 4.736 16.97.068l172.589-171.204c4.704-4.668 4.734-12.266.067-16.971z']},A={prefix:'far',iconName:'clock',icon:[512,512,[],'f017','M256 8C119 8 8 119 8 256s111 248 248 248 248-111 248-248S393 8 256 8zm0 448c-110.5 0-200-89.5-200-200S145.5 56 256 56s200 89.5 200 200-89.5 200-200 200zm61.8-104.4l-84.9-61.7c-3.1-2.3-4.9-5.9-4.9-9.7V116c0-6.6 5.4-12 12-12h32c6.6 0 12 5.4 12 12v141.7l66.8 48.6c5.4 3.9 6.5 11.4 2.6 16.8L334.6 349c-3.9 5.3-11.4 6.5-16.8 2.6z']},L={prefix:'far',iconName:'edit',icon:[576,512,[],'f044','M402.3 344.9l32-32c5-5 13.7-1.5 13.7 5.7V464c0 26.5-21.5 48-48 48H48c-26.5 0-48-21.5-48-48V112c0-26.5 21.5-48 48-48h273.5c7.1 0 10.7 8.6 5.7 13.7l-32 32c-1.5 1.5-3.5 2.3-5.7 2.3H48v352h352V350.5c0-2.1.8-4.1 2.3-5.6zm156.6-201.8L296.3 405.7l-90.4 10c-26.2 2.9-48.5-19.2-45.6-45.6l10-90.4L432.9 17.1c22.9-22.9 59.9-22.9 82.7 0l43.2 43.2c22.9 
 22.9 22.9 60 .1 82.8zM460.1 174L402 115.9 216.2 301.8l-7.3 65.3 65.3-7.3L460.1 174zm64.8-79.7l-43.2-43.2c-4.1-4.1-10.8-4.1-14.8 0L436 82l58.1 58.1 30.9-30.9c4-4.2 4-10.8-.1-14.9z']},I={prefix:'far',iconName:'file',icon:[384,512,[],'f15b','M369.9 97.9L286 14C277 5 264.8-.1 252.1-.1H48C21.5 0 0 21.5 0 48v416c0 26.5 21.5 48 48 48h288c26.5 0 48-21.5 48-48V131.9c0-12.7-5.1-25-14.1-34zM332.1 128H256V51.9l76.1 76.1zM48 464V48h160v104c0 13.3 10.7 24 24 24h104v288H48z']},E={prefix:'far',iconName:'pause-circle',icon:[512,512,[],'f28b','M256 8C119 8 8 119 8 256s111 248 248 248 248-111 248-248S393 8 256 8zm0 448c-110.5 0-200-89.5-200-200S145.5 56 256 56s200 89.5 200 200-89.5 200-200 200zm96-280v160c0 8.8-7.2 16-16 16h-48c-8.8 0-16-7.2-16-16V176c0-8.8 7.2-16 16-16h48c8.8 0 16 7.2 16 16zm-112 0v160c0 8.8-7.2 16-16 16h-48c-8.8 0-16-7.2-16-16V176c0-8.8 7.2-16 16-16h48c8.8 0 16 7.2 16 16z']},S={prefix:'far',iconName:'play-circle',icon:[512,512,[],'f144','M371.7 238l-176-107c-15.8-8.8-35.7 2.5-35.7 2
 1v208c0 18.4 19.8 29.8 35.7 21l176-101c16.4-9.1 16.4-32.8 0-42zM504 256C504 119 393 8 256 8S8 119 8 256s111 248 248 248 248-111 248-248zm-448 0c0-110.5 89.5-200 200-200s200 89.5 200 200-89.5 200-200 200S56 366.5 56 256z']},_={prefix:'far',iconName:'question-circle',icon:[512,512,[],'f059','M256 8C119.043 8 8 119.083 8 256c0 136.997 111.043 248 248 248s248-111.003 248-248C504 119.083 392.957 8 256 8zm0 448c-110.532 0-200-89.431-200-200 0-110.495 89.472-200 200-200 110.491 0 200 89.471 200 200 0 110.53-89.431 200-200 200zm107.244-255.2c0 67.052-72.421 68.084-72.421 92.863V300c0 6.627-5.373 12-12 12h-45.647c-6.627 0-12-5.373-12-12v-8.659c0-35.745 27.1-50.034 47.579-61.516 17.561-9.845 28.324-16.541 28.324-29.579 0-17.246-21.999-28.693-39.784-28.693-23.189 0-33.894 10.977-48.942 29.969-4.057 5.12-11.46 6.071-16.666 2.124l-27.824-21.098c-5.107-3.872-6.251-11.066-2.644-16.363C184.846 131.491 214.94 112 261.794 112c49.071 0 101.45 38.304 101.45 88.8zM298 368c0 23.159-18.841 42-42 42s-42-18
 .841-42-42 18.841-42 42-42 42 18.841 42 42z']},P={prefix:'far',iconName:'times-circle',icon:[512,512,[],'f057','M256 8C119 8 8 119 8 256s111 248 248 248 248-111 248-248S393 8 256 8zm0 448c-110.5 0-200-89.5-200-200S145.5 56 256 56s200 89.5 200 200-89.5 200-200 200zm101.8-262.2L295.6 256l62.2 62.2c4.7 4.7 4.7 12.3 0 17l-22.6 22.6c-4.7 4.7-12.3 4.7-17 0L256 295.6l-62.2 62.2c-4.7 4.7-12.3 4.7-17 0l-22.6-22.6c-4.7-4.7-4.7-12.3 0-17l62.2-62.2-62.2-62.2c-4.7-4.7-4.7-12.3 0-17l22.6-22.6c4.7-4.7 12.3-4.7 17 0l62.2 62.2 62.2-62.2c4.7-4.7 12.3-4.7 17 0l22.6 22.6c4.7 4.7 4.7 12.3 0 17z']};i.b.add(l,d,s,x,m,w,f,u,h,v,p,y,k,b,g,c,n,o,r,L,M,A,N,S,E,z,P,_,I,C),i.a.watch()}]);
\ No newline at end of file
+(()=>{'use strict';function e(t){return e='function'==typeof Symbol&&'symbol'==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&'function'==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?'symbol':typeof e},e(t)}function t(e,t){if(!(e instanceof t))throw new TypeError('Cannot call a class as a function')}function a(e,t){for(var a=0,i;a<t.length;a++)i=t[a],i.enumerable=i.enumerable||!1,i.configurable=!0,'value'in i&&(i.writable=!0),Object.defineProperty(e,i.key,i)}function i(e,t,i){return t&&a(e.prototype,t),i&&a(e,i),e}function n(e,t,a){return t in e?Object.defineProperty(e,t,{value:a,enumerable:!0,configurable:!0,writable:!0}):e[t]=a,e}function r(e){for(var t=1;t<arguments.length;t++){var a=null==arguments[t]?{}:arguments[t],i=Object.keys(a);'function'==typeof Object.getOwnPropertySymbols&&(i=i.concat(Object.getOwnPropertySymbols(a).filter(function(e){return Object.getOwnPropertyDescriptor(a,e).enumerable}))),i.forEach(function(t){n(e,t,a[t])})}
 return e}function c(e,t){return l(e)||m(e,t)||h()}function o(e){return s(e)||f(e)||u()}function s(e){if(Array.isArray(e)){for(var t=0,a=Array(e.length);t<e.length;t++)a[t]=e[t];return a}}function l(e){if(Array.isArray(e))return e}function f(e){if(Symbol.iterator in Object(e)||'[object Arguments]'===Object.prototype.toString.call(e))return Array.from(e)}function m(e,t){var a=[],i=!0,n=!1,r=void 0;try{for(var c=e[Symbol.iterator](),o;!(i=(o=c.next()).done)&&(a.push(o.value),!(t&&a.length===t));i=!0);}catch(e){n=!0,r=e}finally{try{i||null==c['return']||c['return']()}finally{if(n)throw r}}return a}function u(){throw new TypeError('Invalid attempt to spread non-iterable instance')}function h(){throw new TypeError('Invalid attempt to destructure non-iterable instance')}function g(e){var t=Qe.querySelector('script['+e+']');if(t)return t.getAttribute(e)}function b(e){return!(''!==e)||'false'!==e&&(!('true'!==e)||e)}function y(e){tt&&(Pt?setTimeout(e,0):St.push(e))}function v(){for(var e=0;e
 <Dt.length;e++)Dt[e][0](Dt[e][1]);Dt=[],jt=!1}function x(e,t){Dt.push([e,t]),jt||(jt=!0,Ot(v,0))}function k(e,t){function a(e){M(t,e)}function i(e){A(t,e)}try{e(a,i)}catch(t){i(t)}}function z(e){var t=e.owner,a=t._state,i=t._data,n=e[a],r=e.then;if('function'==typeof n){a=Vt;try{i=n(i)}catch(t){A(r,t)}}N(r,i)||(a===Vt&&M(r,i),a===Ht&&A(r,i))}function N(t,a){var i;try{if(t===a)throw new TypeError('A promises callback cannot return that same promise.');if(a&&('function'==typeof a||'object'===e(a))){var n=a.then;if('function'==typeof n)return n.call(a,function(e){i||(i=!0,a===e?C(t,e):M(t,e))},function(e){i||(i=!0,A(t,e))}),!0}}catch(a){return i||A(t,a),!0}return!1}function M(e,t){e!==t&&N(e,t)||C(e,t)}function C(e,t){e._state===It&&(e._state=_t,e._data=t,x(E,e))}function A(e,t){e._state===It&&(e._state=_t,e._data=t,x(S,e))}function L(e){e._then=e._then.forEach(z)}function E(e){e._state=Vt,L(e)}function S(e){e._state=Ht,L(e),!e._handled&&Tt&&Fe.g.process.emit('unhandledRejection',e._da
 ta,e)}function I(e){Fe.g.process.emit('rejectionHandled',e)}function _(e){if('function'!=typeof e)throw new TypeError('Promise resolver '+e+' is not a function');if(!1==this instanceof _)throw new TypeError('Failed to construct \'Promise\': Please use the \'new\' operator, this object constructor cannot be called as a function.');this._then=[],k(e,this)}function V(e){return~Mt.indexOf(e)}function H(e){if(e&&tt){var t=Qe.createElement('style');t.setAttribute('type','text/css'),t.innerHTML=e;for(var a=Qe.head.childNodes,n=null,r=a.length-1;-1<r;r--){var i=a[r],c=(i.tagName||'').toUpperCase();-1<['STYLE','LINK'].indexOf(c)&&(n=i)}return Qe.head.insertBefore(t,n),e}}function R(){for(var e=12,t='';0<e--;)t+=Xt[0|62*Math.random()];return t}function T(e){for(var t=[],a=(e||[]).length>>>0;a--;)t[a]=e[a];return t}function O(e){return e.classList?T(e.classList):(e.getAttribute('class')||'').split(' ').filter(function(e){return e})}function D(e,t){var a=t.split('-'),i=a[0],n=a.slice(1).join('-
 ');return i!==e||''===n||V(n)?null:n}function j(e){return''.concat(e).replace(/&/g,'&').replace(/"/g,'"').replace(/'/g,''').replace(/</g,'<').replace(/>/g,'>')}function F(e){return Object.keys(e||{}).reduce(function(t,a){return t+''.concat(a,'="').concat(j(e[a]),'" ')},'').trim()}function Y(e){return Object.keys(e||{}).reduce(function(t,a){return t+''.concat(a,': ').concat(e[a],';')},'')}function X(e){return e.size!==d.size||e.x!==d.x||e.y!==d.y||e.rotate!==d.rotate||e.flipX||e.flipY}function B(e){var t=e.transform,a=e.containerWidth,i=e.iconWidth,n={transform:'translate('.concat(a/2,' 256)')},r='translate('.concat(32*t.x,', ').concat(32*t.y,') '),c='scale('.concat(t.size/16*(t.flipX?-1:1),', ').concat(t.size/16*(t.flipY?-1:1),') '),o='rotate('.concat(t.rotate,' 0 0)'),s={transform:''.concat(r,' ').concat(c,' ').concat(o)},l={transform:'translate('.concat(-1*(i/2),' -256)')};return{outer:n,inner:s,path:l}}function U(e){var t=e.transform,a=e.width,i=void 0===a?nt:a
 ,n=e.height,r=void 0===n?nt:n,c=e.startCentered,o=void 0!==c&&c,s='';return s+=o&&at?'translate('.concat(t.x/Yt-i/2,'em, ').concat(t.y/Yt-r/2,'em) '):o?'translate(calc(-50% + '.concat(t.x/Yt,'em), calc(-50% + ').concat(t.y/Yt,'em)) '):'translate('.concat(t.x/Yt,'em, ').concat(t.y/Yt,'em) '),s+='scale('.concat(t.size/Yt*(t.flipX?-1:1),', ').concat(t.size/Yt*(t.flipY?-1:1),') '),s+='rotate('.concat(t.rotate,'deg) '),s}function W(e){var t=!(1<arguments.length&&void 0!==arguments[1])||arguments[1];return e.attributes&&(e.attributes.fill||t)&&(e.attributes.fill='black'),e}function q(e){return'g'===e.tag?e.children:[e]}function G(e){var t=e.children,a=e.attributes,i=e.main,n=e.mask,c=e.transform,o=i.width,s=i.icon,l=n.width,f=n.icon,m=B({transform:c,containerWidth:l,iconWidth:o}),d={tag:'rect',attributes:r({},Bt,{fill:'white'})},u=s.children?{children:s.children.map(W)}:{},p={tag:'g',attributes:r({},m.inner),children:[W(r({tag:s.tag,attributes:r({},s.attributes,m.path)},u))]},h={tag:'g',a
 ttributes:r({},m.outer),children:[p]},g='mask-'.concat(R()),b='clip-'.concat(R()),y={tag:'mask',attributes:r({},Bt,{id:g,maskUnits:'userSpaceOnUse',maskContentUnits:'userSpaceOnUse'}),children:[d,h]},v={tag:'defs',children:[{tag:'clipPath',attributes:{id:b},children:q(f)},y]};return t.push(v,{tag:'rect',attributes:r({fill:'currentColor',"clip-path":'url(#'.concat(b,')'),mask:'url(#'.concat(g,')')},Bt)}),{children:t,attributes:a}}function K(e){var t=e.children,a=e.attributes,i=e.main,n=e.transform,c=e.styles,o=Y(c);if(0<o.length&&(a.style=o),X(n)){var s=B({transform:n,containerWidth:i.width,iconWidth:i.width});t.push({tag:'g',attributes:r({},s.outer),children:[{tag:'g',attributes:r({},s.inner),children:[{tag:i.icon.tag,children:i.icon.children,attributes:r({},i.icon.attributes,s.path)}]}]})}else t.push(i.icon);return{children:t,attributes:a}}function J(e){var t=e.children,a=e.main,i=e.mask,n=e.attributes,c=e.styles,o=e.transform;if(X(o)&&a.found&&!i.found){var s=a.width,l=a.height,f=
 {x:s/l/2,y:.5};n.style=Y(r({},c,{"transform-origin":''.concat(f.x+o.x/16,'em ').concat(f.y+o.y/16,'em')}))}return[{tag:'svg',attributes:n,children:t}]}function Q(e){var t=e.prefix,a=e.iconName,i=e.children,n=e.attributes,c=e.symbol,o=!0===c?''.concat(t,'-').concat(Lt.familyPrefix,'-').concat(a):c;return[{tag:'svg',attributes:{style:'display: none;'},children:[{tag:'symbol',attributes:r({},n,{id:o}),children:i}]}]}function Z(e){var t=e.icons,a=t.main,i=t.mask,n=e.prefix,c=e.iconName,o=e.transform,s=e.symbol,l=e.title,f=e.extra,m=e.watchable,d=i.found?i:a,u=d.width,p=d.height,h='fa-w-'.concat(Math.ceil(16*(u/p))),g=[Lt.replacementClass,c?''.concat(Lt.familyPrefix,'-').concat(c):'',h].filter(function(e){return-1===f.classes.indexOf(e)}).concat(f.classes).join(' '),b={children:[],attributes:r({},f.attributes,{"data-prefix":n,"data-icon":c,class:g,role:f.attributes.role||'img',xmlns:'http://www.w3.org/2000/svg',viewBox:'0 0 '.concat(u,' ').concat(p)})};void 0!==m&&m&&(b.attributes[ot]=''
 ),l&&b.children.push({tag:'title',attributes:{id:b.attributes['aria-labelledby']||'title-'.concat(R())},children:[l]});var y=r({},b,{prefix:n,iconName:c,main:a,mask:i,transform:o,symbol:s,styles:f.styles}),v=i.found&&a.found?G(y):K(y),x=v.children,w=v.attributes;return y.children=x,y.attributes=w,s?Q(y):J(y)}function $(e){var t=e.content,a=e.width,i=e.height,n=e.transform,c=e.title,o=e.extra,s=e.watchable,l=r({},o.attributes,c?{title:c}:{},{class:o.classes.join(' ')});void 0!==s&&s&&(l[ot]='');var f=r({},o.styles);X(n)&&(f.transform=U({transform:n,startCentered:!0,width:a,height:i}),f['-webkit-transform']=f.transform);var m=Y(f);0<m.length&&(l.style=m);var d=[];return d.push({tag:'span',attributes:l,children:[t]}),c&&d.push({tag:'span',attributes:{class:'sr-only'},children:[c]}),d}function ee(e){var t=e.content,a=e.title,i=e.extra,n=r({},i.attributes,a?{title:a}:{},{class:i.classes.join(' ')}),c=Y(i.styles);0<c.length&&(n.style=c);var o=[];return o.push({tag:'span',attributes:n,chil
 dren:[t]}),a&&o.push({tag:'span',attributes:{class:'sr-only'},children:[a]}),o}function te(e){for(var t='',a=0,i;a<e.length;a++)i=e.charCodeAt(a).toString(16),t+=('000'+i).slice(-4);return t}function ae(e,t){var a=2<arguments.length&&arguments[2]!==void 0?arguments[2]:{},i=a.skipHooks,n=Object.keys(t).reduce(function(e,a){var i=t[a],n=!!i.icon;return n?e[i.iconName]=i.icon:e[a]=i,e},{});'function'!=typeof w.hooks.addPack||void 0!==i&&i?w.styles[e]=r({},w.styles[e]||{},n):w.hooks.addPack(e,n),'fas'===e&&ae('fa',t)}function ie(e,t){return($t[e]||{})[t]}function ne(e,t){return(ea[e]||{})[t]}function re(e){return ta[e]||{prefix:null,iconName:null}}function ce(e){return e.reduce(function(e,t){var a=D(Lt.familyPrefix,t);if(ia[t])e.prefix=t;else if(Lt.autoFetchSvg&&-1<['fas','far','fal','fad','fab','fa'].indexOf(t))e.prefix=t;else if(a){var i='fa'===e.prefix?re(a):{};e.iconName=i.iconName||a,e.prefix=i.prefix||e.prefix}else t!==Lt.replacementClass&&0!==t.indexOf('fa-w-')&&e.rest.push(t);re
 turn e},na())}function oe(e,t,a){if(e&&e[t]&&e[t][a])return{prefix:t,iconName:a,icon:e[t][a]}}function se(e){var t=e.tag,a=e.attributes,i=void 0===a?{}:a,n=e.children,r=void 0===n?[]:n;return'string'==typeof e?j(e):'<'.concat(t,' ').concat(F(i),'>').concat(r.map(se).join(''),'</').concat(t,'>')}function le(e){var t=e.getAttribute?e.getAttribute(ot):null;return'string'==typeof t}function fe(){if(!0===Lt.autoReplaceSvg)return ca.replace;var e=ca[Lt.autoReplaceSvg];return e||ca.replace}function me(e){e()}function de(e,t){var a='function'==typeof t?t:ra;if(0===e.length)a();else{var i=me;Lt.mutateApproach===ut&&(i=Je.requestAnimationFrame||me),i(function(){var t=fe(),i=Gt.begin('mutate');e.map(t),i(),a()})}}function ue(){oa=!0}function pe(){oa=!1}function he(e){if(Ze&&Lt.observeMutations){var t=e.treeCallback,a=e.nodeCallback,i=e.pseudoElementsCallback,n=e.observeMutationsRoot,r=void 0===n?Qe:n;sa=new Ze(function(e){oa||T(e).forEach(function(e){if('childList'===e.type&&0<e.addedNodes.len
 gth&&!le(e.addedNodes[0])&&(Lt.searchPseudoElements&&i(e.target),t(e.target)),'attributes'===e.type&&e.target.parentNode&&Lt.searchPseudoElements&&i(e.target.parentNode),'attributes'===e.type&&le(e.target)&&~zt.indexOf(e.attributeName))if('class'===e.attributeName){var n=ce(O(e.target)),r=n.prefix,c=n.iconName;r&&e.target.setAttribute('data-prefix',r),c&&e.target.setAttribute('data-icon',c)}else a(e.target)})}),tt&&sa.observe(r,{childList:!0,attributes:!0,characterData:!0,subtree:!0})}}function ge(){sa&&sa.disconnect()}function be(e){var t=e.getAttribute('style'),a=[];return t&&(a=t.split(';').reduce(function(e,t){var a=t.split(':'),i=a[0],n=a.slice(1);return i&&0<n.length&&(e[i]=n.join(':').trim()),e},{})),a}function ye(e){var t=e.getAttribute('data-prefix'),a=e.getAttribute('data-icon'),i=void 0===e.innerText?'':e.innerText.trim(),n=ce(O(e));return t&&a&&(n.prefix=t,n.iconName=a),n.prefix&&1<i.length?n.iconName=ne(n.prefix,e.innerText):n.prefix&&1===i.length&&(n.iconName=ie(n.pref
 ix,te(e.innerText))),n}function ve(e){return la(e.getAttribute('data-fa-transform'))}function xe(e){var t=e.getAttribute('data-fa-symbol');return null!==t&&(!(''!==t)||t)}function we(e){var t=T(e.attributes).reduce(function(e,t){return'class'!==e.name&&'style'!==e.name&&(e[t.name]=t.value),e},{}),a=e.getAttribute('title');return Lt.autoA11y&&(a?t['aria-labelledby']=''.concat(Lt.replacementClass,'-title-').concat(R()):(t['aria-hidden']='true',t.focusable='false')),t}function ke(e){var t=e.getAttribute('data-fa-mask');return t?ce(t.split(' ').map(function(e){return e.trim()})):na()}function ze(){return{iconName:null,title:null,prefix:null,transform:d,symbol:!1,mask:null,extra:{classes:[],styles:{},attributes:{}}}}function Ne(e){var t=ye(e),a=t.iconName,i=t.prefix,n=t.rest,r=be(e),c=ve(e),o=xe(e),s=we(e),l=ke(e);return{iconName:a,title:e.getAttribute('title'),prefix:i,transform:c,symbol:o,mask:l,extra:{classes:n,styles:r,attributes:s}}}function Me(e){this.name='MissingIcon',this.messag
 e=e||'Icon unavailable',this.stack=new Error().stack}function Ce(e){var t=e[0],a=e[1],i=e.slice(4),n=c(i,1),r=n[0],o=null;return o=Array.isArray(r)?{tag:'g',attributes:{class:''.concat(Lt.familyPrefix,'-').concat(Nt.GROUP)},children:[{tag:'path',attributes:{class:''.concat(Lt.familyPrefix,'-').concat(Nt.SECONDARY),fill:'currentColor',d:r[0]}},{tag:'path',attributes:{class:''.concat(Lt.familyPrefix,'-').concat(Nt.PRIMARY),fill:'currentColor',d:r[1]}}]}:{tag:'path',attributes:{fill:'currentColor',d:r}},{found:!0,width:t,height:a,icon:o}}function Ae(t,a){return new Ft(function(i,n){if(t&&a&&ya[a]&&ya[a][t]){var r=ya[a][t];return i(Ce(r))}'object'===e(Je.FontAwesomeKitConfig)&&'string'==typeof window.FontAwesomeKitConfig.token&&({}['fa-kit-token']=Je.FontAwesomeKitConfig.token),t&&a&&!Lt.showMissingIcons?n(new Me('Icon is missing for prefix '.concat(a,' with icon name ').concat(t))):i({found:!1,width:512,height:512,icon:ba})})}function Le(e,t){var a=t.iconName,i=t.title,n=t.prefix,r=t.t
 ransform,o=t.symbol,s=t.mask,l=t.extra;return new Ft(function(t){Ft.all([Ae(a,n),Ae(s.iconName,s.prefix)]).then(function(s){var f=c(s,2),m=f[0],d=f[1];t([e,Z({icons:{main:m,mask:d},prefix:n,iconName:a,transform:r,symbol:o,mask:d,title:i,extra:l,watchable:!0})])})})}function Ee(e,t){var a=t.title,i=t.transform,n=t.extra,r=null,c=null;if(at){var o=parseInt(getComputedStyle(e).fontSize,10),s=e.getBoundingClientRect();r=s.width/o,c=s.height/o}return Lt.autoA11y&&!a&&(n.attributes['aria-hidden']='true'),Ft.resolve([e,$({content:e.innerHTML,width:r,height:c,transform:i,title:a,extra:n,watchable:!0})])}function Se(e){var t=Ne(e);return~t.extra.classes.indexOf(yt)?Ee(e,t):Le(e,t)}function Pe(e){var t=1<arguments.length&&arguments[1]!==void 0?arguments[1]:null;if(tt){var a=Qe.documentElement.classList,i=function(e){return a.add(''.concat(dt,'-').concat(e))},n=function(e){return a.remove(''.concat(dt,'-').concat(e))},r=Lt.autoFetchSvg?Object.keys(gt):Object.keys(va),c=['.'.concat(yt,':not([')
 .concat(ot,'])')].concat(r.map(function(e){return'.'.concat(e,':not([').concat(ot,'])')})).join(', ');if(0!==c.length){var o=[];try{o=T(e.querySelectorAll(c))}catch(t){}if(0<o.length)i('pending'),n('complete');else return;var s=Gt.begin('onTree'),l=o.reduce(function(e,t){try{var a=Se(t);a&&e.push(a)}catch(t){!ht&&t instanceof Me&&console.error(t)}return e},[]);return new Ft(function(e,a){Ft.all(l).then(function(a){de(a,function(){i('active'),i('complete'),n('pending'),'function'==typeof t&&t(),s(),e()})}).catch(function(){s(),a()})})}}}function Ie(e){var t=1<arguments.length&&arguments[1]!==void 0?arguments[1]:null;Se(e).then(function(e){e&&de([e],t)})}function _e(e,t){var a=''.concat(lt).concat(t.replace(':','-'));return new Ft(function(i,n){if(null!==e.getAttribute(a))return i();var c=T(e.children),o=c.filter(function(e){return e.getAttribute(st)===t})[0],s=Je.getComputedStyle(e,t),l=s.getPropertyValue('font-family').match(vt),f=s.getPropertyValue('font-weight');if(o&&!l)return e.
 removeChild(o),i();if(l){var m=s.getPropertyValue('content'),d=~['Solid','Regular','Light','Duotone','Brands'].indexOf(l[1])?bt[l[1].toLowerCase()]:xt[f],u=te(3===m.length?m.substr(1,1):m),p=ie(d,u),h=p;if(p&&(!o||o.getAttribute(ft)!==d||o.getAttribute(mt)!==h)){e.setAttribute(a,h),o&&e.removeChild(o);var g=ze(),b=g.extra;b.attributes[st]=t,Ae(p,d).then(function(n){var c=Z(r({},g,{icons:{main:n,mask:na()},prefix:d,iconName:h,extra:b,watchable:!0})),o=Qe.createElement('svg');':before'===t?e.insertBefore(o,e.firstChild):e.appendChild(o),o.outerHTML=c.map(function(e){return se(e)}).join('\n'),e.removeAttribute(a),i()}).catch(n)}else i()}else i()})}function Ve(e){return Ft.all([_e(e,':before'),_e(e,':after')])}function He(e){return e.parentNode!==document.head&&!~pt.indexOf(e.tagName.toUpperCase())&&!e.getAttribute(st)&&(!e.parentNode||'svg'!==e.parentNode.tagName)}function Re(e){return tt?new Ft(function(t,a){var i=T(e.querySelectorAll('*')).filter(He).map(Ve),n=Gt.begin('searchPseudoE
 lements');ue(),Ft.all(i).then(function(){n(),pe(),t()}).catch(function(){n(),pe(),a()})}):void 0}function Te(){var e=Lt.familyPrefix,t=Lt.replacementClass,a=xa;if(e!==rt||t!==ct){var i=/\.fa\-/g,n=/\--fa\-/g,r=/\.svg-inline--fa/g;a=a.replace(i,'.'.concat(e,'-')).replace(n,'--'.concat(e,'-')).replace(r,'.'.concat(t))}return a}function Oe(){Lt.autoAddCss&&!za&&(H(Te()),za=!0)}function De(e,t){return Object.defineProperty(e,'abstract',{get:t}),Object.defineProperty(e,'html',{get:function(){return e.abstract.map(function(e){return se(e)})}}),Object.defineProperty(e,'node',{get:function(){if(tt){var t=Qe.createElement('div');return t.innerHTML=e.html,t.children}}}),e}function je(e){var t=e.prefix,a=void 0===t?'fa':t,i=e.iconName;return i?oe(ka.definitions,a,i)||oe(w.styles,a,i):void 0}var Fe={};(()=>{Fe.g=function(){if('object'==typeof globalThis)return globalThis;try{return this||new Function('return this')()}catch(t){if('object'==typeof window)return window}}()})();var Ye=function(){},
 Xe={},Be={},Ue=null,We={mark:Ye,measure:Ye};try{'undefined'!=typeof window&&(Xe=window),'undefined'!=typeof document&&(Be=document),'undefined'!=typeof MutationObserver&&(Ue=MutationObserver),'undefined'!=typeof performance&&(We=performance)}catch(t){}var qe=Xe.navigator||{},Ge=qe.userAgent,Ke=void 0===Ge?'':Ge,Je=Xe,Qe=Be,Ze=Ue,$e=We,et=!!Je.document,tt=!!Qe.documentElement&&!!Qe.head&&'function'==typeof Qe.addEventListener&&'function'==typeof Qe.createElement,at=~Ke.indexOf('MSIE')||~Ke.indexOf('Trident/'),it='___FONT_AWESOME___',nt=16,rt='fa',ct='svg-inline--fa',ot='data-fa-i2svg',st='data-fa-pseudo-element',lt='data-fa-pseudo-element-pending',ft='data-prefix',mt='data-icon',dt='fontawesome-i2svg',ut='async',pt=['HTML','HEAD','STYLE','SCRIPT'],ht=function(){try{return!0}catch(t){return!1}}(),gt={fas:'solid',far:'regular',fal:'light',fad:'duotone',fab:'brands',fa:'solid'},bt={solid:'fas',regular:'far',light:'fal',duotone:'fad',brands:'fab'},yt='fa-layers-text',vt=/Font Awesome 5 (
 Solid|Regular|Light|Duotone|Brands|Free|Pro)/,xt={900:'fas',400:'far',normal:'far',300:'fal'},wt=[1,2,3,4,5,6,7,8,9,10],kt=wt.concat([11,12,13,14,15,16,17,18,19,20]),zt=['class','data-prefix','data-icon','data-fa-transform','data-fa-mask'],Nt={GROUP:'group',SWAP_OPACITY:'swap-opacity',PRIMARY:'primary',SECONDARY:'secondary'},Mt=['xs','sm','lg','fw','ul','li','border','pull-left','pull-right','spin','pulse','rotate-90','rotate-180','rotate-270','flip-horizontal','flip-vertical','flip-both','stack','stack-1x','stack-2x','inverse','layers','layers-text','layers-counter',Nt.GROUP,Nt.SWAP_OPACITY,Nt.PRIMARY,Nt.SECONDARY].concat(wt.map(function(e){return''.concat(e,'x')})).concat(kt.map(function(e){return'w-'.concat(e)})),Ct=Je.FontAwesomeConfig||{};if(Qe&&'function'==typeof Qe.querySelector){[['data-family-prefix','familyPrefix'],['data-replacement-class','replacementClass'],['data-auto-replace-svg','autoReplaceSvg'],['data-auto-add-css','autoAddCss'],['data-auto-a11y','autoA11y'],['data
 -search-pseudo-elements','searchPseudoElements'],['data-observe-mutations','observeMutations'],['data-mutate-approach','mutateApproach'],['data-keep-original-source','keepOriginalSource'],['data-measure-performance','measurePerformance'],['data-show-missing-icons','showMissingIcons']].forEach(function(e){var t=c(e,2),a=t[0],i=t[1],n=b(g(a));n!==void 0&&null!==n&&(Ct[i]=n)})}var At=r({},{familyPrefix:rt,replacementClass:ct,autoReplaceSvg:!0,autoAddCss:!0,autoA11y:!0,searchPseudoElements:!1,observeMutations:!0,mutateApproach:'async',keepOriginalSource:!0,measurePerformance:!1,showMissingIcons:!0},Ct);At.autoReplaceSvg||(At.observeMutations=!1);var Lt=r({},At);Je.FontAwesomeConfig=Lt;var Et=Je||{};Et[it]||(Et[it]={}),Et[it].styles||(Et[it].styles={}),Et[it].hooks||(Et[it].hooks={}),Et[it].shims||(Et[it].shims=[]);var w=Et[it],St=[],Pt=!1;tt&&(Pt=(Qe.documentElement.doScroll?/^loaded|^c/:/^loaded|^i|^c/).test(Qe.readyState),!Pt&&Qe.addEventListener('DOMContentLoaded',function e(){Qe.rem
 oveEventListener('DOMContentLoaded',e),Pt=1,St.map(function(e){return e()})}));var It='pending',_t='settled',Vt='fulfilled',Ht='rejected',Rt=function(){},Tt='undefined'!=typeof Fe.g&&'undefined'!=typeof Fe.g.process&&'function'==typeof Fe.g.process.emit,Ot='undefined'==typeof setImmediate?setTimeout:setImmediate,Dt=[],jt;_.prototype={constructor:_,_state:It,_then:null,_data:void 0,_handled:!1,then:function(e,t){var a={owner:this,then:new this.constructor(Rt),fulfilled:e,rejected:t};return(t||e)&&!this._handled&&(this._handled=!0,this._state===Ht&&Tt&&x(I,this)),this._state===Vt||this._state===Ht?x(z,a):this._then.push(a),a.then},catch:function(e){return this.then(null,e)}},_.all=function(e){if(!Array.isArray(e))throw new TypeError('You must pass an array to Promise.all().');return new _(function(t,a){function n(e){return c++,function(a){r[e]=a,--c||t(r)}}for(var r=[],c=0,o=0,i;o<e.length;o++)i=e[o],i&&'function'==typeof i.then?i.then(n(o),a):r[o]=i;c||t(r)})},_.race=function(e){if(!
 Array.isArray(e))throw new TypeError('You must pass an array to Promise.race().');return new _(function(t,a){for(var n=0,i;n<e.length;n++)i=e[n],i&&'function'==typeof i.then?i.then(t,a):t(i)})},_.resolve=function(t){return t&&'object'===e(t)&&t.constructor===_?t:new _(function(e){e(t)})},_.reject=function(e){return new _(function(t,a){a(e)})};var Ft='function'==typeof Promise?Promise:_,Yt=nt,d={size:16,x:0,y:0,rotate:0,flipX:!1,flipY:!1},Xt='0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ',Bt={x:0,y:0,width:'100%',height:'100%'},Ut=function(){},Wt=Lt.measurePerformance&&$e&&$e.mark&&$e.measure?$e:{mark:Ut,measure:Ut},p='FA "5.11.2"',qt=function(e){Wt.mark(''.concat(p,' ').concat(e,' ends')),Wt.measure(''.concat(p,' ').concat(e),''.concat(p,' ').concat(e,' begins'),''.concat(p,' ').concat(e,' ends'))},Gt={begin:function(e){return Wt.mark(''.concat(p,' ').concat(e,' begins')),function(){return qt(e)}},end:qt},Kt=function(e,t){return function(i,a,n,r){return e.call(t,i,a
 ,n,r)}},Jt=function(e,t,a,n){var r=Object.keys(e),c=r.length,o=n===void 0?t:Kt(t,n),s,i,l;for(void 0===a?(s=1,l=e[r[0]]):(s=0,l=a);s<c;s++)i=r[s],l=o(l,e[i],i,e);return l},Qt=w.styles,Zt=w.shims,$t={},ea={},ta={},aa=function(){var e=function(e){return Jt(Qt,function(t,a,i){return t[i]=Jt(a,e,{}),t},{})};$t=e(function(e,t,a){return t[3]&&(e[t[3]]=a),e}),ea=e(function(e,t,a){var i=t[2];return e[a]=a,i.forEach(function(t){e[t]=a}),e});var t='far'in Qt;ta=Jt(Zt,function(e,a){var i=a[0],n=a[1],r=a[2];return'far'!==n||t||(n='fas'),e[i]={prefix:n,iconName:r},e},{})};aa();var ia=w.styles,na=function(){return{prefix:null,iconName:null,rest:[]}},ra=function(){},ca={replace:function(e){var t=e[0],a=e[1],i=a.map(function(e){return se(e)}).join('\n');if(t.parentNode&&t.outerHTML)t.outerHTML=i+(Lt.keepOriginalSource&&'svg'!==t.tagName.toLowerCase()?'<!-- '.concat(t.outerHTML,' -->'):'');else if(t.parentNode){var n=document.createElement('span');t.parentNode.replaceChild(n,t),n.outerHTML=i}},nest:
 function(e){var t=e[0],a=e[1];if(~O(t).indexOf(Lt.replacementClass))return ca.replace(e);var i=new RegExp(''.concat(Lt.familyPrefix,'-.*'));delete a[0].attributes.style,delete a[0].attributes.id;var n=a[0].attributes.class.split(' ').reduce(function(e,t){return t===Lt.replacementClass||t.match(i)?e.toSvg.push(t):e.toNode.push(t),e},{toNode:[],toSvg:[]});a[0].attributes.class=n.toSvg.join(' ');var r=a.map(function(e){return se(e)}).join('\n');t.setAttribute('class',n.toNode.join(' ')),t.setAttribute(ot,''),t.innerHTML=r}},oa=!1,sa=null,la=function(e){var t={size:16,x:0,y:0,flipX:!1,flipY:!1,rotate:0};return e?e.toLowerCase().split(' ').reduce(function(e,t){var a=t.toLowerCase().split('-'),i=a[0],n=a.slice(1).join('-');return i&&'h'===n?(e.flipX=!0,e):i&&'v'===n?(e.flipY=!0,e):(n=parseFloat(n),isNaN(n))?e:('grow'===i?e.size+=n:'shrink'===i?e.size-=n:'left'===i?e.x-=n:'right'===i?e.x+=n:'up'===i?e.y-=n:'down'===i?e.y+=n:'rotate'===i?e.rotate+=n:void 0,e)},t):t};Me.prototype=Object.crea
 te(Error.prototype),Me.prototype.constructor=Me;var fa={fill:'currentColor'},ma={attributeType:'XML',repeatCount:'indefinite',dur:'2s'},da={tag:'path',attributes:r({},fa,{d:'M156.5,447.7l-12.6,29.5c-18.7-9.5-35.9-21.2-51.5-34.9l22.7-22.7C127.6,430.5,141.5,440,156.5,447.7z M40.6,272H8.5 c1.4,21.2,5.4,41.7,11.7,61.1L50,321.2C45.1,305.5,41.8,289,40.6,272z M40.6,240c1.4-18.8,5.2-37,11.1-54.1l-29.5-12.6 C14.7,194.3,10,216.7,8.5,240H40.6z M64.3,156.5c7.8-14.9,17.2-28.8,28.1-41.5L69.7,92.3c-13.7,15.6-25.5,32.8-34.9,51.5 L64.3,156.5z M397,419.6c-13.9,12-29.4,22.3-46.1,30.4l11.9,29.8c20.7-9.9,39.8-22.6,56.9-37.6L397,419.6z M115,92.4 c13.9-12,29.4-22.3,46.1-30.4l-11.9-29.8c-20.7,9.9-39.8,22.6-56.8,37.6L115,92.4z M447.7,355.5c-7.8,14.9-17.2,28.8-28.1,41.5 l22.7,22.7c13.7-15.6,25.5-32.9,34.9-51.5L447.7,355.5z M471.4,272c-1.4,18.8-5.2,37-11.1,54.1l29.5,12.6 c7.5-21.1,12.2-43.5,13.6-66.8H471.4z M321.2,462c-15.7,5-32.2,8.2-49.2,9.4v32.1c21.2-1.4,41.7-5.4,61.1-11.7L321.2,462z M240,471.4c-18.8-1.4-3
 7-5.2-54.1-11.1l-12.6,29.5c21.1,7.5,43.5,12.2,66.8,13.6V471.4z M462,190.8c5,15.7,8.2,32.2,9.4,49.2h32.1 c-1.4-21.2-5.4-41.7-11.7-61.1L462,190.8z M92.4,397c-12-13.9-22.3-29.4-30.4-46.1l-29.8,11.9c9.9,20.7,22.6,39.8,37.6,56.9 L92.4,397z M272,40.6c18.8,1.4,36.9,5.2,54.1,11.1l12.6-29.5C317.7,14.7,295.3,10,272,8.5V40.6z M190.8,50 c15.7-5,32.2-8.2,49.2-9.4V8.5c-21.2,1.4-41.7,5.4-61.1,11.7L190.8,50z M442.3,92.3L419.6,115c12,13.9,22.3,29.4,30.5,46.1 l29.8-11.9C470,128.5,457.3,109.4,442.3,92.3z M397,92.4l22.7-22.7c-15.6-13.7-32.8-25.5-51.5-34.9l-12.6,29.5 C370.4,72.1,384.4,81.5,397,92.4z'})},ua=r({},ma,{attributeName:'opacity'}),pa={tag:'circle',attributes:r({},fa,{cx:'256',cy:'364',r:'28'}),children:[{tag:'animate',attributes:r({},ma,{attributeName:'r',values:'28;14;28;28;14;28;'})},{tag:'animate',attributes:r({},ua,{values:'1;0;1;1;0;1;'})}]},ha={tag:'path',attributes:r({},fa,{opacity:'1',d:'M263.7,312h-16c-6.6,0-12-5.4-12-12c0-71,77.4-63.9,77.4-107.8c0-20-17.8-40.2-57.4-40.2c-29.1,0-44.3,
 9.6-59.2,28.7 c-3.9,5-11.1,6-16.2,2.4l-13.1-9.2c-5.6-3.9-6.9-11.8-2.6-17.2c21.2-27.2,46.4-44.7,91.2-44.7c52.3,0,97.4,29.8,97.4,80.2 c0,67.6-77.4,63.5-77.4,107.8C275.7,306.6,270.3,312,263.7,312z'}),children:[{tag:'animate',attributes:r({},ua,{values:'1;0;0;0;0;1;'})}]},ga={tag:'path',attributes:r({},fa,{opacity:'0',d:'M232.5,134.5l7,168c0.3,6.4,5.6,11.5,12,11.5h9c6.4,0,11.7-5.1,12-11.5l7-168c0.3-6.8-5.2-12.5-12-12.5h-23 C237.7,122,232.2,127.7,232.5,134.5z'}),children:[{tag:'animate',attributes:r({},ua,{values:'0;0;1;1;0;0;'})}]},ba={tag:'g',children:[da,pa,ha,ga]},ya=w.styles,va=w.styles,xa='svg:not(:root).svg-inline--fa {\n  overflow: visible;\n}\n\n.svg-inline--fa {\n  display: inline-block;\n  font-size: inherit;\n  height: 1em;\n  overflow: visible;\n  vertical-align: -0.125em;\n}\n.svg-inline--fa.fa-lg {\n  vertical-align: -0.225em;\n}\n.svg-inline--fa.fa-w-1 {\n  width: 0.0625em;\n}\n.svg-inline--fa.fa-w-2 {\n  width: 0.125em;\n}\n.svg-inline--fa.fa-w-3 {\n  width: 0.1875em;\n}
 \n.svg-inline--fa.fa-w-4 {\n  width: 0.25em;\n}\n.svg-inline--fa.fa-w-5 {\n  width: 0.3125em;\n}\n.svg-inline--fa.fa-w-6 {\n  width: 0.375em;\n}\n.svg-inline--fa.fa-w-7 {\n  width: 0.4375em;\n}\n.svg-inline--fa.fa-w-8 {\n  width: 0.5em;\n}\n.svg-inline--fa.fa-w-9 {\n  width: 0.5625em;\n}\n.svg-inline--fa.fa-w-10 {\n  width: 0.625em;\n}\n.svg-inline--fa.fa-w-11 {\n  width: 0.6875em;\n}\n.svg-inline--fa.fa-w-12 {\n  width: 0.75em;\n}\n.svg-inline--fa.fa-w-13 {\n  width: 0.8125em;\n}\n.svg-inline--fa.fa-w-14 {\n  width: 0.875em;\n}\n.svg-inline--fa.fa-w-15 {\n  width: 0.9375em;\n}\n.svg-inline--fa.fa-w-16 {\n  width: 1em;\n}\n.svg-inline--fa.fa-w-17 {\n  width: 1.0625em;\n}\n.svg-inline--fa.fa-w-18 {\n  width: 1.125em;\n}\n.svg-inline--fa.fa-w-19 {\n  width: 1.1875em;\n}\n.svg-inline--fa.fa-w-20 {\n  width: 1.25em;\n}\n.svg-inline--fa.fa-pull-left {\n  margin-right: 0.3em;\n  width: auto;\n}\n.svg-inline--fa.fa-pull-right {\n  margin-left: 0.3em;\n  width: auto;\n}\n.svg-inline--fa.fa-
 border {\n  height: 1.5em;\n}\n.svg-inline--fa.fa-li {\n  width: 2em;\n}\n.svg-inline--fa.fa-fw {\n  width: 1.25em;\n}\n\n.fa-layers svg.svg-inline--fa {\n  bottom: 0;\n  left: 0;\n  margin: auto;\n  position: absolute;\n  right: 0;\n  top: 0;\n}\n\n.fa-layers {\n  display: inline-block;\n  height: 1em;\n  position: relative;\n  text-align: center;\n  vertical-align: -0.125em;\n  width: 1em;\n}\n.fa-layers svg.svg-inline--fa {\n  -webkit-transform-origin: center center;\n          transform-origin: center center;\n}\n\n.fa-layers-counter, .fa-layers-text {\n  display: inline-block;\n  position: absolute;\n  text-align: center;\n}\n\n.fa-layers-text {\n  left: 50%;\n  top: 50%;\n  -webkit-transform: translate(-50%, -50%);\n          transform: translate(-50%, -50%);\n  -webkit-transform-origin: center center;\n          transform-origin: center center;\n}\n\n.fa-layers-counter {\n  background-color: #ff253a;\n  border-radius: 1em;\n  -webkit-box-sizing: border-box;\n          box-siz
 ing: border-box;\n  color: #fff;\n  height: 1.5em;\n  line-height: 1;\n  max-width: 5em;\n  min-width: 1.5em;\n  overflow: hidden;\n  padding: 0.25em;\n  right: 0;\n  text-overflow: ellipsis;\n  top: 0;\n  -webkit-transform: scale(0.25);\n          transform: scale(0.25);\n  -webkit-transform-origin: top right;\n          transform-origin: top right;\n}\n\n.fa-layers-bottom-right {\n  bottom: 0;\n  right: 0;\n  top: auto;\n  -webkit-transform: scale(0.25);\n          transform: scale(0.25);\n  -webkit-transform-origin: bottom right;\n          transform-origin: bottom right;\n}\n\n.fa-layers-bottom-left {\n  bottom: 0;\n  left: 0;\n  right: auto;\n  top: auto;\n  -webkit-transform: scale(0.25);\n          transform: scale(0.25);\n  -webkit-transform-origin: bottom left;\n          transform-origin: bottom left;\n}\n\n.fa-layers-top-right {\n  right: 0;\n  top: 0;\n  -webkit-transform: scale(0.25);\n          transform: scale(0.25);\n  -webkit-transform-origin: top right;\n          
 transform-origin: top right;\n}\n\n.fa-layers-top-left {\n  left: 0;\n  right: auto;\n  top: 0;\n  -webkit-transform: scale(0.25);\n          transform: scale(0.25);\n  -webkit-transform-origin: top left;\n          transform-origin: top left;\n}\n\n.fa-lg {\n  font-size: 1.3333333333em;\n  line-height: 0.75em;\n  vertical-align: -0.0667em;\n}\n\n.fa-xs {\n  font-size: 0.75em;\n}\n\n.fa-sm {\n  font-size: 0.875em;\n}\n\n.fa-1x {\n  font-size: 1em;\n}\n\n.fa-2x {\n  font-size: 2em;\n}\n\n.fa-3x {\n  font-size: 3em;\n}\n\n.fa-4x {\n  font-size: 4em;\n}\n\n.fa-5x {\n  font-size: 5em;\n}\n\n.fa-6x {\n  font-size: 6em;\n}\n\n.fa-7x {\n  font-size: 7em;\n}\n\n.fa-8x {\n  font-size: 8em;\n}\n\n.fa-9x {\n  font-size: 9em;\n}\n\n.fa-10x {\n  font-size: 10em;\n}\n\n.fa-fw {\n  text-align: center;\n  width: 1.25em;\n}\n\n.fa-ul {\n  list-style-type: none;\n  margin-left: 2.5em;\n  padding-left: 0;\n}\n.fa-ul > li {\n  position: relative;\n}\n\n.fa-li {\n  left: -2em;\n  position: absolute;\n  
 text-align: center;\n  width: 2em;\n  line-height: inherit;\n}\n\n.fa-border {\n  border: solid 0.08em #eee;\n  border-radius: 0.1em;\n  padding: 0.2em 0.25em 0.15em;\n}\n\n.fa-pull-left {\n  float: left;\n}\n\n.fa-pull-right {\n  float: right;\n}\n\n.fa.fa-pull-left,\n.fas.fa-pull-left,\n.far.fa-pull-left,\n.fal.fa-pull-left,\n.fab.fa-pull-left {\n  margin-right: 0.3em;\n}\n.fa.fa-pull-right,\n.fas.fa-pull-right,\n.far.fa-pull-right,\n.fal.fa-pull-right,\n.fab.fa-pull-right {\n  margin-left: 0.3em;\n}\n\n.fa-spin {\n  -webkit-animation: fa-spin 2s infinite linear;\n          animation: fa-spin 2s infinite linear;\n}\n\n.fa-pulse {\n  -webkit-animation: fa-spin 1s infinite steps(8);\n          animation: fa-spin 1s infinite steps(8);\n}\n\n at -webkit-keyframes fa-spin {\n  0% {\n    -webkit-transform: rotate(0deg);\n            transform: rotate(0deg);\n  }\n  100% {\n    -webkit-transform: rotate(360deg);\n            transform: rotate(360deg);\n  }\n}\n\n at keyframes fa-spin {\n  0% {
 \n    -webkit-transform: rotate(0deg);\n            transform: rotate(0deg);\n  }\n  100% {\n    -webkit-transform: rotate(360deg);\n            transform: rotate(360deg);\n  }\n}\n.fa-rotate-90 {\n  -ms-filter: "progid:DXImageTransform.Microsoft.BasicImage(rotation=1)";\n  -webkit-transform: rotate(90deg);\n          transform: rotate(90deg);\n}\n\n.fa-rotate-180 {\n  -ms-filter: "progid:DXImageTransform.Microsoft.BasicImage(rotation=2)";\n  -webkit-transform: rotate(180deg);\n          transform: rotate(180deg);\n}\n\n.fa-rotate-270 {\n  -ms-filter: "progid:DXImageTransform.Microsoft.BasicImage(rotation=3)";\n  -webkit-transform: rotate(270deg);\n          transform: rotate(270deg);\n}\n\n.fa-flip-horizontal {\n  -ms-filter: "progid:DXImageTransform.Microsoft.BasicImage(rotation=0, mirror=1)";\n  -webkit-transform: scale(-1, 1);\n          transform: scale(-1, 1);\n}\n\n.fa-flip-vertical {\n  -ms-filter: "progid:DXImageTransform.Microsoft.BasicImage(rotation=2, mirror=1)";\n  -web
 kit-transform: scale(1, -1);\n          transform: scale(1, -1);\n}\n\n.fa-flip-both, .fa-flip-horizontal.fa-flip-vertical {\n  -ms-filter: "progid:DXImageTransform.Microsoft.BasicImage(rotation=2, mirror=1)";\n  -webkit-transform: scale(-1, -1);\n          transform: scale(-1, -1);\n}\n\n:root .fa-rotate-90,\n:root .fa-rotate-180,\n:root .fa-rotate-270,\n:root .fa-flip-horizontal,\n:root .fa-flip-vertical,\n:root .fa-flip-both {\n  -webkit-filter: none;\n          filter: none;\n}\n\n.fa-stack {\n  display: inline-block;\n  height: 2em;\n  position: relative;\n  width: 2.5em;\n}\n\n.fa-stack-1x,\n.fa-stack-2x {\n  bottom: 0;\n  left: 0;\n  margin: auto;\n  position: absolute;\n  right: 0;\n  top: 0;\n}\n\n.svg-inline--fa.fa-stack-1x {\n  height: 1em;\n  width: 1.25em;\n}\n.svg-inline--fa.fa-stack-2x {\n  height: 2em;\n  width: 2.5em;\n}\n\n.fa-inverse {\n  color: #fff;\n}\n\n.sr-only {\n  border: 0;\n  clip: rect(0, 0, 0, 0);\n  height: 1px;\n  margin: -1px;\n  overflow: hidden;\n 
  padding: 0;\n  position: absolute;\n  width: 1px;\n}\n\n.sr-only-focusable:active, .sr-only-focusable:focus {\n  clip: auto;\n  height: auto;\n  margin: 0;\n  overflow: visible;\n  position: static;\n  width: auto;\n}\n\n.svg-inline--fa .fa-primary {\n  fill: var(--fa-primary-color, currentColor);\n  opacity: 1;\n  opacity: var(--fa-primary-opacity, 1);\n}\n\n.svg-inline--fa .fa-secondary {\n  fill: var(--fa-secondary-color, currentColor);\n  opacity: 0.4;\n  opacity: var(--fa-secondary-opacity, 0.4);\n}\n\n.svg-inline--fa.fa-swap-opacity .fa-primary {\n  opacity: 0.4;\n  opacity: var(--fa-secondary-opacity, 0.4);\n}\n\n.svg-inline--fa.fa-swap-opacity .fa-secondary {\n  opacity: 1;\n  opacity: var(--fa-primary-opacity, 1);\n}\n\n.svg-inline--fa mask .fa-primary,\n.svg-inline--fa mask .fa-secondary {\n  fill: black;\n}\n\n.fad.fa-inverse {\n  color: #fff;\n}',wa=function(){function e(){t(this,e),this.definitions={}}return i(e,[{key:'add',value:function(){for(var e=this,t=arguments.l
 ength,a=Array(t),i=0;i<t;i++)a[i]=arguments[i];var n=a.reduce(this._pullDefinitions,{});Object.keys(n).forEach(function(t){e.definitions[t]=r({},e.definitions[t]||{},n[t]),ae(t,n[t]),aa()})}},{key:'reset',value:function(){this.definitions={}}},{key:'_pullDefinitions',value:function(e,t){var a=t.prefix&&t.iconName&&t.icon?{0:t}:t;return Object.keys(a).map(function(t){var i=a[t],n=i.prefix,r=i.iconName,c=i.icon;e[n]||(e[n]={}),e[n][r]=c}),e}}]),e}(),ka=new wa,za=!1,Na={i2svg:function(){var e=0<arguments.length&&arguments[0]!==void 0?arguments[0]:{};if(tt){Oe();var t=e.node,a=void 0===t?Qe:t,i=e.callback,n=void 0===i?function(){}:i;return Lt.searchPseudoElements&&Re(a),Pe(a,n)}return Ft.reject('Operation requires a DOM of some kind.')},css:Te,insertCss:function(){za||(H(Te()),za=!0)},watch:function(){var e=0<arguments.length&&arguments[0]!==void 0?arguments[0]:{},t=e.autoReplaceSvgRoot,a=e.observeMutationsRoot;!1===Lt.autoReplaceSvg&&(Lt.autoReplaceSvg=!0),Lt.observeMutations=!0,y(func
 tion(){Aa({autoReplaceSvgRoot:t}),he({treeCallback:Pe,nodeCallback:Ie,pseudoElementsCallback:Re,observeMutationsRoot:a})})}},Ma=function(e){return function(t){var a=1<arguments.length&&void 0!==arguments[1]?arguments[1]:{},i=(t||{}).icon?t:je(t||{}),n=a.mask;return n&&(n=(n||{}).icon?n:je(n||{})),e(i,r({},a,{mask:n}))}}(function(e){var t=1<arguments.length&&arguments[1]!==void 0?arguments[1]:{},a=t.transform,i=void 0===a?d:a,n=t.symbol,c=t.mask,o=void 0===c?null:c,s=t.title,l=void 0===s?null:s,f=t.classes,m=void 0===f?[]:f,u=t.attributes,p=void 0===u?{}:u,h=t.styles,g=void 0===h?{}:h;if(e){var b=e.prefix,y=e.iconName,v=e.icon;return De(r({type:'icon'},e),function(){return Oe(),Lt.autoA11y&&(l?p['aria-labelledby']=''.concat(Lt.replacementClass,'-title-').concat(R()):(p['aria-hidden']='true',p.focusable='false')),Z({icons:{main:Ce(v),mask:o?Ce(o.icon):{found:!1,width:null,height:null,icon:{}}},prefix:b,iconName:y,transform:r({},d,i),symbol:void 0!==n&&n,title:l,extra:{attributes:p,sty
 les:g,classes:m}})})}}),Ca={noAuto:function(){Lt.autoReplaceSvg=!1,Lt.observeMutations=!1,ge()},config:Lt,dom:Na,library:ka,parse:{transform:function(e){return la(e)}},findIconDefinition:je,icon:Ma,text:function(e){var t=1<arguments.length&&arguments[1]!==void 0?arguments[1]:{},a=t.transform,i=void 0===a?d:a,n=t.title,c=void 0===n?null:n,s=t.classes,l=void 0===s?[]:s,f=t.attributes,m=void 0===f?{}:f,u=t.styles,p=void 0===u?{}:u;return De({type:'text',content:e},function(){return Oe(),$({content:e,transform:r({},d,i),title:c,extra:{attributes:m,styles:p,classes:[''.concat(Lt.familyPrefix,'-layers-text')].concat(o(l))}})})},counter:function(e){var t=1<arguments.length&&arguments[1]!==void 0?arguments[1]:{},a=t.title,i=void 0===a?null:a,n=t.classes,r=void 0===n?[]:n,c=t.attributes,s=void 0===c?{}:c,l=t.styles,f=void 0===l?{}:l;return De({type:'counter',content:e},function(){return Oe(),ee({content:e.toString(),title:i,extra:{attributes:s,styles:f,classes:[''.concat(Lt.familyPrefix,'-la
 yers-counter')].concat(o(r))}})})},layer:function(e){var t=1<arguments.length&&arguments[1]!==void 0?arguments[1]:{},a=t.classes,i=void 0===a?[]:a;return De({type:'layer'},function(){Oe();var t=[];return e(function(e){Array.isArray(e)?e.map(function(e){t=t.concat(e.abstract)}):t=t.concat(e.abstract)}),[{tag:'span',attributes:{class:[''.concat(Lt.familyPrefix,'-layers')].concat(o(i)).join(' ')},children:t}]})},toHtml:se},Aa=function(){var e=0<arguments.length&&arguments[0]!==void 0?arguments[0]:{},t=e.autoReplaceSvgRoot,a=void 0===t?Qe:t;(0<Object.keys(w.styles).length||Lt.autoFetchSvg)&&tt&&Lt.autoReplaceSvg&&Ca.dom.i2svg({node:a})};var La={prefix:'fas',iconName:'angle-double-left',icon:[448,512,[],'f100','M223.7 239l136-136c9.4-9.4 24.6-9.4 33.9 0l22.6 22.6c9.4 9.4 9.4 24.6 0 33.9L319.9 256l96.4 96.4c9.4 9.4 9.4 24.6 0 33.9L393.7 409c-9.4 9.4-24.6 9.4-33.9 0l-136-136c-9.5-9.4-9.5-24.6-.1-34zm-192 34l136 136c9.4 9.4 24.6 9.4 33.9 0l22.6-22.6c9.4-9.4 9.4-24.6 0-33.9L127.9 256l96.4-96
 .4c9.4-9.4 9.4-24.6 0-33.9L201.7 103c-9.4-9.4-24.6-9.4-33.9 0l-136 136c-9.5 9.4-9.5 24.6-.1 34z']},Ea={prefix:'fas',iconName:'angle-double-right',icon:[448,512,[],'f101','M224.3 273l-136 136c-9.4 9.4-24.6 9.4-33.9 0l-22.6-22.6c-9.4-9.4-9.4-24.6 0-33.9l96.4-96.4-96.4-96.4c-9.4-9.4-9.4-24.6 0-33.9L54.3 103c9.4-9.4 24.6-9.4 33.9 0l136 136c9.5 9.4 9.5 24.6.1 34zm192-34l-136-136c-9.4-9.4-24.6-9.4-33.9 0l-22.6 22.6c-9.4 9.4-9.4 24.6 0 33.9l96.4 96.4-96.4 96.4c-9.4 9.4-9.4 24.6 0 33.9l22.6 22.6c9.4 9.4 24.6 9.4 33.9 0l136-136c9.4-9.2 9.4-24.4 0-33.8z']},Sa={prefix:'fas',iconName:'angle-left',icon:[256,512,[],'f104','M31.7 239l136-136c9.4-9.4 24.6-9.4 33.9 0l22.6 22.6c9.4 9.4 9.4 24.6 0 33.9L127.9 256l96.4 96.4c9.4 9.4 9.4 24.6 0 33.9L201.7 409c-9.4 9.4-24.6 9.4-33.9 0l-136-136c-9.5-9.4-9.5-24.6-.1-34z']},Pa={prefix:'fas',iconName:'angle-right',icon:[256,512,[],'f105','M224.3 273l-136 136c-9.4 9.4-24.6 9.4-33.9 0l-22.6-22.6c-9.4-9.4-9.4-24.6 0-33.9l96.4-96.4-96.4-96.4c-9.4-9.4-9.4-24.6 0-33
 .9L54.3 103c9.4-9.4 24.6-9.4 33.9 0l136 136c9.5 9.4 9.5 24.6.1 34z']},Ia={prefix:'fas',iconName:'bookmark',icon:[384,512,[],'f02e','M0 512V48C0 21.49 21.49 0 48 0h288c26.51 0 48 21.49 48 48v464L192 400 0 512z']},_a={prefix:'fas',iconName:'cog',icon:[512,512,[],'f013','M487.4 315.7l-42.6-24.6c4.3-23.2 4.3-47 0-70.2l42.6-24.6c4.9-2.8 7.1-8.6 5.5-14-11.1-35.6-30-67.8-54.7-94.6-3.8-4.1-10-5.1-14.8-2.3L380.8 110c-17.9-15.4-38.5-27.3-60.8-35.1V25.8c0-5.6-3.9-10.5-9.4-11.7-36.7-8.2-74.3-7.8-109.2 0-5.5 1.2-9.4 6.1-9.4 11.7V75c-22.2 7.9-42.8 19.8-60.8 35.1L88.7 85.5c-4.9-2.8-11-1.9-14.8 2.3-24.7 26.7-43.6 58.9-54.7 94.6-1.7 5.4.6 11.2 5.5 14L67.3 221c-4.3 23.2-4.3 47 0 70.2l-42.6 24.6c-4.9 2.8-7.1 8.6-5.5 14 11.1 35.6 30 67.8 54.7 94.6 3.8 4.1 10 5.1 14.8 2.3l42.6-24.6c17.9 15.4 38.5 27.3 60.8 35.1v49.2c0 5.6 3.9 10.5 9.4 11.7 36.7 8.2 74.3 7.8 109.2 0 5.5-1.2 9.4-6.1 9.4-11.7v-49.2c22.2-7.9 42.8-19.8 60.8-35.1l42.6 24.6c4.9 2.8 11 1.9 14.8-2.3 24.7-26.7 43.6-58.9 54.7-94.6 1.5-5.5-.7-11.3-
 5.6-14.1zM256 336c-44.1 0-80-35.9-80-80s35.9-80 80-80 80 35.9 80 80-35.9 80-80 80z']},Va={prefix:'fas',iconName:'comment',icon:[512,512,[],'f075','M256 32C114.6 32 0 125.1 0 240c0 49.6 21.4 95 57 130.7C44.5 421.1 2.7 466 2.2 466.5c-2.2 2.3-2.8 5.7-1.5 8.7S4.8 480 8 480c66.3 0 116-31.8 140.6-51.4 32.7 12.3 69 19.4 107.4 19.4 141.4 0 256-93.1 256-208S397.4 32 256 32z']},Ha={prefix:'fas',iconName:'edit',icon:[576,512,[],'f044','M402.6 83.2l90.2 90.2c3.8 3.8 3.8 10 0 13.8L274.4 405.6l-92.8 10.3c-12.4 1.4-22.9-9.1-21.5-21.5l10.3-92.8L388.8 83.2c3.8-3.8 10-3.8 13.8 0zm162-22.9l-48.8-48.8c-15.2-15.2-39.9-15.2-55.2 0l-35.4 35.4c-3.8 3.8-3.8 10 0 13.8l90.2 90.2c3.8 3.8 10 3.8 13.8 0l35.4-35.4c15.2-15.3 15.2-40 0-55.2zM384 346.2V448H64V128h229.8c3.2 0 6.2-1.3 8.5-3.5l40-40c7.6-7.6 2.2-20.5-8.5-20.5H48C21.5 64 0 85.5 0 112v352c0 26.5 21.5 48 48 48h352c26.5 0 48-21.5 48-48V306.2c0-10.7-12.9-16-20.5-8.5l-40 40c-2.2 2.3-3.5 5.3-3.5 8.5z']},Ra={prefix:'fas',iconName:'envelope-open-text',icon:[512,
 512,[],'f658','M176 216h160c8.84 0 16-7.16 16-16v-16c0-8.84-7.16-16-16-16H176c-8.84 0-16 7.16-16 16v16c0 8.84 7.16 16 16 16zm-16 80c0 8.84 7.16 16 16 16h160c8.84 0 16-7.16 16-16v-16c0-8.84-7.16-16-16-16H176c-8.84 0-16 7.16-16 16v16zm96 121.13c-16.42 0-32.84-5.06-46.86-15.19L0 250.86V464c0 26.51 21.49 48 48 48h416c26.51 0 48-21.49 48-48V250.86L302.86 401.94c-14.02 10.12-30.44 15.19-46.86 15.19zm237.61-254.18c-8.85-6.94-17.24-13.47-29.61-22.81V96c0-26.51-21.49-48-48-48h-77.55c-3.04-2.2-5.87-4.26-9.04-6.56C312.6 29.17 279.2-.35 256 0c-23.2-.35-56.59 29.17-73.41 41.44-3.17 2.3-6 4.36-9.04 6.56H96c-26.51 0-48 21.49-48 48v44.14c-12.37 9.33-20.76 15.87-29.61 22.81A47.995 47.995 0 0 0 0 200.72v10.65l96 69.35V96h320v184.72l96-69.35v-10.65c0-14.74-6.78-28.67-18.39-37.77z']},Ta={prefix:'fas',iconName:'expand-arrows-alt',icon:[448,512,[],'f31e','M448 344v112a23.94 23.94 0 0 1-24 24H312c-21.39 0-32.09-25.9-17-41l36.2-36.2L224 295.6 116.77 402.9 153 439c15.09 15.1 4.39 41-17 41H24a23.94 23.94 0 0
  1-24-24V344c0-21.4 25.89-32.1 41-17l36.19 36.2L184.46 256 77.18 148.7 41 185c-15.1 15.1-41 4.4-41-17V56a23.94 23.94 0 0 1 24-24h112c21.39 0 32.09 25.9 17 41l-36.2 36.2L224 216.4l107.23-107.3L295 73c-15.09-15.1-4.39-41 17-41h112a23.94 23.94 0 0 1 24 24v112c0 21.4-25.89 32.1-41 17l-36.19-36.2L263.54 256l107.28 107.3L407 327.1c15.1-15.2 41-4.5 41 16.9z']},Oa={prefix:'fas',iconName:'forward',icon:[512,512,[],'f04e','M500.5 231.4l-192-160C287.9 54.3 256 68.6 256 96v320c0 27.4 31.9 41.8 52.5 24.6l192-160c15.3-12.8 15.3-36.4 0-49.2zm-256 0l-192-160C31.9 54.3 0 68.6 0 96v320c0 27.4 31.9 41.8 52.5 24.6l192-160c15.3-12.8 15.3-36.4 0-49.2z']},Da={prefix:'fas',iconName:'key',icon:[512,512,[],'f084','M512 176.001C512 273.203 433.202 352 336 352c-11.22 0-22.19-1.062-32.827-3.069l-24.012 27.014A23.999 23.999 0 0 1 261.223 384H224v40c0 13.255-10.745 24-24 24h-40v40c0 13.255-10.745 24-24 24H24c-13.255 0-24-10.745-24-24v-78.059c0-6.365 2.529-12.47 7.029-16.971l161.802-161.802C163.108 213.814 160 195
 .271 160 176 160 78.798 238.797.001 335.999 0 433.488-.001 512 78.511 512 176.001zM336 128c0 26.51 21.49 48 48 48s48-21.49 48-48-21.49-48-48-48-48 21.49-48 48z']},ja={prefix:'fas',iconName:'link',icon:[512,512,[],'f0c1','M326.612 185.391c59.747 59.809 58.927 155.698.36 214.59-.11.12-.24.25-.36.37l-67.2 67.2c-59.27 59.27-155.699 59.262-214.96 0-59.27-59.26-59.27-155.7 0-214.96l37.106-37.106c9.84-9.84 26.786-3.3 27.294 10.606.648 17.722 3.826 35.527 9.69 52.721 1.986 5.822.567 12.262-3.783 16.612l-13.087 13.087c-28.026 28.026-28.905 73.66-1.155 101.96 28.024 28.579 74.086 28.749 102.325.51l67.2-67.19c28.191-28.191 28.073-73.757 0-101.83-3.701-3.694-7.429-6.564-10.341-8.569a16.037 16.037 0 0 1-6.947-12.606c-.396-10.567 3.348-21.456 11.698-29.806l21.054-21.055c5.521-5.521 14.182-6.199 20.584-1.731a152.482 152.482 0 0 1 20.522 17.197zM467.547 44.449c-59.261-59.262-155.69-59.27-214.96 0l-67.2 67.2c-.12.12-.25.25-.36.37-58.566 58.892-59.387 154.781.36 214.59a152.454 152.454 0 0 0 20.521 17
 .196c6.402 4.468 15.064 3.789 20.584-1.731l21.054-21.055c8.35-8.35 12.094-19.239 11.698-29.806a16.037 16.037 0 0 0-6.947-12.606c-2.912-2.005-6.64-4.875-10.341-8.569-28.073-28.073-28.191-73.639 0-101.83l67.2-67.19c28.239-28.239 74.3-28.069 102.325.51 27.75 28.3 26.872 73.934-1.155 101.96l-13.087 13.087c-4.35 4.35-5.769 10.79-3.783 16.612 5.864 17.194 9.042 34.999 9.69 52.721.509 13.906 17.454 20.446 27.294 10.606l37.106-37.106c59.271-59.259 59.271-155.699.001-214.959z']},Fa={prefix:'fas',iconName:'list',icon:[512,512,[],'f03a','M80 368H16a16 16 0 0 0-16 16v64a16 16 0 0 0 16 16h64a16 16 0 0 0 16-16v-64a16 16 0 0 0-16-16zm0-320H16A16 16 0 0 0 0 64v64a16 16 0 0 0 16 16h64a16 16 0 0 0 16-16V64a16 16 0 0 0-16-16zm0 160H16a16 16 0 0 0-16 16v64a16 16 0 0 0 16 16h64a16 16 0 0 0 16-16v-64a16 16 0 0 0-16-16zm416 176H176a16 16 0 0 0-16 16v32a16 16 0 0 0 16 16h320a16 16 0 0 0 16-16v-32a16 16 0 0 0-16-16zm0-320H176a16 16 0 0 0-16 16v32a16 16 0 0 0 16 16h320a16 16 0 0 0 16-16V80a16 16 0 0 0-16-16z
 m0 160H176a16 16 0 0 0-16 16v32a16 16 0 0 0 16 16h320a16 16 0 0 0 16-16v-32a16 16 0 0 0-16-16z']},Ya={prefix:'fas',iconName:'paperclip',icon:[448,512,[],'f0c6','M43.246 466.142c-58.43-60.289-57.341-157.511 1.386-217.581L254.392 34c44.316-45.332 116.351-45.336 160.671 0 43.89 44.894 43.943 117.329 0 162.276L232.214 383.128c-29.855 30.537-78.633 30.111-107.982-.998-28.275-29.97-27.368-77.473 1.452-106.953l143.743-146.835c6.182-6.314 16.312-6.422 22.626-.241l22.861 22.379c6.315 6.182 6.422 16.312.241 22.626L171.427 319.927c-4.932 5.045-5.236 13.428-.648 18.292 4.372 4.634 11.245 4.711 15.688.165l182.849-186.851c19.613-20.062 19.613-52.725-.011-72.798-19.189-19.627-49.957-19.637-69.154 0L90.39 293.295c-34.763 35.56-35.299 93.12-1.191 128.313 34.01 35.093 88.985 35.137 123.058.286l172.06-175.999c6.177-6.319 16.307-6.433 22.626-.256l22.877 22.364c6.319 6.177 6.434 16.307.256 22.626l-172.06 175.998c-59.576 60.938-155.943 60.216-214.77-.485z']},Xa={prefix:'fas',iconName:'pencil-alt',icon:[5
 12,512,[],'f303','M497.9 142.1l-46.1 46.1c-4.7 4.7-12.3 4.7-17 0l-111-111c-4.7-4.7-4.7-12.3 0-17l46.1-46.1c18.7-18.7 49.1-18.7 67.9 0l60.1 60.1c18.8 18.7 18.8 49.1 0 67.9zM284.2 99.8L21.6 362.4.4 483.9c-2.9 16.4 11.4 30.6 27.8 27.8l121.5-21.3 262.6-262.6c4.7-4.7 4.7-12.3 0-17l-111-111c-4.8-4.7-12.4-4.7-17.1 0zM124.1 339.9c-5.5-5.5-5.5-14.3 0-19.8l154-154c5.5-5.5 14.3-5.5 19.8 0s5.5 14.3 0 19.8l-154 154c-5.5 5.5-14.3 5.5-19.8 0zM88 424h48v36.3l-64.5 11.3-31.1-31.1L51.7 376H88v48z']},Ba={prefix:'fas',iconName:'plus',icon:[448,512,[],'f067','M416 208H272V64c0-17.67-14.33-32-32-32h-32c-17.67 0-32 14.33-32 32v144H32c-17.67 0-32 14.33-32 32v32c0 17.67 14.33 32 32 32h144v144c0 17.67 14.33 32 32 32h32c17.67 0 32-14.33 32-32V304h144c17.67 0 32-14.33 32-32v-32c0-17.67-14.33-32-32-32z']},Ua={prefix:'fas',iconName:'project-diagram',icon:[640,512,[],'f542','M384 320H256c-17.67 0-32 14.33-32 32v128c0 17.67 14.33 32 32 32h128c17.67 0 32-14.33 32-32V352c0-17.67-14.33-32-32-32zM192 32c0-17.67-14.33-
 32-32-32H32C14.33 0 0 14.33 0 32v128c0 17.67 14.33 32 32 32h95.72l73.16 128.04C211.98 300.98 232.4 288 256 288h.28L192 175.51V128h224V64H192V32zM608 0H480c-17.67 0-32 14.33-32 32v128c0 17.67 14.33 32 32 32h128c17.67 0 32-14.33 32-32V32c0-17.67-14.33-32-32-32z']},Wa={prefix:'fas',iconName:'reply',icon:[512,512,[],'f3e5','M8.309 189.836L184.313 37.851C199.719 24.546 224 35.347 224 56.015v80.053c160.629 1.839 288 34.032 288 186.258 0 61.441-39.581 122.309-83.333 154.132-13.653 9.931-33.111-2.533-28.077-18.631 45.344-145.012-21.507-183.51-176.59-185.742V360c0 20.7-24.3 31.453-39.687 18.164l-176.004-152c-11.071-9.562-11.086-26.753 0-36.328z']},qa={prefix:'fas',iconName:'times',icon:[352,512,[],'f00d','M242.72 256l100.07-100.07c12.28-12.28 12.28-32.19 0-44.48l-22.24-22.24c-12.28-12.28-32.19-12.28-44.48 0L176 189.28 75.93 89.21c-12.28-12.28-32.19-12.28-44.48 0L9.21 111.45c-12.28 12.28-12.28 32.19 0 44.48L109.28 256 9.21 356.07c-12.28 12.28-12.28 32.19 0 44.48l22.24 22.24c12.28 12.28 32.2 1
 2.28 44.48 0L176 322.72l100.07 100.07c12.28 12.28 32.2 12.28 44.48 0l22.24-22.24c12.28-12.28 12.28-32.19 0-44.48L242.72 256z']};var Ga={prefix:'far',iconName:'arrow-alt-circle-up',icon:[512,512,[],'f35b','M256 504c137 0 248-111 248-248S393 8 256 8 8 119 8 256s111 248 248 248zm0-448c110.5 0 200 89.5 200 200s-89.5 200-200 200S56 366.5 56 256 145.5 56 256 56zm20 328h-40c-6.6 0-12-5.4-12-12V256h-67c-10.7 0-16-12.9-8.5-20.5l99-99c4.7-4.7 12.3-4.7 17 0l99 99c7.6 7.6 2.2 20.5-8.5 20.5h-67v116c0 6.6-5.4 12-12 12z']},Ka={prefix:'far',iconName:'bookmark',icon:[384,512,[],'f02e','M336 0H48C21.49 0 0 21.49 0 48v464l192-112 192 112V48c0-26.51-21.49-48-48-48zm0 428.43l-144-84-144 84V54a6 6 0 0 1 6-6h276c3.314 0 6 2.683 6 5.996V428.43z']},Ja={prefix:'far',iconName:'calendar-alt',icon:[448,512,[],'f073','M148 288h-40c-6.6 0-12-5.4-12-12v-40c0-6.6 5.4-12 12-12h40c6.6 0 12 5.4 12 12v40c0 6.6-5.4 12-12 12zm108-12v-40c0-6.6-5.4-12-12-12h-40c-6.6 0-12 5.4-12 12v40c0 6.6 5.4 12 12 12h40c6.6 0 12-5.4 12-1
 2zm96 0v-40c0-6.6-5.4-12-12-12h-40c-6.6 0-12 5.4-12 12v40c0 6.6 5.4 12 12 12h40c6.6 0 12-5.4 12-12zm-96 96v-40c0-6.6-5.4-12-12-12h-40c-6.6 0-12 5.4-12 12v40c0 6.6 5.4 12 12 12h40c6.6 0 12-5.4 12-12zm-96 0v-40c0-6.6-5.4-12-12-12h-40c-6.6 0-12 5.4-12 12v40c0 6.6 5.4 12 12 12h40c6.6 0 12-5.4 12-12zm192 0v-40c0-6.6-5.4-12-12-12h-40c-6.6 0-12 5.4-12 12v40c0 6.6 5.4 12 12 12h40c6.6 0 12-5.4 12-12zm96-260v352c0 26.5-21.5 48-48 48H48c-26.5 0-48-21.5-48-48V112c0-26.5 21.5-48 48-48h48V12c0-6.6 5.4-12 12-12h40c6.6 0 12 5.4 12 12v52h128V12c0-6.6 5.4-12 12-12h40c6.6 0 12 5.4 12 12v52h48c26.5 0 48 21.5 48 48zm-48 346V160H48v298c0 3.3 2.7 6 6 6h340c3.3 0 6-2.7 6-6z']},Qa={prefix:'far',iconName:'check-circle',icon:[512,512,[],'f058','M256 8C119.033 8 8 119.033 8 256s111.033 248 248 248 248-111.033 248-248S392.967 8 256 8zm0 48c110.532 0 200 89.451 200 200 0 110.532-89.451 200-200 200-110.532 0-200-89.451-200-200 0-110.532 89.451-200 200-200m140.204 130.267l-22.536-22.718c-4.667-4.705-12.265-4.736-1
 6.97-.068L215.346 303.697l-59.792-60.277c-4.667-4.705-12.265-4.736-16.97-.069l-22.719 22.536c-4.705 4.667-4.736 12.265-.068 16.971l90.781 91.516c4.667 4.705 12.265 4.736 16.97.068l172.589-171.204c4.704-4.668 4.734-12.266.067-16.971z']},Za={prefix:'far',iconName:'clock',icon:[512,512,[],'f017','M256 8C119 8 8 119 8 256s111 248 248 248 248-111 248-248S393 8 256 8zm0 448c-110.5 0-200-89.5-200-200S145.5 56 256 56s200 89.5 200 200-89.5 200-200 200zm61.8-104.4l-84.9-61.7c-3.1-2.3-4.9-5.9-4.9-9.7V116c0-6.6 5.4-12 12-12h32c6.6 0 12 5.4 12 12v141.7l66.8 48.6c5.4 3.9 6.5 11.4 2.6 16.8L334.6 349c-3.9 5.3-11.4 6.5-16.8 2.6z']},$a={prefix:'far',iconName:'edit',icon:[576,512,[],'f044','M402.3 344.9l32-32c5-5 13.7-1.5 13.7 5.7V464c0 26.5-21.5 48-48 48H48c-26.5 0-48-21.5-48-48V112c0-26.5 21.5-48 48-48h273.5c7.1 0 10.7 8.6 5.7 13.7l-32 32c-1.5 1.5-3.5 2.3-5.7 2.3H48v352h352V350.5c0-2.1.8-4.1 2.3-5.6zm156.6-201.8L296.3 405.7l-90.4 10c-26.2 2.9-48.5-19.2-45.6-45.6l10-90.4L432.9 17.1c22.9-22.9 59.9-22.
 9 82.7 0l43.2 43.2c22.9 22.9 22.9 60 .1 82.8zM460.1 174L402 115.9 216.2 301.8l-7.3 65.3 65.3-7.3L460.1 174zm64.8-79.7l-43.2-43.2c-4.1-4.1-10.8-4.1-14.8 0L436 82l58.1 58.1 30.9-30.9c4-4.2 4-10.8-.1-14.9z']},ei={prefix:'far',iconName:'file',icon:[384,512,[],'f15b','M369.9 97.9L286 14C277 5 264.8-.1 252.1-.1H48C21.5 0 0 21.5 0 48v416c0 26.5 21.5 48 48 48h288c26.5 0 48-21.5 48-48V131.9c0-12.7-5.1-25-14.1-34zM332.1 128H256V51.9l76.1 76.1zM48 464V48h160v104c0 13.3 10.7 24 24 24h104v288H48z']},ti={prefix:'far',iconName:'pause-circle',icon:[512,512,[],'f28b','M256 8C119 8 8 119 8 256s111 248 248 248 248-111 248-248S393 8 256 8zm0 448c-110.5 0-200-89.5-200-200S145.5 56 256 56s200 89.5 200 200-89.5 200-200 200zm96-280v160c0 8.8-7.2 16-16 16h-48c-8.8 0-16-7.2-16-16V176c0-8.8 7.2-16 16-16h48c8.8 0 16 7.2 16 16zm-112 0v160c0 8.8-7.2 16-16 16h-48c-8.8 0-16-7.2-16-16V176c0-8.8 7.2-16 16-16h48c8.8 0 16 7.2 16 16z']},ai={prefix:'far',iconName:'play-circle',icon:[512,512,[],'f144','M371.7 238l-176-10
 7c-15.8-8.8-35.7 2.5-35.7 21v208c0 18.4 19.8 29.8 35.7 21l176-101c16.4-9.1 16.4-32.8 0-42zM504 256C504 119 393 8 256 8S8 119 8 256s111 248 248 248 248-111 248-248zm-448 0c0-110.5 89.5-200 200-200s200 89.5 200 200-89.5 200-200 200S56 366.5 56 256z']},ii={prefix:'far',iconName:'question-circle',icon:[512,512,[],'f059','M256 8C119.043 8 8 119.083 8 256c0 136.997 111.043 248 248 248s248-111.003 248-248C504 119.083 392.957 8 256 8zm0 448c-110.532 0-200-89.431-200-200 0-110.495 89.472-200 200-200 110.491 0 200 89.471 200 200 0 110.53-89.431 200-200 200zm107.244-255.2c0 67.052-72.421 68.084-72.421 92.863V300c0 6.627-5.373 12-12 12h-45.647c-6.627 0-12-5.373-12-12v-8.659c0-35.745 27.1-50.034 47.579-61.516 17.561-9.845 28.324-16.541 28.324-29.579 0-17.246-21.999-28.693-39.784-28.693-23.189 0-33.894 10.977-48.942 29.969-4.057 5.12-11.46 6.071-16.666 2.124l-27.824-21.098c-5.107-3.872-6.251-11.066-2.644-16.363C184.846 131.491 214.94 112 261.794 112c49.071 0 101.45 38.304 101.45 88.8zM298 368c0 2
 3.159-18.841 42-42 42s-42-18.841-42-42 18.841-42 42-42 42 18.841 42 42z']},ni={prefix:'far',iconName:'times-circle',icon:[512,512,[],'f057','M256 8C119 8 8 119 8 256s111 248 248 248 248-111 248-248S393 8 256 8zm0 448c-110.5 0-200-89.5-200-200S145.5 56 256 56s200 89.5 200 200-89.5 200-200 200zm101.8-262.2L295.6 256l62.2 62.2c4.7 4.7 4.7 12.3 0 17l-22.6 22.6c-4.7 4.7-12.3 4.7-17 0L256 295.6l-62.2 62.2c-4.7 4.7-12.3 4.7-17 0l-22.6-22.6c-4.7-4.7-4.7-12.3 0-17l62.2-62.2-62.2-62.2c-4.7-4.7-4.7-12.3 0-17l22.6-22.6c4.7-4.7 12.3-4.7 17 0l62.2 62.2 62.2-62.2c4.7-4.7 12.3-4.7 17 0l22.6 22.6c4.7 4.7 4.7 12.3 0 17z']};ka.add(_a,Ha,Ia,Ua,Ra,Wa,Va,Oa,ja,Ba,Da,Xa,qa,Ya,Fa,Sa,La,Pa,Ea,Ta,$a,Ka,Za,Ja,ai,ti,Ga,ni,ii,ei,Qa),Na.watch()})();
\ No newline at end of file

commit 770654801b1b31e537d221266d827da830ff0fec
Author: sunnavy <sunnavy at bestpractical.com>
Date:   Sat Jul 9 12:23:40 2022 +0800

    Set status colors in lifecycle UI via css to be more flexible

diff --git a/share/static/css/elevator-light/lifecycleui.css b/share/static/css/elevator-light/lifecycleui.css
index 1360daf755..9f0717dd2c 100644
--- a/share/static/css/elevator-light/lifecycleui.css
+++ b/share/static/css/elevator-light/lifecycleui.css
@@ -13,6 +13,18 @@ g circle.node-selected {
     fill: #98b9eb !important;
 }
 
+.status-type-active {
+    fill: #547CCC;
+}
+
+.status-type-inactive {
+    fill: #4bb2cc;
+}
+
+.status-type-initial {
+    fill: #599ACC;
+}
+
 .dragline {
     fill: none;
     stroke: #000;
diff --git a/share/static/js/lifecycleui-editor.js b/share/static/js/lifecycleui-editor.js
index ee157d8b1b..ff0b9936ba 100644
--- a/share/static/js/lifecycleui-editor.js
+++ b/share/static/js/lifecycleui-editor.js
@@ -316,15 +316,8 @@ jQuery(function () {
             self.node.select("circle")
                 .attr("r", self.node_radius)
                 .attr("stroke", "black")
-                .attr("fill", function(d) {
-                    switch(d.type) {
-                        case 'active':
-                            return '#547CCC';
-                        case 'inactive':
-                            return '#4bb2cc';
-                        case 'initial':
-                            return '#599ACC';
-                    }
+                .attr("class", function(d) {
+                    return 'status status-type-' + d.type;
                 })
                 .on("click", function() {
                     d3.event.stopPropagation();

commit 123f5924fe6663e4f8dd9c109bce6b8d78071167
Author: sunnavy <sunnavy at bestpractical.com>
Date:   Fri Jul 1 13:13:41 2022 +0800

    Support to set descriptions on lifecycle admin pages

diff --git a/share/html/Admin/Lifecycles/Actions.html b/share/html/Admin/Lifecycles/Actions.html
index a9f5824b08..1e114bf320 100644
--- a/share/html/Admin/Lifecycles/Actions.html
+++ b/share/html/Admin/Lifecycles/Actions.html
@@ -68,6 +68,7 @@
       <th class="collection-as-table"><&|/l&>From</&></th>
       <th class="collection-as-table"><&|/l&>To</&></th>
       <th class="collection-as-table"><&|/l&>Label</&></th>
+      <th class="collection-as-table"><&|/l&>Description</&></th>
       <th class="collection-as-table"><&|/l&>Update Type</&></th>
       <th class="collection-as-table text-left">
         <div class="custom-control custom-checkbox">
@@ -88,6 +89,9 @@
       <td class="collection-as-table">
         <input type="text" value="<% $action->{'label'} %>" class="form-control" Name="Action-Label-<%$i%>" />
       </td>
+      <td class="collection-as-table">
+        <input type="text" value="<% $action->{'description'} %>" class="form-control" name="Action-Description-<% $i %>" />
+      </td>
       <td class="collection-as-table">
         <select name="Action-Update-<% $i %>" class="form-control selectpicker">
           <option <% !$action->{'update'} ? qq[selected='selected'] : '' %> value="">-</option>
@@ -110,6 +114,7 @@
       <td class="collection-as-table"><& /Elements/SelectStatus, Statuses => [ @statuses, '*' ], Name => "Action-From-$i" &></td>
       <td class="collection-as-table"><& /Elements/SelectStatus, Statuses => \@statuses, Name => "Action-To-$i" &></td>
       <td class="collection-as-table"><input type="text" class="form-control" name='Action-Label-<% $i %>' /></td>
+      <td class="collection-as-table"><input type="text" class="form-control" name='Action-Description-<% $i %>' /></td>
       <td class="collection-as-table">
         <select name="Action-Update-<% $i %>" class="selectpicker form-control">
           <option value="">-</option>
@@ -168,10 +173,12 @@ if ($Update) {
         next unless $new_actions{$key}->{from} && $new_actions{$key}->{to} && $new_actions{$key}->{label};
 
         push @new_actions, "$new_actions{$key}->{from} -> $new_actions{$key}->{to}";
-        push @new_actions, {
-            label  => $new_actions{$key}->{label},
-            $new_actions{$key}->{update} ? ( update => $new_actions{$key}->{update} ) : (),
-        };
+        push @new_actions,
+            {
+                label => $new_actions{$key}->{label},
+                $new_actions{$key}->{description} ? ( description => $new_actions{$key}->{description} ) : (),
+                $new_actions{$key}->{update}      ? ( update      => $new_actions{$key}->{update} )      : (),
+            };
     }
 
     my $config = RT->Config->Get('Lifecycles')->{$LifecycleObj->Name};
diff --git a/share/html/Elements/Lifecycle/Graph b/share/html/Elements/Lifecycle/Graph
index dd88a6b1ea..fa2b74217b 100644
--- a/share/html/Elements/Lifecycle/Graph
+++ b/share/html/Elements/Lifecycle/Graph
@@ -46,6 +46,7 @@
 %#
 %# END BPS TAGGED BLOCK }}}
 <div class="lifecycle-ui" id="lifecycle-<% $id %>">
+  <div id="lifecycle-ui-tooltip" data-toggle="tooltip" data-html="true"></div>
   <div id="lifeycycle-ui-edit-node" class="lifeycycle-ui-edit-node collapse card card-body">
     <input type="hidden" name="id" />
     <div class="alert alert-warning invalid-name hidden"><&|/l&>Invalid name</&></div>
@@ -70,6 +71,15 @@
         </select>
       </div>
     </div>
+
+    <div class="form-row">
+      <div class="col-3 label">
+        <label for="type"><&|/l&>Description</&>:</label>
+      </div>
+      <div class="col-9 value">
+        <input class="form-control" type="text" id="description" name="description" value="" />
+      </div>
+    </div>
     <div class="form-row">
       <div class="col-12 text-right">
         <button class="btn btn-light" id="CancelNode"><&|/l&>Cancel</&></button>
@@ -77,6 +87,33 @@
       </div>
     </div>
   </div>
+  <div id="lifeycycle-ui-edit-link" class="lifeycycle-ui-edit-link collapse card card-body">
+    <input type="hidden" name="id" />
+    <h6 class="text-center mb-1"><&|/l&>Update Description</&></h6>
+    <div class="form-row">
+      <div class="col-4 label">
+        <label for="description_1"></label>
+      </div>
+      <div class="col-8 value">
+        <input class="form-control" type="text" id="description_1" name="description_1" value="" />
+      </div>
+    </div>
+    <div class="form-row">
+      <div class="col-4 label">
+        <label for="description_2"></label>
+      </div>
+      <div class="col-8 value">
+        <input class="form-control" type="text" id="description_2" name="description_2" value="" />
+      </div>
+    </div>
+
+    <div class="form-row">
+      <div class="col-12 text-right">
+        <button class="btn btn-light" id="CancelLink"><&|/l&>Cancel</&></button>
+        <button class="button btn btn-primary form-control" id="SaveLink"><&|/l&>Save</&></button>
+      </div>
+    </div>
+  </div>
 
   <div class="form-row">
     <div class="col-12">
@@ -110,7 +147,8 @@ Click on the status text to <strong>edit</strong> the status.<br>
 Click and drag a status node to <strong>change the graph layout</strong>.<br>
 Control + click on a status and drag to another to <strong>add a transition</strong>.<br>
 Click on a status node to select it and press 'd' to <strong>delete</strong>.<br>
-<strong>Click on a transition line</strong> to delete.<br></&>
+Click on a transition to <strong>edit</strong> its description.<br>
+<strong>Control + click on a transition line</strong> to delete.<br></&>
       </p>
     </div>
   </div>
diff --git a/share/static/css/elevator-light/lifecycleui.css b/share/static/css/elevator-light/lifecycleui.css
index afb1adc501..1360daf755 100644
--- a/share/static/css/elevator-light/lifecycleui.css
+++ b/share/static/css/elevator-light/lifecycleui.css
@@ -23,6 +23,13 @@ g circle.node-selected {
 .lifeycycle-ui-edit-node {
     position: absolute;
     z-index: 99;
+    width: 400px;
+}
+
+.lifeycycle-ui-edit-link {
+    position: absolute;
+    z-index: 99;
+    width: 500px;
 }
 
 .svg-content-responsive {
@@ -34,3 +41,8 @@ svg .rect {
     stroke: steelblue;
     stroke-width: 5px;
 }
+
+#lifecycle-ui-tooltip {
+    position: absolute;
+    z-index: 999;
+}
diff --git a/share/static/js/lifecycleui-editor.js b/share/static/js/lifecycleui-editor.js
index e31757a458..ee157d8b1b 100644
--- a/share/static/js/lifecycleui-editor.js
+++ b/share/static/js/lifecycleui-editor.js
@@ -30,6 +30,16 @@ jQuery(function () {
                 jQuery("#lifeycycle-ui-edit-node div.alert").addClass('hidden');
             });
 
+            jQuery("#SaveLink").click(function(e) {
+                e.preventDefault();
+                self.UpdateLink();
+            });
+
+            jQuery("#CancelLink").click(function(e) {
+                e.preventDefault();
+                jQuery("#lifeycycle-ui-edit-link").toggle();
+            });
+
             self.svg = d3.select(container).select('svg')
                 .attr("preserveAspectRatio", "xMinYMin meet")
                 .attr("viewBox", "0 0 "+self.width+" "+self.height)
@@ -66,12 +76,35 @@ jQuery(function () {
                     if (!target) { return };
 
                     if ( source.id < target.id ) {
-                        self.links.push({id: ++self.links_seq, source: source, target: target, start: false, end: true});
+                        self.links.push({
+                            id: ++self.links_seq,
+                            source: source,
+                            target: target,
+                            start: false,
+                            end: true,
+                            descriptions: {
+                                [source.name + ' -> ' + target.name]: self.config.descriptions[source.name + ' -> ' + target.name],
+                                [target.name + ' -> ' + source.name]: self.config.descriptions[target.name + ' -> ' + source.name],
+                            }
+                        });
                         return;
                     }
                     var link = self.links.filter(function(l) { return (l.source === target && l.target === source); })[0];
-                    if(link) link.start = true;
-                    else self.links.push({id: ++self.links_seq, source: source, target: target, start: false, end: true});
+                    if (link) {
+                        link.start = true;
+                    } else {
+                        self.links.push({
+                            id: ++self.links_seq,
+                            source: source,
+                            target: target,
+                            start: false,
+                            end: true,
+                            descriptions: {
+                                [source.name + ' -> ' + target.name]: self.config.descriptions[source.name + ' -> ' + target.name],
+                                [target.name + ' -> ' + source.name]: self.config.descriptions[target.name + ' -> ' + source.name],
+                            }
+                        });
+                    }
                 });
                 if ( !self.enableSimulation ) {
                     if (self.layout[source.name][0]) source.x = parseInt(self.layout[source.name][0]);
@@ -338,6 +371,17 @@ jQuery(function () {
 
             self.node.select("title")
                 .text(function(d) { return d.type; });
+
+            self.node.select('text').on('mouseover', function(d) {
+                if ( d.description ) {
+                    jQuery('#lifecycle-ui-tooltip').css('left', d3.event.pageX).css('top', d3.event.pageY);
+                    jQuery('#lifecycle-ui-tooltip').attr('data-original-title', d.description);
+                    jQuery('#lifecycle-ui-tooltip').tooltip('show');
+                }
+            })
+            .on('mouseout', function() {
+                jQuery('#lifecycle-ui-tooltip').tooltip('hide');
+            });
         }
 
         UpdateNode(element) {
@@ -413,17 +457,95 @@ jQuery(function () {
                 .attr("transform", "translate(0,0)")
                 .on("click", function(d) {
                     d3.event.stopPropagation();
+                    d3.event.preventDefault();
                     self.simulation.stop();
-                    self.ToggleLink(d);
-
-                    self.ExportAsConfiguration();
-
-                    self.Refresh();
+                    self.UpdateLink(d);
+                })
+                .on("mouseup", function(d) {
+                    d3.event.stopPropagation();
+                    d3.event.preventDefault();
+                    if ( d3.event.ctrlKey ) {
+                        self.ToggleLink(d);
+                        self.ExportAsConfiguration();
+                        self.Refresh();
+                    }
                 });
             self.link = linkEnter.merge(self.link);
             self.link
                 .style("marker-start", function(d) { return d.start ? 'url(#start-arrow)' : '' })
                 .style("marker-end", function(d) { return d.end ? 'url(#end-arrow)' : '' });
+
+            self.link.on('mouseover', function(d) {
+                let descriptions = [];
+                let item = d.source.name + ' -> ' + d.target.name;
+                let reverse_item = d.target.name + ' -> ' + d.source.name;
+                // if it's bidirectional
+                if ( d.start ) {
+                    for ( let i of [item, reverse_item] ) {
+                        if ( d.descriptions[i] ) {
+                            descriptions.push(i + ': ' + d.descriptions[i]);
+                        }
+                    }
+                }
+                else {
+                    if ( d.descriptions[item] ) {
+                        descriptions.push(d.descriptions[item]);
+                    }
+                }
+
+                if ( descriptions.length ) {
+                    jQuery('#lifecycle-ui-tooltip').css('left', d3.event.pageX).css('top', d3.event.pageY);
+                    jQuery('#lifecycle-ui-tooltip').attr('data-original-title', descriptions.join('<br>'));
+                    jQuery('#lifecycle-ui-tooltip').tooltip('show');
+                }
+            })
+            .on('mouseout', function() {
+                jQuery('#lifecycle-ui-tooltip').tooltip('hide');
+            });
+        }
+
+        UpdateLink(element) {
+            var self = this;
+            const linkInput = jQuery("#lifeycycle-ui-edit-link");
+
+            if ( event.pageX ) {
+                var posX = event.pageX;
+                var posY =  event.pageY;
+                linkInput.css( {position:"absolute", top:posY - 50, left: posX - 200});
+            }
+            var list = document.getElementById('lifeycycle-ui-edit-link').querySelectorAll('input');
+
+            if ( element ) {
+                list[0].setAttribute('value', element.id);
+                let name = element.source.name + ' -> ' + element.target.name;
+                list[1].setAttribute('name', name);
+                list[1].setAttribute('value', element.descriptions[name] || '');
+                jQuery(list[1]).closest('div.form-row').find('div.label').text(name + ':');
+                if ( element.start ) {
+                    let name = element.target.name + ' -> ' + element.source.name;
+                    list[2].setAttribute('name', name);
+                    list[2].setAttribute('value', element.descriptions[name] || '');
+                    jQuery(list[2]).closest('div.form-row').find('div.label').text(name + ':');
+                    jQuery(list[2]).closest('div.form-row').removeClass('hidden');
+                }
+                else {
+                    list[2].setAttribute('name', '');
+                    jQuery(list[2]).closest('div.form-row').addClass('hidden');
+                }
+            }
+            else {
+                var values = {};
+                for (let item of list) {
+                    if ( item.name === 'id' ) {
+                        values.index = self.links.findIndex(function(x) { return x.id == item.value });
+                    }
+                    values[item.name] = item.value;
+                }
+                self.links[values.index].descriptions = values;
+                self.ExportAsConfiguration();
+                self.Refresh();
+            }
+            linkInput.toggle();
         }
 
         Refresh() {
diff --git a/share/static/js/lifecycleui-model.js b/share/static/js/lifecycleui-model.js
index 2a1dae32cf..7f400d9fb8 100644
--- a/share/static/js/lifecycleui-model.js
+++ b/share/static/js/lifecycleui-model.js
@@ -11,11 +11,12 @@ class LifecycleModel {
     NodesFromConfig(config) {
         var self = this;
         self.nodes = [];
+        config.descriptions ||= {};
 
         jQuery.each(['initial', 'active', 'inactive'], function (i, type) {
             if ( config[type] ) {
                 config[type].forEach(function(element) {
-                    self.nodes = self.nodes.concat({id: ++self.nodes_seq, name: element, type: type});
+                    self.nodes = self.nodes.concat({id: ++self.nodes_seq, name: element, type: type, description: config.descriptions[element]});
                 });
             }
         });
@@ -64,7 +65,7 @@ class LifecycleModel {
         else {
             link = self.links.filter(function(l) { return (l.source.id === source.id && l.target.id === target.id); })[0];
             if (!link ) {
-                self.links.push({id: ++self.links_seq, source: source, target: target, start: false, end: true});
+                self.links.push({id: ++self.links_seq, source: source, target: target, start: false, end: true, descriptions: {}});
             }
         }
     }
@@ -299,6 +300,7 @@ class LifecycleModel {
             active:   [],
             inactive: [],
             transitions: {},
+            descriptions: {},
         };
 
         // Grab our status nodes
@@ -313,6 +315,10 @@ class LifecycleModel {
         self.nodes.forEach(function(source) {
             var links = self.LinksForNode(source);
             var targets = links.map(link => {
+                config.descriptions[link.source.name + ' -> ' + link.target.name] = link.descriptions[link.source.name + ' -> ' + link.target.name];
+                if ( link.start ) {
+                    config.descriptions[link.target.name + ' -> ' + link.source.name] = link.descriptions[link.target.name + ' -> ' + link.source.name];
+                }
                 if ( link.source.id === source.id ) {
                     return link.target.name;
                 }
@@ -321,6 +327,7 @@ class LifecycleModel {
                 }
             });
             config.transitions[source.name] = targets;
+            config.descriptions[source.name] = source.description;
             seen[source.name] = 1;
         });
 
@@ -332,6 +339,12 @@ class LifecycleModel {
 
         self.config = {...self.config, ...config};
 
+        for ( let item in self.config.descriptions ) {
+            if ( !self.config.descriptions[item] ) {
+                delete self.config.descriptions[item];
+            }
+        }
+
         var field = jQuery('form[name=ModifyLifecycle] input[name=Config]');
         field.val(JSON.stringify(self.config));
 

commit c7dd33c1267d882d7f4f9c25f191b5a7c65cf331
Author: sunnavy <sunnavy at bestpractical.com>
Date:   Fri Jun 24 05:21:03 2022 +0800

    Add description support to statuses, transitions and actions

diff --git a/etc/RT_Config.pm.in b/etc/RT_Config.pm.in
index 4a5b25ae27..29dfb65ebd 100644
--- a/etc/RT_Config.pm.in
+++ b/etc/RT_Config.pm.in
@@ -4394,6 +4394,39 @@ For example:
         ...
     },
 
+Besides, you may add optional descriptions, which show up on hover.
+For example:
+
+    default => {
+        ...
+        actions => [
+            ...
+            'new -> open' => { label => 'Open it', update => 'Respond', description => 'Open the ticket and reply' },
+            ...
+        ],
+        ...
+    },
+
+=head4 Additional descriptions
+
+You may optionally add descriptions to status and transitions, which show up
+on hover in lifecycle UI. The status ones also show up in Status view/edit
+columns.
+
+For example:
+
+    default => {
+        ...
+        descriptions => [
+            'new'         => 'initial',
+            'open'        => '<strong>working in progress</strong>',
+            'resolved'    => 'closed',
+            'new -> open' => 'work on the ticket',
+            ...
+        ],
+        ...
+    },
+
 =head3 Moving tickets between queues with different lifecycles
 
 Unless there is an explicit mapping between statuses in two different
diff --git a/lib/RT/Interface/Web/MenuBuilder.pm b/lib/RT/Interface/Web/MenuBuilder.pm
index 7260a75c78..17f15a4a4f 100644
--- a/lib/RT/Interface/Web/MenuBuilder.pm
+++ b/lib/RT/Interface/Web/MenuBuilder.pm
@@ -452,7 +452,19 @@ sub BuildMainNav {
                         id            => $id,
                     );
                     my $key = $info->{'label'} || ucfirst($next);
-                    $actions->child( $key => title => loc( $key ), path => $url);
+                    $actions->child(
+                        $key       => title => loc($key),
+                        path       => $url,
+                        attributes => {
+                            $info->{description}
+                            ? (
+                                'data-toggle'         => 'tooltip',
+                                'data-original-title' => loc( $info->{description} ),
+                                alt                   => loc( $info->{description} ),
+                                )
+                            : (),
+                        }
+                    );
                 }
 
                 my ($can_take, $tmsg) = $obj->CurrentUserCanSetOwner( Type => 'Take' );
@@ -1036,6 +1048,13 @@ sub _BuildAssetMenuActionSubmenu {
             attributes  => {
                 'data-current-status'   => $status,
                 'data-next-status'      => $next,
+                $action->{description}
+                ? (
+                    'data-toggle'         => 'tooltip',
+                    'data-original-title' => loc( $action->{description} ),
+                    alt                   => loc( $action->{description} ),
+                    )
+                : (),
             },
         );
     }
diff --git a/lib/RT/Lifecycle.pm b/lib/RT/Lifecycle.pm
index bcb31172fc..314a0d8920 100644
--- a/lib/RT/Lifecycle.pm
+++ b/lib/RT/Lifecycle.pm
@@ -734,6 +734,19 @@ sub FillCache {
                   from => ($lifecycle->{canonical_case}{lc $from} || lc $from),
                   to   => ($lifecycle->{canonical_case}{lc $to}   || lc $to),   };
         }
+
+        for my $item (keys %{ $lifecycle->{descriptions} || {} }) {
+            my $key;
+            if ( $item =~ /(.+?)\s*->\s*(.+)/ ) {
+                $key = lc($1) . ' -> ' . lc($2);
+            }
+            else {
+                $key = lc $item;
+            }
+
+            $lifecycle->{descriptions}{$key}
+                = HTML::Mason::Commands::ScrubHTML( delete $lifecycle->{descriptions}{$item} );
+        }
     }
 
     my ( $ret, @warnings ) = $self->ValidateLifecycleMaps();
@@ -1142,4 +1155,10 @@ sub UpdateLifecycleLayout {
     return 1;
 }
 
+sub Description {
+    my $self   = shift;
+    my $status = shift;
+    return $self->{data}{descriptions}{$status};
+}
+
 1;
diff --git a/share/html/Asset/Elements/ShowBasics b/share/html/Asset/Elements/ShowBasics
index c38064d5af..4df24370cf 100644
--- a/share/html/Asset/Elements/ShowBasics
+++ b/share/html/Asset/Elements/ShowBasics
@@ -77,7 +77,12 @@
     <&|/l&>Status</&>:
   </div>
   <div class="value col-9">
-    <span class="current-value"><% $AssetObj->Status || '' %></span>
+    <span class="current-value">
+      <% $AssetObj->Status || '' %>
+%     if ( my $desc = $AssetObj->LifecycleObj->Description($AssetObj->Status) ) {
+        <span class="far fa-question-circle icon-helper" data-toggle="tooltip" data-placement="top"  data-html="true" data-original-title="<% loc($desc) |n %>"></span>
+%     }
+    </span>
   </div>
 </div>
 
diff --git a/share/html/Elements/SelectStatus b/share/html/Elements/SelectStatus
index 3a78900fbd..22debc04f7 100644
--- a/share/html/Elements/SelectStatus
+++ b/share/html/Elements/SelectStatus
@@ -60,7 +60,11 @@
 %     foreach my $status (@{$statuses_by_lifecycle{$lifecycle}}) {
 %         next if ($SkipDeleted && lc $status eq 'deleted');
 %         my $selected = defined $Default && lc $status eq lc $Default ? 'selected="selected"' : '';
-<option value="<% $status %>" <% $selected |n %>><% loc($status) %></option>
+<option
+%         if ( $desc{$lifecycle}{$status} ) {
+ data-content="<% $status %> <span class='far fa-question-circle icon-helper' data-toggle='tooltip' data-html='true' data-original-title='<% $desc{$lifecycle}{$status} %>'></span>"
+%         }
+  value="<% $status %>" <% $selected |n %>><% loc($status) %></option>
 %     }
 %     if ($group_by_lifecycle) {
 </optgroup>
@@ -71,13 +75,15 @@
 ### XXX: no cover for Tools/MyDay.html
 
 my %statuses_by_lifecycle;
+my %desc;
 if ( @Statuses ) {
     $statuses_by_lifecycle{''} = \@Statuses;
 } else {
     if ( $Object ) {
         my $lifecycle = $Object->LifecycleObj;
+        my $current;
         if ($Object->_Accessible("Status", "read")) {
-            my $current = $Object->Status;
+            $current = $Object->Status;
             my @status;
             push @status, $current;
 
@@ -89,17 +95,28 @@ if ( @Statuses ) {
                 push @status, $next if $has{ $check };
             }
             $statuses_by_lifecycle{$lifecycle->Name} = \@status;
+
         } else {
             $statuses_by_lifecycle{$lifecycle->Name} = [ $lifecycle->Transitions('') ];
         }
+
+        for my $status ( @{$statuses_by_lifecycle{$lifecycle->Name}} ) {
+            $desc{ $lifecycle->Name }{$status} = loc($lifecycle->Description($status));
+        }
     }
     for my $lifecycle ( @Lifecycles ) {
         $statuses_by_lifecycle{$lifecycle->Name} ||= [ $lifecycle->Valid ];
+        for my $status ( $lifecycle->Valid ) {
+            $desc{ $lifecycle->Name }{$status} = loc( $lifecycle->Description($status) );
+        }
     }
 
     if (not keys %statuses_by_lifecycle) {
         for my $lifecycle (map { RT::Lifecycle->Load(Type => $Type, Name => $_) } RT::Lifecycle->List($Type)) {
             $statuses_by_lifecycle{$lifecycle->Name} = [ $lifecycle->Valid ];
+            for my $status ( $lifecycle->Valid ) {
+                $desc{ $lifecycle->Name }{$status} = loc( $lifecycle->Description($status) );
+            }
         }
     }
 }
@@ -107,15 +124,17 @@ if ( @Statuses ) {
 if (keys %statuses_by_lifecycle) {
     my %simplified;
     my $key = sub {
-        join "\0", sort @{$_[0]};
+        my ( $statuses, $desc ) = @_;
+        join "\0", sort @$statuses, sort map { $_ // '' } values %{ $desc || {} };
     };
     for my $name (sort keys %statuses_by_lifecycle) {
         my $matched;
         my $statuses = $statuses_by_lifecycle{$name};
         for my $simple (sort keys %simplified) {
-            if ($key->($statuses) eq $key->($simplified{$simple})) {
+            if ($key->($statuses, $desc{$name}) eq $key->($simplified{$simple}, $desc{$simple})) {
                 # Statuses are the same, join 'em!
                 $simplified{"$simple, $name"} = delete $simplified{$simple};
+                $desc{"$simple, $name"} = $desc{$simple};
                 $matched++;
                 last;
             }
diff --git a/share/html/Ticket/Elements/ShowBasics b/share/html/Ticket/Elements/ShowBasics
index b6686c7fd2..a2d3dd920e 100644
--- a/share/html/Ticket/Elements/ShowBasics
+++ b/share/html/Ticket/Elements/ShowBasics
@@ -52,7 +52,12 @@
   </div>
   <div class="status form-row">
     <div class="label col-3"><&|/l&>Status</&>:</div>
-    <div class="value col-9"><span class="current-value"><% loc($Ticket->Status) %></span></div>
+    <div class="value col-9"><span class="current-value">
+      <% loc($Ticket->Status) %>
+%     if ( my $desc = $Ticket->LifecycleObj->Description($Ticket->Status) ) {
+        <span class="far fa-question-circle icon-helper" data-toggle="tooltip" data-placement="top" data-html="true" data-original-title="<% loc($desc) |n %>"></span>
+%     }
+    </span></div>
   </div>
 % if ( !$Ticket->QueueObj->SLADisabled ) {
   <div class="sla form-row">
diff --git a/share/static/js/util.js b/share/static/js/util.js
index e5e93311e0..bd874c1d9f 100644
--- a/share/static/js/util.js
+++ b/share/static/js/util.js
@@ -1196,3 +1196,6 @@ function toggleTransactionDetails () {
 
     return false;
 }
+
+// Allow data-* attributes in select options to render tooltips(initially for status)
+jQuery.fn.selectpicker.Constructor.DEFAULTS.whiteList['*'].push(/^data-.+/);

-----------------------------------------------------------------------


hooks/post-receive
-- 
rt


More information about the rt-commit mailing list