/*
 * Decompiled with CFR 0.152.
 * 
 * Could not load the following classes:
 *  com.l7tech.gateway.common.security.rbac.EntityFolderAncestryPredicate
 *  com.l7tech.gateway.common.security.rbac.FolderPredicate
 *  com.l7tech.gateway.common.security.rbac.ObjectIdentityPredicate
 *  com.l7tech.gateway.common.security.rbac.OperationType
 *  com.l7tech.gateway.common.security.rbac.Permission
 *  com.l7tech.gateway.common.security.rbac.Role
 *  com.l7tech.gateway.common.security.rbac.Role$Tag
 *  com.l7tech.gateway.common.security.rbac.RoleAssignment
 *  com.l7tech.gateway.common.security.rbac.RoleEntityHeader
 *  com.l7tech.gateway.common.security.rbac.ScopePredicate
 *  com.l7tech.gateway.common.security.rbac.SecurityZonePredicate
 *  com.l7tech.identity.Group
 *  com.l7tech.identity.User
 *  com.l7tech.objectmodel.DeleteException
 *  com.l7tech.objectmodel.Entity
 *  com.l7tech.objectmodel.EntityHeader
 *  com.l7tech.objectmodel.EntityType
 *  com.l7tech.objectmodel.FindException
 *  com.l7tech.objectmodel.Goid
 *  com.l7tech.objectmodel.IdentityHeader
 *  com.l7tech.objectmodel.OrganizationHeader
 *  com.l7tech.objectmodel.RuleViolationUpdateException
 *  com.l7tech.objectmodel.UpdateException
 *  com.l7tech.objectmodel.imp.NamedEntityImp
 *  com.l7tech.util.Either
 *  com.l7tech.util.ExceptionUtils
 *  com.l7tech.util.Functions$UnaryThrows
 *  com.l7tech.util.Pair
 *  org.hibernate.Hibernate
 *  org.hibernate.HibernateException
 *  org.jetbrains.annotations.NotNull
 *  org.springframework.context.ApplicationListener
 *  org.springframework.orm.hibernate5.HibernateCallback
 *  org.springframework.transaction.annotation.Propagation
 *  org.springframework.transaction.annotation.Transactional
 */
package com.l7tech.server.security.rbac;

import com.l7tech.gateway.common.security.rbac.EntityFolderAncestryPredicate;
import com.l7tech.gateway.common.security.rbac.FolderPredicate;
import com.l7tech.gateway.common.security.rbac.ObjectIdentityPredicate;
import com.l7tech.gateway.common.security.rbac.OperationType;
import com.l7tech.gateway.common.security.rbac.Permission;
import com.l7tech.gateway.common.security.rbac.Role;
import com.l7tech.gateway.common.security.rbac.RoleAssignment;
import com.l7tech.gateway.common.security.rbac.RoleEntityHeader;
import com.l7tech.gateway.common.security.rbac.ScopePredicate;
import com.l7tech.gateway.common.security.rbac.SecurityZonePredicate;
import com.l7tech.identity.Group;
import com.l7tech.identity.User;
import com.l7tech.objectmodel.DeleteException;
import com.l7tech.objectmodel.Entity;
import com.l7tech.objectmodel.EntityHeader;
import com.l7tech.objectmodel.EntityType;
import com.l7tech.objectmodel.FindException;
import com.l7tech.objectmodel.Goid;
import com.l7tech.objectmodel.IdentityHeader;
import com.l7tech.objectmodel.OrganizationHeader;
import com.l7tech.objectmodel.RuleViolationUpdateException;
import com.l7tech.objectmodel.UpdateException;
import com.l7tech.objectmodel.imp.NamedEntityImp;
import com.l7tech.server.EntityFinder;
import com.l7tech.server.HibernateEntityManager;
import com.l7tech.server.security.rbac.RbacServices;
import com.l7tech.server.security.rbac.RoleManager;
import com.l7tech.server.security.rbac.RoleManagerIdentitySource;
import com.l7tech.server.security.rbac.d;
import com.l7tech.server.security.rbac.e;
import com.l7tech.server.security.rbac.f;
import com.l7tech.server.security.rbac.g;
import com.l7tech.server.security.rbac.j;
import com.l7tech.server.security.rbac.k;
import com.l7tech.server.security.rbac.l;
import com.l7tech.server.security.rbac.m;
import com.l7tech.server.security.rbac.n;
import com.l7tech.server.util.PostStartupTransactionalApplicationListener;
import com.l7tech.util.Either;
import com.l7tech.util.ExceptionUtils;
import com.l7tech.util.Functions;
import com.l7tech.util.Pair;
import java.text.MessageFormat;
import java.util.ArrayList;
import java.util.Collection;
import java.util.HashSet;
import java.util.List;
import java.util.Set;
import java.util.logging.Level;
import java.util.logging.Logger;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
import org.hibernate.Hibernate;
import org.hibernate.HibernateException;
import org.jetbrains.annotations.NotNull;
import org.springframework.context.ApplicationListener;
import org.springframework.orm.hibernate5.HibernateCallback;
import org.springframework.transaction.annotation.Propagation;
import org.springframework.transaction.annotation.Transactional;

/*
 * Exception performing whole class analysis ignored.
 */
@Transactional(propagation=Propagation.REQUIRED, rollbackFor={Throwable.class})
public class RoleManagerImpl
extends HibernateEntityManager<Role, EntityHeader>
implements RoleManager,
RbacServices,
PostStartupTransactionalApplicationListener {
    private static final Logger m;
    private static final String n;
    private static final String o;
    private static final String p;
    private RbacServices q;
    private static final String r;
    private static final String s;
    private static final String t;
    private static final String u;
    private static RoleManagerIdentitySource v;
    private static final String[] w;

    public static void setIdentitySource(RoleManagerIdentitySource roleManagerIdentitySource) {
        v = roleManagerIdentitySource;
    }

    public Class<Role> getImpClass() {
        return Role.class;
    }

    @Override
    public Class<Role> getInterfaceClass() {
        return Role.class;
    }

    @Override
    public String getTableName() {
        return w[49];
    }

    @Override
    @Transactional(readOnly=true)
    public Collection<Role> getAssignedRoles(User user) throws FindException {
        return this.a(user, false, false);
    }

    @Override
    public Collection<Role> getAssignedRoles(@NotNull Group group) throws FindException {
        try {
            if (group == null) {
                RoleManagerImpl.b(0);
            }
        }
        catch (FindException findException) {
            throw RoleManagerImpl.a((Exception)((Object)findException));
        }
        ArrayList<Role> arrayList = new ArrayList<Role>(this.a(group.getProviderId(), group.getId(), false));
        Set<IdentityHeader> set = v.getGroups(group);
        for (IdentityHeader identityHeader : set) {
            arrayList.addAll(this.a(identityHeader.getProviderGoid(), identityHeader.getStrId(), true));
        }
        return arrayList;
    }

    @Override
    public Collection<Role> getAssignedRoles(User user, boolean bl2, boolean bl3) throws FindException {
        return this.a(user, bl2, bl3);
    }

    @Override
    public Collection<Pair<Goid, String>> getExplicitRoleAssignments() {
        return (Collection)this.getHibernateTemplate().execute((HibernateCallback)new j(this));
    }

    private Collection<Role> a(Goid goid, String string, boolean bl2) throws FindException {
        try {
            return (Collection)this.getHibernateTemplate().execute((HibernateCallback)new k(this, string, goid, bl2));
        }
        catch (Exception exception) {
            throw new FindException(w[21], (Throwable)exception);
        }
    }

    private Collection<Role> a(User user, boolean bl2, boolean bl3) throws FindException {
        Set<IdentityHeader> set = v.getGroups(user, bl2);
        Either either = (Either)this.getHibernateTemplate().execute((HibernateCallback)new l(this, user, set, bl3));
        return (Collection)either.either((Functions.UnaryThrows)new e(this), (Functions.UnaryThrows)new f(this));
    }

    private Collection<Role> a(Group group) throws FindException {
        return (Collection)this.getHibernateTemplate().execute((HibernateCallback)new m(this, group));
    }

    @Override
    @Transactional(readOnly=true)
    public boolean isPermittedForEntitiesOfTypes(User user, OperationType operationType, Set<EntityType> set) throws FindException {
        return this.q.isPermittedForEntitiesOfTypes(user, operationType, set);
    }

    @Override
    @Transactional(readOnly=true)
    public boolean isPermittedForAnyEntityOfType(User user, OperationType operationType, EntityType entityType) throws FindException {
        return this.q.isPermittedForAnyEntityOfType(user, operationType, entityType);
    }

    @Override
    @Transactional(readOnly=true)
    public boolean isPermittedForSomeEntityOfType(User user, OperationType operationType, EntityType entityType) throws FindException {
        return this.q.isPermittedForSomeEntityOfType(user, operationType, entityType);
    }

    /*
     * Exception decompiling
     */
    @Override
    public void update(Role var1_1) throws UpdateException {
        /*
         * This method has failed to decompile.  When submitting a bug report, please provide this stack trace, and (if you hold appropriate legal rights) the relevant class file.
         * 
         * org.benf.cfr.reader.util.ConfusedCFRException: Started 2 blocks at once
         *     at org.benf.cfr.reader.bytecode.analysis.opgraph.Op04StructuredStatement.getStartingBlocks(Op04StructuredStatement.java:412)
         *     at org.benf.cfr.reader.bytecode.analysis.opgraph.Op04StructuredStatement.buildNestedBlocks(Op04StructuredStatement.java:487)
         *     at org.benf.cfr.reader.bytecode.analysis.opgraph.Op03SimpleStatement.createInitialStructuredBlock(Op03SimpleStatement.java:736)
         *     at org.benf.cfr.reader.bytecode.CodeAnalyser.getAnalysisInner(CodeAnalyser.java:850)
         *     at org.benf.cfr.reader.bytecode.CodeAnalyser.getAnalysisOrWrapFail(CodeAnalyser.java:278)
         *     at org.benf.cfr.reader.bytecode.CodeAnalyser.getAnalysis(CodeAnalyser.java:201)
         *     at org.benf.cfr.reader.entities.attributes.AttributeCode.analyse(AttributeCode.java:94)
         *     at org.benf.cfr.reader.entities.Method.analyse(Method.java:531)
         *     at org.benf.cfr.reader.entities.ClassFile.analyseMid(ClassFile.java:1055)
         *     at org.benf.cfr.reader.entities.ClassFile.analyseTop(ClassFile.java:942)
         *     at org.benf.cfr.reader.Driver.doJarVersionTypes(Driver.java:257)
         *     at org.benf.cfr.reader.Driver.doJar(Driver.java:139)
         *     at org.benf.cfr.reader.CfrDriverImpl.analyse(CfrDriverImpl.java:76)
         *     at org.benf.cfr.reader.Main.main(Main.java:54)
         */
        throw new IllegalStateException("Decompilation failed");
    }

    @Override
    @Transactional(readOnly=true)
    public void validateRoleAssignments() throws UpdateException {
        try {
            v.validateRoleAssignments();
        }
        catch (UpdateException updateException) {
            throw new RuleViolationUpdateException(w[2], (Throwable)updateException);
        }
    }

    @Override
    @Transactional(readOnly=true)
    public boolean isPermittedForEntity(User user, Entity entity, OperationType operationType, String string) throws FindException {
        return this.q.isPermittedForEntity(user, entity, operationType, string);
    }

    @Override
    @Transactional(readOnly=true)
    public Role findByTag(Role.Tag tag) throws FindException {
        try {
            if (tag == null) {
                throw new IllegalArgumentException(w[22]);
            }
        }
        catch (FindException findException) {
            throw RoleManagerImpl.a((Exception)((Object)findException));
        }
        Role role = null;
        String[] stringArray = w;
        List list = this.findByPropertyMaybeNull(stringArray[37], tag);
        try {
            if (list.size() > 1) {
                throw new FindException(stringArray[10] + String.valueOf(tag) + stringArray[8]);
            }
        }
        catch (FindException findException) {
            throw RoleManagerImpl.a((Exception)((Object)findException));
        }
        if (!list.isEmpty()) {
            role = (Role)list.iterator().next();
        }
        return role;
    }

    @Override
    @Transactional(readOnly=true)
    public Collection<Role> findEntitySpecificRoles(EntityType entityType, Goid goid) throws FindException {
        return (Collection)this.getHibernateTemplate().execute((HibernateCallback)new n(this, entityType, goid));
    }

    @Override
    public void deleteEntitySpecificRoles(EntityType entityType, Goid goid) throws DeleteException {
        try {
            Collection<Role> collection = this.findEntitySpecificRoles(entityType, goid);
            if (collection == null) {
                return;
            }
            for (Role role : collection) {
                String[] stringArray = w;
                m.info(stringArray[19] + String.valueOf(role.getGoid()) + stringArray[0] + role.getName() + ")");
                this.delete(role);
            }
            this.a(new HashSet<Role>(collection), entityType, goid);
        }
        catch (FindException findException) {
            throw new DeleteException(w[3], (Throwable)findException);
        }
    }

    @Override
    public void deleteEntitySpecificPermissions(@NotNull EntityType entityType, @NotNull String string) throws DeleteException {
        try {
            if (entityType == null) {
                RoleManagerImpl.b(1);
            }
        }
        catch (UpdateException updateException) {
            throw RoleManagerImpl.a((Exception)((Object)updateException));
        }
        try {
            if (string == null) {
                RoleManagerImpl.b(2);
            }
        }
        catch (UpdateException updateException) {
            throw RoleManagerImpl.a((Exception)((Object)updateException));
        }
        Set<Permission> set = this.a(entityType, string);
        for (Permission permission : set) {
            Role role = permission.getRole();
            role.getPermissions().remove(permission);
            try {
                this.update(role);
            }
            catch (UpdateException updateException) {
                String string2 = ExceptionUtils.getMessage((Throwable)updateException);
                String string3 = role.getName();
                String string4 = String.valueOf(role.getGoid());
                String[] stringArray = w;
                m.log(Level.SEVERE, stringArray[45] + string4 + stringArray[39] + string3 + stringArray[52] + string2, ExceptionUtils.getDebugException((Throwable)updateException));
            }
        }
    }

    private void a(Set<Role> set, EntityType entityType, Goid goid) throws DeleteException {
        HashSet<Permission> hashSet = new HashSet<Permission>();
        try {
            hashSet.addAll(this.a(entityType, goid));
            hashSet.addAll(this.b(entityType, goid));
            if (EntityType.FOLDER.equals((Object)entityType)) {
                hashSet.addAll(this.a(goid));
            }
        }
        catch (UpdateException updateException) {
            throw RoleManagerImpl.a((Exception)((Object)updateException));
        }
        try {
            if (EntityType.SECURITY_ZONE.equals((Object)entityType)) {
                hashSet.addAll(this.b(goid));
            }
        }
        catch (UpdateException updateException) {
            throw RoleManagerImpl.a((Exception)((Object)updateException));
        }
        HashSet<Role> hashSet2 = new HashSet<Role>();
        for (Permission permission : hashSet) {
            this.getHibernateTemplate().delete((Object)permission);
            Role role = permission.getRole();
            try {
                if (set.contains(role)) continue;
                role.getPermissions().remove(permission);
                hashSet2.add(role);
            }
            catch (UpdateException updateException) {
                throw RoleManagerImpl.a((Exception)((Object)updateException));
            }
        }
        for (Role role : hashSet2) {
            String[] stringArray;
            try {
                stringArray = w;
                m.info(stringArray[9] + String.valueOf(role.getGoid()) + stringArray[0] + role.getName() + ")");
                this.update(role);
            }
            catch (UpdateException updateException) {
                String string = ExceptionUtils.getMessage((Throwable)updateException);
                String string2 = role.getName();
                String string3 = String.valueOf(role.getGoid());
                stringArray = w;
                m.log(Level.SEVERE, stringArray[42] + string3 + stringArray[0] + string2 + stringArray[41] + string, ExceptionUtils.getDebugException((Throwable)updateException));
            }
        }
    }

    private Set<Permission> a(EntityType entityType, Goid goid) {
        return this.a(entityType, goid.toHexString());
    }

    private Set<Permission> a(EntityType entityType, String string) {
        HashSet<Permission> hashSet = new HashSet<Permission>();
        String[] stringArray = w;
        List list = this.getHibernateTemplate().findByNamedParam(t, stringArray[28], (Object)string);
        for (Object e10 : list) {
            try {
                if (!(e10 instanceof ObjectIdentityPredicate)) {
                    throw new HibernateException(w[5] + String.valueOf(e10.getClass()) + w[46]);
                }
            }
            catch (IllegalArgumentException illegalArgumentException) {
                throw RoleManagerImpl.a(illegalArgumentException);
            }
            ObjectIdentityPredicate objectIdentityPredicate = (ObjectIdentityPredicate)e10;
            try {
                if (!entityType.equals((Object)objectIdentityPredicate.getPermission().getEntityType())) continue;
                hashSet.add(objectIdentityPredicate.getPermission());
            }
            catch (IllegalArgumentException illegalArgumentException) {
                throw RoleManagerImpl.a(illegalArgumentException);
            }
        }
        return hashSet;
    }

    private Set<Permission> b(EntityType entityType, Goid goid) {
        HashSet<Permission> hashSet = new HashSet<Permission>();
        String[] stringArray = new String[2];
        String[] stringArray2 = w;
        stringArray[0] = stringArray2[48];
        stringArray[1] = stringArray2[6];
        List list = this.getHibernateTemplate().findByNamedParam(u, stringArray, new Object[]{goid.toHexString(), entityType});
        for (Object e10 : list) {
            try {
                if (!(e10 instanceof EntityFolderAncestryPredicate)) {
                    throw new HibernateException(w[63] + String.valueOf(e10.getClass()) + w[59]);
                }
            }
            catch (IllegalArgumentException illegalArgumentException) {
                throw RoleManagerImpl.a(illegalArgumentException);
            }
            EntityFolderAncestryPredicate entityFolderAncestryPredicate = (EntityFolderAncestryPredicate)e10;
            hashSet.add(entityFolderAncestryPredicate.getPermission());
        }
        return hashSet;
    }

    private Set<Permission> a(Goid goid) {
        HashSet<Permission> hashSet = new HashSet<Permission>();
        String[] stringArray = w;
        List list = this.getHibernateTemplate().findByNamedParam(s, stringArray[43], (Object)goid);
        for (Object e10 : list) {
            try {
                if (!(e10 instanceof FolderPredicate)) {
                    throw new HibernateException(w[63] + String.valueOf(e10.getClass()) + w[33]);
                }
            }
            catch (IllegalArgumentException illegalArgumentException) {
                throw RoleManagerImpl.a(illegalArgumentException);
            }
            FolderPredicate folderPredicate = (FolderPredicate)e10;
            hashSet.add(folderPredicate.getPermission());
        }
        return hashSet;
    }

    private Set<Permission> b(Goid goid) {
        HashSet<Permission> hashSet = new HashSet<Permission>();
        String[] stringArray = w;
        List list = this.getHibernateTemplate().findByNamedParam(r, stringArray[40], (Object)goid);
        for (Object e10 : list) {
            try {
                if (!(e10 instanceof ScopePredicate)) {
                    throw new HibernateException(w[63] + String.valueOf(e10.getClass()) + w[31]);
                }
            }
            catch (IllegalArgumentException illegalArgumentException) {
                throw RoleManagerImpl.a(illegalArgumentException);
            }
            ScopePredicate scopePredicate = (ScopePredicate)e10;
            hashSet.add(scopePredicate.getPermission());
        }
        return hashSet;
    }

    @Override
    public void renameEntitySpecificRoles(EntityType entityType, NamedEntityImp namedEntityImp, Pattern pattern) throws FindException, UpdateException {
        Collection<Role> collection = this.findEntitySpecificRoles(entityType, namedEntityImp.getGoid());
        try {
            if (collection == null) {
                m.warning(MessageFormat.format(w[64], namedEntityImp.getName(), entityType.getName(), namedEntityImp.getGoid()));
                return;
            }
        }
        catch (FindException findException) {
            throw RoleManagerImpl.a((Exception)((Object)findException));
        }
        for (Role role : collection) {
            String string = role.getName();
            Matcher matcher = pattern.matcher(string);
            String[] stringArray = w;
            String string2 = matcher.replaceAll(namedEntityImp.getName().replace("\\", stringArray[26]).replace("$", stringArray[58]));
            try {
                if (string2.equals(string)) continue;
                m.info(MessageFormat.format(stringArray[14], role.getName(), string2));
                role.setName(string2);
                this.update(role);
            }
            catch (FindException findException) {
                throw RoleManagerImpl.a((Exception)((Object)findException));
            }
        }
    }

    @Transactional(readOnly=true)
    private Goid a(Set<RoleAssignment> set, RoleAssignment roleAssignment) {
        Goid goid = RoleAssignment.DEFAULT_GOID;
        for (RoleAssignment roleAssignment2 : set) {
            try {
                if (!roleAssignment2.getProviderId().equals((Object)roleAssignment.getProviderId()) || !roleAssignment2.getIdentityId().equals(roleAssignment.getIdentityId())) continue;
            }
            catch (IllegalArgumentException illegalArgumentException) {
                throw RoleManagerImpl.a(illegalArgumentException);
            }
            goid = roleAssignment2.getGoid();
            break;
        }
        return goid;
    }

    @Override
    @Transactional(readOnly=true)
    public <T extends OrganizationHeader> Iterable<T> filterPermittedHeaders(User user, OperationType operationType, Iterable<T> iterable, EntityFinder entityFinder) throws FindException {
        return this.q.filterPermittedHeaders(user, operationType, iterable, entityFinder);
    }

    @Override
    public boolean isAdministrativeUser(@NotNull Pair<Goid, String> pair, @NotNull User user) throws FindException {
        try {
            if (pair == null) {
                RoleManagerImpl.b(3);
            }
        }
        catch (FindException findException) {
            throw RoleManagerImpl.a((Exception)((Object)findException));
        }
        try {
            if (user == null) {
                RoleManagerImpl.b(4);
            }
        }
        catch (FindException findException) {
            throw RoleManagerImpl.a((Exception)((Object)findException));
        }
        return this.q.isAdministrativeUser(pair, user);
    }

    @Override
    public Collection<Role> getAssignedRoles(@NotNull Pair<Goid, String> pair, @NotNull User user) throws FindException {
        try {
            if (pair == null) {
                RoleManagerImpl.b(5);
            }
        }
        catch (FindException findException) {
            throw RoleManagerImpl.a((Exception)((Object)findException));
        }
        try {
            if (user == null) {
                RoleManagerImpl.b(6);
            }
        }
        catch (FindException findException) {
            throw RoleManagerImpl.a((Exception)((Object)findException));
        }
        return this.q.getAssignedRoles(pair, user);
    }

    @Override
    public void deleteRoleAssignmentsForUser(User user) throws DeleteException {
        try {
            Collection<Role> collection = this.getAssignedRoles(user, true, false);
            for (Role role : collection) {
                role.removeAssignedUser(user);
                this.update(role);
            }
        }
        catch (FindException findException) {
            String[] stringArray = w;
            m.log(Level.INFO, stringArray[30] + user.getLogin() + stringArray[18] + String.valueOf(user.getProviderId()));
            throw new DeleteException(stringArray[51] + user.getLogin() + "'", findException.getCause());
        }
        catch (UpdateException updateException) {
            String[] stringArray = w;
            m.log(Level.INFO, stringArray[29]);
            throw new DeleteException(stringArray[47] + user.getLogin() + "'", updateException.getCause());
        }
    }

    @Override
    public void deleteRoleAssignmentsForGroup(Group group) throws DeleteException {
        try {
            Collection<Role> collection = this.a(group);
            for (Role role : collection) {
                role.removeAssignedGroup(group);
                this.update(role);
            }
        }
        catch (FindException findException) {
            String[] stringArray = w;
            m.log(Level.INFO, stringArray[54] + group.getName() + stringArray[24] + String.valueOf(group.getProviderId()));
            throw new DeleteException(stringArray[44] + group.getName() + "'", findException.getCause());
        }
        catch (UpdateException updateException) {
            String[] stringArray = w;
            m.log(Level.INFO, stringArray[20]);
            throw new DeleteException(stringArray[16] + group.getName() + "'", updateException.getCause());
        }
    }

    public void setRbacServices(RbacServices rbacServices) {
        this.q = rbacServices;
    }

    protected void initDao() throws Exception {
        try {
            super.initDao();
            if (this.q == null) {
                throw new IllegalStateException(w[62]);
            }
        }
        catch (Exception exception) {
            throw RoleManagerImpl.a(exception);
        }
    }

    @NotNull
    public ApplicationListener getListener() {
        return new g(this);
    }

    @Override
    protected EntityHeader newHeader(Role role) {
        return new RoleEntityHeader(role.getGoid(), role.getName(), role.getDescription(), Integer.valueOf(role.getVersion()), role.isUserCreated().booleanValue(), role.getEntityGoid(), role.getEntityType());
    }

    @Override
    protected void initializeLazilyLoaded(Role role) {
        this.a(role);
    }

    private void a(Role role) {
        block4: {
            try {
                try {
                    if (role == null || Hibernate.isInitialized((Object)role.getPermissions())) break block4;
                }
                catch (IllegalArgumentException illegalArgumentException) {
                    throw RoleManagerImpl.a(illegalArgumentException);
                }
                Hibernate.initialize((Object)role.getPermissions());
            }
            catch (IllegalArgumentException illegalArgumentException) {
                throw RoleManagerImpl.a(illegalArgumentException);
            }
        }
    }

    /*
     * Unable to fully structure code
     */
    static {
        block10: {
            block9: {
                var5 = new String[65];
                var3_1 = 0;
                var2_2 = "Hu!\u000e/\u0013\u001c{%,\t>#\u0001)2*\u0001>\u001d\u0005>\b!\u00019\\\u00185w-\u0004<\u000f\u0002{Z))\\\u001d>6=\u001c}\u0013\u001f>w+\u0006<\u001e\u001d>3n=.\u0019\u0003{ '\u001c5\\\u001f4w+\u0010-\u0015\u0003\"w#\u001d.\bQ:;9\t$\u000fQ92n\t.\u000f\u0018<9+\f}\b\u001e{#&\r}=\u00156> \u0001.\b\u0003:#!\u001a}\u000e\u001e72#+2\t\u001d?9i\u001c}\u001a\u001853n:2\u0010\u0014(w(\u0007/\\\u00053>=H\u0018\u0012\u00052#70H*\u0014\u0014)2n\u001a?\u001d\u0012\u0004'<\r9\u0015\u0012:#+7;\u0013\u001d?2<F;\u0013\u001d?2<F:\u0013\u0018?wsHg\u001b\u001e23$/2\bQ.9+\u0010-\u0019\u0012/2*H/\u0019\u0005.% H+\u001d\u001d.2n\u001c$\f\u0014{8(H\n\r3\b\u0018/.\u001a\u0011-\u0019pH*\u0014\u0014)2n\u001a?\u001d\u0012\u0004'<\r9\u0015\u0012:#+78\u0012\u00052#7\u000e2\u0010\u0015>%`\r3\b\u0018/.\u0007\f}AQa2 \u001c4\b\b\u00123n\t3\u0018Q)5/\u000b\u0002\f\u0003>3'\u000b<\b\u0014\u00042 \u001c4\b\b=8\"\f8\u000e_>9:\u0001)\u0005%\"'+H`\\K>9:\u0001)\u0005%\"'+\u0002Os):8\u0011\u001e-> \u000f}\u0013\u0013(8\"\r)\u0019Q+2<\u00054\u000f\u000228 \u001b}\u001a\u00034:n:2\u0010\u0014{t'.2\t\u001f?w#\u001d1\b\u0018+;+H0\u001d\u00058?'\u0006:\\\u00034;+\u001b}\u001a\u001e)w:\t:\\V=H*\u0014\u0014)2n\u001a?\u001d\u0012\u0004'<\r9\u0015\u0012:#+7.\u0019\u0012.%'\u001c$#\u000b49+F/\u0019\u0000.><\r9&\u001e52`\u000f2\u0015\u0015{jnR:\u0013\u0018?>)/\u001b\u000462 \u001c}\u001a\u001e)w\u000e&2\b?.;\"H-\u001d\u0003::+\u001c8\u000eQ|r=O}\u0013\u0017{r=Fx\u000fQ6\"=\u001c}\u0012\u001e/w,\r}\u0012\u00047;Z))\\\u001d>6=\u001c}\u0013\u001f>w+\u0006<\u001e\u001d>3n=.\u0019\u0003{ '\u001c5\\\u001f4w+\u0010-\u0015\u0003\"w#\u001d.\bQ:;9\t$\u000fQ92n\t.\u000f\u0018<9+\f}\b\u001e{#&\r}=\u00156> \u0001.\b\u0003:#!\u001a}\u000e\u001e72,=-\u0018\u0010/> \u000f}[V g3Oz\\#4;+H*\u0015\u00053w \r*\\\u001f::+R}[V f3Oz$\u000e/\u0013\u001c{%,\t>#\u0001)2*\u0001>\u001d\u0005>\b(\u00071\u0018\u0014)w'\u0006}\u001f\u001d:$=H,.<\u0015\u001d>3n\u001c2\\\u0015>;+\u001c8\\\u00034;+H<\u000f\u000220 \u00058\u0012\u0005{1!\u001a}\u001b\u00034\">Hz\u0010\u000f8\b0($'\u000f3\u0019\u0015\t8\"\r.\u000fO}\u001a\u001e)w>\u001a2\n\u0018?2<H\u0018,8\u0010\u0014/> \u000f}\u0013\u0013(8\"\r)\u0019Q\t8\"\r}_1.<\u0015\u001d>3n\u001c2\\\u0004+3/\u001c8\\\u00034;+H;\u0013\u0003{6=\u001b4\u001b\u001f>3n\u001a2\u0010\u0014(w*\r1\u0019\u000528  -/\u000e\u001e)w<\r)\u000e\u0018>!'\u0006:\\\u00034;+\u001b}\u001a\u001e)w)\u001a2\t\u0001\u0014\u001c<\u001bQ6\"=\u001c}\u0012\u001e/w,\r}\u0012\u00047;\n\u00019\u0019\u001f/>:\u0011\u0014\u0018\u000fO}\u001a\u001e)w>\u001a2\n\u0018?2<H*\u000e/\u0013\u001c{%,\t>#\u0001)2*\u0001>\u001d\u0005>\b+\u0006)\u0015\u0005\"1!\u00049\u0019\u0003{> H>\u0010\u0010($n\u00024\u0001\u0005\u000f/\u0013\u0004+\u000e\u001c<\u000e\u0016>#\u000b\u0006)\u0015\u0005\"\u001e*1.<\u0015\u001d>3n\u001c2\\\u0004+3/\u001c8\\\u00034;+H;\u0013\u0003{6=\u001b4\u001b\u001f>3n\u001a2\u0010\u0014(w*\r1\u0019\u000528 (.<\u0015\u001d>3n\u001c2\\\u001729*H<\u000f\u000220 \r9\\\u00034;+\u001b}\u001a\u001e)w;\u001b8\u000eQ|5H*\u0014\u001872n\u000e4\u0012\u001529)H;\u0013\u001d?2<H-\u000e\u0014?>-\t)\u0019\u0002{57H.\u0019\u0012.%'\u001c$\\\u000b49+H2\u0015\u0015\n\u0018/\u0013\u000723+\u001a\u0014\u0018.H*\u0014\u001872n\u000e4\u0012\u001529)H;\u0013\u001d?2<H-\u000e\u0014?>-\t)\u0019\u0002{57H;\u0013\u001d?2<H2\u0015\u0015\b\r3\b\u0018/.\u0007\f\n\r3\b\u0018/.\u001a\u0011-\u0019/\u000b2\u0011^7`:\r>\u0014^(2<\u001e8\u000e^(2-\u001d/\u0015\u0005\"x<\n<\u001f^\t8\"\r\u0010\u001d\u001f:0+\u001a\u0014\u0011\u00017\u0003\u001c<\u001b+\u000e/\u0013\u001c{%,\t>#\u0001)2*\u0001>\u001d\u0005>\b=\r>\t\u00032#77'\u0013\u001f>w'\u0006}\u001f\u001d:$=H\u0002Hu\u0004\u000f2\u0015\u0015\u0003Ag\\1=3\u001d\u001372n\u001c2\\\u0003>:!\u001e8\\\u001e9$!\u00048\b\u0014{'+\u001a0\u0015\u0002(>!\u0006.\\\u0017)8#H\u000f\u0013\u001d>wm\u0004\u000f2\u0015\u0015,.<\u0015\u001d>3n\u001c2\\\u0015>;+\u001c8\\\u00034;+H<\u000f\u000220 \u00058\u0012\u0005{1!\u001a}\u001b\u00034\">Hz1=3\u001d\u001372n\u001c2\\\u0003>:!\u001e8\\\u001e9$!\u00048\b\u0014{'+\u001a0\u0015\u0002(>!\u0006.\\\u0017)8#H\u000f\u0013\u001d>wm6H*\u0014\u001872n\u000e4\u0012\u001529)H2\u001e\u001b>4:H4\u0018\u00145#'\u001c$\\\u0001)2*\u0001>\u001d\u0005>$n\n$\\\u00145#'\u001c$\\\u0018?+.<\u0015\u001d>3n\u001c2\\\u0015>;+\u001c8\\\u00034;+H<\u000f\u000220 \u00058\u0012\u0005{1!\u001a}\t\u0002>%nO\b\r3\b\u0018/.\u0007\f\t\u001a?\u001d\u0012\u0004%!\u00048\u0011\u0018/\u0013\u000723+\u001a\u001c\u0012\u0015\u000e$+\u001a\u0014\u0018+.<\u0015\u001d>3n\u001c2\\\u0015>;+\u001c8\\\u00034;+H<\u000f\u000220 \u00058\u0012\u0005{1!\u001a}\t\u0002>%nO\u0003Ag\\:H*\u0014\u0014)2n\u001a?\u001d\u0012\u0004'<\r9\u0015\u0012:#+72\u0015\u0015u#/\u001a:\u0019\u0005\u001e9:\u0001)\u00058?wsHg\b\u0010)0+\u001c\u0018\u0012\u00052#7!9).<\u0015\u001d>3n\u001c2\\\u001729*H<\u000f\u000220 \r9\\\u00034;+\u001b}\u001a\u001e)w)\u001a2\t\u0001{p\u0004\u001d.\u0019\u0003,.4\u0012\u0015{2<\u001a2\u000eQ,?+\u0006}\u0011\u0014)0'\u0006:\\\u0010($'\u000f3\u0011\u00145#=H;\u0013\u0003{%!\u00048\u0014\u0001.=\u00156> \u0001.\b\u0003:#'\u001e8)\u0002>%\u00024yHH*\u0014\u001872n\u000e4\u0012\u001529)H8\u0012\u00052#7H;\u0013\u001d?2<H<\u0012\u0012>$:\u001a$\\\u0001)2*\u0001>\u001d\u0005>$n\n$\\\u00145#'\u001c$\\\u00164>*H<\u0012\u0015{#7\u00188\u001f\f8\u0010\u0014/2\u000b\u0006)\u0015\u0005\"\u0004>\r>\u0015\u001724\u001e\r/\u0011\u0018($'\u00073\u000f\u0005\r)\u0005\u0001>!\u001a?\u001d\u0012\b2<\u001e4\u001f\u0014(w-\u00070\f\u001e52 \u001c}\u0015\u0002{:'\u001b.\u0015\u001f<";
                var4_3 = "Hu!\u000e/\u0013\u001c{%,\t>#\u0001)2*\u0001>\u001d\u0005>\b!\u00019\\\u00185w-\u0004<\u000f\u0002{Z))\\\u001d>6=\u001c}\u0013\u001f>w+\u0006<\u001e\u001d>3n=.\u0019\u0003{ '\u001c5\\\u001f4w+\u0010-\u0015\u0003\"w#\u001d.\bQ:;9\t$\u000fQ92n\t.\u000f\u0018<9+\f}\b\u001e{#&\r}=\u00156> \u0001.\b\u0003:#!\u001a}\u000e\u001e72#+2\t\u001d?9i\u001c}\u001a\u001853n:2\u0010\u0014(w(\u0007/\\\u00053>=H\u0018\u0012\u00052#70H*\u0014\u0014)2n\u001a?\u001d\u0012\u0004'<\r9\u0015\u0012:#+7;\u0013\u001d?2<F;\u0013\u001d?2<F:\u0013\u0018?wsHg\u001b\u001e23$/2\bQ.9+\u0010-\u0019\u0012/2*H/\u0019\u0005.% H+\u001d\u001d.2n\u001c$\f\u0014{8(H\n\r3\b\u0018/.\u001a\u0011-\u0019pH*\u0014\u0014)2n\u001a?\u001d\u0012\u0004'<\r9\u0015\u0012:#+78\u0012\u00052#7\u000e2\u0010\u0015>%`\r3\b\u0018/.\u0007\f}AQa2 \u001c4\b\b\u00123n\t3\u0018Q)5/\u000b\u0002\f\u0003>3'\u000b<\b\u0014\u00042 \u001c4\b\b=8\"\f8\u000e_>9:\u0001)\u0005%\"'+H`\\K>9:\u0001)\u0005%\"'+\u0002Os):8\u0011\u001e-> \u000f}\u0013\u0013(8\"\r)\u0019Q+2<\u00054\u000f\u000228 \u001b}\u001a\u00034:n:2\u0010\u0014{t'.2\t\u001f?w#\u001d1\b\u0018+;+H0\u001d\u00058?'\u0006:\\\u00034;+\u001b}\u001a\u001e)w:\t:\\V=H*\u0014\u0014)2n\u001a?\u001d\u0012\u0004'<\r9\u0015\u0012:#+7.\u0019\u0012.%'\u001c$#\u000b49+F/\u0019\u0000.><\r9&\u001e52`\u000f2\u0015\u0015{jnR:\u0013\u0018?>)/\u001b\u000462 \u001c}\u001a\u001e)w\u000e&2\b?.;\"H-\u001d\u0003::+\u001c8\u000eQ|r=O}\u0013\u0017{r=Fx\u000fQ6\"=\u001c}\u0012\u001e/w,\r}\u0012\u00047;Z))\\\u001d>6=\u001c}\u0013\u001f>w+\u0006<\u001e\u001d>3n=.\u0019\u0003{ '\u001c5\\\u001f4w+\u0010-\u0015\u0003\"w#\u001d.\bQ:;9\t$\u000fQ92n\t.\u000f\u0018<9+\f}\b\u001e{#&\r}=\u00156> \u0001.\b\u0003:#!\u001a}\u000e\u001e72,=-\u0018\u0010/> \u000f}[V g3Oz\\#4;+H*\u0015\u00053w \r*\\\u001f::+R}[V f3Oz$\u000e/\u0013\u001c{%,\t>#\u0001)2*\u0001>\u001d\u0005>\b(\u00071\u0018\u0014)w'\u0006}\u001f\u001d:$=H,.<\u0015\u001d>3n\u001c2\\\u0015>;+\u001c8\\\u00034;+H<\u000f\u000220 \u00058\u0012\u0005{1!\u001a}\u001b\u00034\">Hz\u0010\u000f8\b0($'\u000f3\u0019\u0015\t8\"\r.\u000fO}\u001a\u001e)w>\u001a2\n\u0018?2<H\u0018,8\u0010\u0014/> \u000f}\u0013\u0013(8\"\r)\u0019Q\t8\"\r}_1.<\u0015\u001d>3n\u001c2\\\u0004+3/\u001c8\\\u00034;+H;\u0013\u0003{6=\u001b4\u001b\u001f>3n\u001a2\u0010\u0014(w*\r1\u0019\u000528  -/\u000e\u001e)w<\r)\u000e\u0018>!'\u0006:\\\u00034;+\u001b}\u001a\u001e)w)\u001a2\t\u0001\u0014\u001c<\u001bQ6\"=\u001c}\u0012\u001e/w,\r}\u0012\u00047;\n\u00019\u0019\u001f/>:\u0011\u0014\u0018\u000fO}\u001a\u001e)w>\u001a2\n\u0018?2<H*\u000e/\u0013\u001c{%,\t>#\u0001)2*\u0001>\u001d\u0005>\b+\u0006)\u0015\u0005\"1!\u00049\u0019\u0003{> H>\u0010\u0010($n\u00024\u0001\u0005\u000f/\u0013\u0004+\u000e\u001c<\u000e\u0016>#\u000b\u0006)\u0015\u0005\"\u001e*1.<\u0015\u001d>3n\u001c2\\\u0004+3/\u001c8\\\u00034;+H;\u0013\u0003{6=\u001b4\u001b\u001f>3n\u001a2\u0010\u0014(w*\r1\u0019\u000528 (.<\u0015\u001d>3n\u001c2\\\u001729*H<\u000f\u000220 \r9\\\u00034;+\u001b}\u001a\u001e)w;\u001b8\u000eQ|5H*\u0014\u001872n\u000e4\u0012\u001529)H;\u0013\u001d?2<H-\u000e\u0014?>-\t)\u0019\u0002{57H.\u0019\u0012.%'\u001c$\\\u000b49+H2\u0015\u0015\n\u0018/\u0013\u000723+\u001a\u0014\u0018.H*\u0014\u001872n\u000e4\u0012\u001529)H;\u0013\u001d?2<H-\u000e\u0014?>-\t)\u0019\u0002{57H;\u0013\u001d?2<H2\u0015\u0015\b\r3\b\u0018/.\u0007\f\n\r3\b\u0018/.\u001a\u0011-\u0019/\u000b2\u0011^7`:\r>\u0014^(2<\u001e8\u000e^(2-\u001d/\u0015\u0005\"x<\n<\u001f^\t8\"\r\u0010\u001d\u001f:0+\u001a\u0014\u0011\u00017\u0003\u001c<\u001b+\u000e/\u0013\u001c{%,\t>#\u0001)2*\u0001>\u001d\u0005>\b=\r>\t\u00032#77'\u0013\u001f>w'\u0006}\u001f\u001d:$=H\u0002Hu\u0004\u000f2\u0015\u0015\u0003Ag\\1=3\u001d\u001372n\u001c2\\\u0003>:!\u001e8\\\u001e9$!\u00048\b\u0014{'+\u001a0\u0015\u0002(>!\u0006.\\\u0017)8#H\u000f\u0013\u001d>wm\u0004\u000f2\u0015\u0015,.<\u0015\u001d>3n\u001c2\\\u0015>;+\u001c8\\\u00034;+H<\u000f\u000220 \u00058\u0012\u0005{1!\u001a}\u001b\u00034\">Hz1=3\u001d\u001372n\u001c2\\\u0003>:!\u001e8\\\u001e9$!\u00048\b\u0014{'+\u001a0\u0015\u0002(>!\u0006.\\\u0017)8#H\u000f\u0013\u001d>wm6H*\u0014\u001872n\u000e4\u0012\u001529)H2\u001e\u001b>4:H4\u0018\u00145#'\u001c$\\\u0001)2*\u0001>\u001d\u0005>$n\n$\\\u00145#'\u001c$\\\u0018?+.<\u0015\u001d>3n\u001c2\\\u0015>;+\u001c8\\\u00034;+H<\u000f\u000220 \u00058\u0012\u0005{1!\u001a}\t\u0002>%nO\b\r3\b\u0018/.\u0007\f\t\u001a?\u001d\u0012\u0004%!\u00048\u0011\u0018/\u0013\u000723+\u001a\u001c\u0012\u0015\u000e$+\u001a\u0014\u0018+.<\u0015\u001d>3n\u001c2\\\u0015>;+\u001c8\\\u00034;+H<\u000f\u000220 \u00058\u0012\u0005{1!\u001a}\t\u0002>%nO\u0003Ag\\:H*\u0014\u0014)2n\u001a?\u001d\u0012\u0004'<\r9\u0015\u0012:#+72\u0015\u0015u#/\u001a:\u0019\u0005\u001e9:\u0001)\u00058?wsHg\b\u0010)0+\u001c\u0018\u0012\u00052#7!9).<\u0015\u001d>3n\u001c2\\\u001729*H<\u000f\u000220 \r9\\\u00034;+\u001b}\u001a\u001e)w)\u001a2\t\u0001{p\u0004\u001d.\u0019\u0003,.4\u0012\u0015{2<\u001a2\u000eQ,?+\u0006}\u0011\u0014)0'\u0006:\\\u0010($'\u000f3\u0011\u00145#=H;\u0013\u0003{%!\u00048\u0014\u0001.=\u00156> \u0001.\b\u0003:#'\u001e8)\u0002>%\u00024yHH*\u0014\u001872n\u000e4\u0012\u001529)H8\u0012\u00052#7H;\u0013\u001d?2<H<\u0012\u0012>$:\u001a$\\\u0001)2*\u0001>\u001d\u0005>$n\n$\\\u00145#'\u001c$\\\u00164>*H<\u0012\u0015{#7\u00188\u001f\f8\u0010\u0014/2\u000b\u0006)\u0015\u0005\"\u0004>\r>\u0015\u001724\u001e\r/\u0011\u0018($'\u00073\u000f\u0005\r)\u0005\u0001>!\u001a?\u001d\u0012\b2<\u001e4\u001f\u0014(w-\u00070\f\u001e52 \u001c}\u0015\u0002{:'\u001b.\u0015\u001f<".length();
                var1_4 = 2;
                var0_5 = -1;
lbl7:
                // 2 sources

                while (true) {
                    v0 = 6;
                    v1 = ++var0_5;
                    v2 = var2_2.substring(v1, v1 + var1_4);
                    v3 = -1;
                    break block9;
                    break;
                }
lbl13:
                // 1 sources

                while (true) {
                    var5[var3_1++] = RoleManagerImpl.b(v0, RoleManagerImpl.a(v2));
                    if ((var0_5 += var1_4) < var4_3) {
                        var1_4 = var2_2.charAt(var0_5);
                        ** continue;
                    }
                    var2_2 = "/2\bQ.9+\u0010-\u0019\u0012/2*H/\u0019\u0005.% H+\u001d\u001d.2n\u001c$\f\u0014{8(H8&2\\\u00145#'\u001c$Q\u0002+2-\u0001;\u0015\u0012{%!\u00048\\\u0006:$n\u000e2\t\u001f?w(\u0007/\\\nk*nOz\u0007@&piHu_\ni*g";
                    var4_3 = "/2\bQ.9+\u0010-\u0019\u0012/2*H/\u0019\u0005.% H+\u001d\u001d.2n\u001c$\f\u0014{8(H8&2\\\u00145#'\u001c$Q\u0002+2-\u0001;\u0015\u0012{%!\u00048\\\u0006:$n\u000e2\t\u001f?w(\u0007/\\\nk*nOz\u0007@&piHu_\ni*g".length();
                    var1_4 = 36;
                    var0_5 = -1;
lbl22:
                    // 2 sources

                    while (true) {
                        v0 = 6;
                        v4 = ++var0_5;
                        v2 = var2_2.substring(v4, v4 + var1_4);
                        v3 = 0;
                        break block9;
                        break;
                    }
                    break;
                }
lbl28:
                // 1 sources

                while (true) {
                    var5[var3_1++] = RoleManagerImpl.b(v0, RoleManagerImpl.a(v2));
                    if ((var0_5 += var1_4) < var4_3) {
                        var1_4 = var2_2.charAt(var0_5);
                        ** continue;
                    }
                    break block10;
                    break;
                }
            }
            switch (v3) {
                default: {
                    ** continue;
                }
                ** case 0:
lbl39:
                // 1 sources

                ** continue;
            }
        }
        RoleManagerImpl.w = var5;
        RoleManagerImpl.n = RoleManagerImpl.w[23];
        RoleManagerImpl.o = RoleManagerImpl.w[32];
        RoleManagerImpl.p = RoleManagerImpl.w[35];
        RoleManagerImpl.m = Logger.getLogger(RoleManagerImpl.class.getName());
        var0_6 = RoleManagerImpl.w;
        RoleManagerImpl.r = var0_6[38] + SecurityZonePredicate.class.getName() + var0_6[11];
        RoleManagerImpl.s = var0_6[15] + FolderPredicate.class.getName() + var0_6[4];
        RoleManagerImpl.t = var0_6[1] + ObjectIdentityPredicate.class.getName() + var0_6[53];
        RoleManagerImpl.u = var0_6[25] + EntityFolderAncestryPredicate.class.getName() + var0_6[7];
        RoleManagerImpl.v = new d();
    }

    /*
     * Exception decompiling
     */
    private static /* synthetic */ void b(int var0) {
        /*
         * This method has failed to decompile.  When submitting a bug report, please provide this stack trace, and (if you hold appropriate legal rights) the relevant class file.
         * 
         * org.benf.cfr.reader.util.ConfusedCFRException: Tried to end blocks [0[TRYBLOCK]], but top level block is 2[SWITCH]
         *     at org.benf.cfr.reader.bytecode.analysis.opgraph.Op04StructuredStatement.processEndingBlocks(Op04StructuredStatement.java:435)
         *     at org.benf.cfr.reader.bytecode.analysis.opgraph.Op04StructuredStatement.buildNestedBlocks(Op04StructuredStatement.java:484)
         *     at org.benf.cfr.reader.bytecode.analysis.opgraph.Op03SimpleStatement.createInitialStructuredBlock(Op03SimpleStatement.java:736)
         *     at org.benf.cfr.reader.bytecode.CodeAnalyser.getAnalysisInner(CodeAnalyser.java:850)
         *     at org.benf.cfr.reader.bytecode.CodeAnalyser.getAnalysisOrWrapFail(CodeAnalyser.java:278)
         *     at org.benf.cfr.reader.bytecode.CodeAnalyser.getAnalysis(CodeAnalyser.java:201)
         *     at org.benf.cfr.reader.entities.attributes.AttributeCode.analyse(AttributeCode.java:94)
         *     at org.benf.cfr.reader.entities.Method.analyse(Method.java:531)
         *     at org.benf.cfr.reader.entities.ClassFile.analyseMid(ClassFile.java:1050)
         *     at org.benf.cfr.reader.entities.ClassFile.analyseTop(ClassFile.java:942)
         *     at org.benf.cfr.reader.Driver.doJarVersionTypes(Driver.java:257)
         *     at org.benf.cfr.reader.Driver.doJar(Driver.java:139)
         *     at org.benf.cfr.reader.CfrDriverImpl.analyse(CfrDriverImpl.java:76)
         *     at org.benf.cfr.reader.Main.main(Main.java:54)
         */
        throw new IllegalStateException("Decompilation failed");
    }

    private static Exception a(Exception exception) {
        return exception;
    }

    private static char[] a(String string) {
        char[] cArray = string.toCharArray();
        if (cArray.length < 2) {
            cArray = cArray;
            cArray[0] = (char)(cArray[0] ^ 0x48);
        }
        return cArray;
    }

    /*
     * Handled impossible loop by duplicating code
     * Enabled aggressive block sorting
     */
    private static String b(int n2, char[] cArray) {
        char[] cArray2;
        block11: {
            int n3;
            int n4;
            int n5;
            block10: {
                n5 = n2;
                cArray2 = cArray;
                n4 = cArray.length;
                n3 = 0;
                if (!true) break block10;
                n4 = n4;
                if (n4 <= n3) break block11;
            }
            do {
                n5 = n5;
                cArray2 = cArray2;
                int n6 = n3;
                cArray2[n6] = (char)(cArray2[n6] ^ (n5 ^ (switch (n3 % 7) {
                    case 0 -> 110;
                    case 1 -> 91;
                    case 2 -> 122;
                    case 3 -> 119;
                    case 4 -> 93;
                    case 5 -> 81;
                    default -> 72;
                })));
                ++n3;
                n4 = n4;
            } while (n4 > n3);
        }
        return new String(cArray2).intern();
    }
}

