/*
 * Decompiled with CFR 0.152.
 * 
 * Could not load the following classes:
 *  com.l7tech.gateway.common.audit.AssertionMessages
 *  com.l7tech.gateway.common.audit.AuditDetailMessage
 *  com.l7tech.gateway.common.audit.AuditFactory
 *  com.l7tech.objectmodel.FindException
 *  com.l7tech.objectmodel.Goid
 *  com.l7tech.objectmodel.encass.EncapsulatedAssertionArgumentDescriptor
 *  com.l7tech.objectmodel.encass.EncapsulatedAssertionConfig
 *  com.l7tech.objectmodel.encass.EncapsulatedAssertionResultDescriptor
 *  com.l7tech.objectmodel.encass.EncapsulatedAssertionStringEncoding
 *  com.l7tech.policy.Policy
 *  com.l7tech.policy.assertion.AssertionStatus
 *  com.l7tech.policy.assertion.EncapsulatedAssertion
 *  com.l7tech.policy.assertion.PolicyAssertionException
 *  com.l7tech.policy.variable.DataType
 *  com.l7tech.policy.variable.NoSuchVariableException
 *  com.l7tech.util.Config
 *  com.l7tech.util.ConfigFactory
 *  com.l7tech.util.Either
 *  com.l7tech.util.ExceptionUtils
 *  com.l7tech.util.ResourceUtils
 *  jakarta.inject.Inject
 *  jakarta.inject.Named
 *  org.jetbrains.annotations.NotNull
 *  org.jetbrains.annotations.Nullable
 *  org.springframework.beans.factory.InitializingBean
 *  org.springframework.context.ApplicationListener
 */
package com.l7tech.server.policy.assertion;

import com.l7tech.gateway.common.audit.AssertionMessages;
import com.l7tech.gateway.common.audit.AuditDetailMessage;
import com.l7tech.gateway.common.audit.AuditFactory;
import com.l7tech.objectmodel.FindException;
import com.l7tech.objectmodel.Goid;
import com.l7tech.objectmodel.encass.EncapsulatedAssertionArgumentDescriptor;
import com.l7tech.objectmodel.encass.EncapsulatedAssertionConfig;
import com.l7tech.objectmodel.encass.EncapsulatedAssertionResultDescriptor;
import com.l7tech.objectmodel.encass.EncapsulatedAssertionStringEncoding;
import com.l7tech.policy.Policy;
import com.l7tech.policy.assertion.AssertionStatus;
import com.l7tech.policy.assertion.EncapsulatedAssertion;
import com.l7tech.policy.assertion.PolicyAssertionException;
import com.l7tech.policy.variable.DataType;
import com.l7tech.policy.variable.NoSuchVariableException;
import com.l7tech.server.message.HasOutputVariables;
import com.l7tech.server.message.PolicyEnforcementContext;
import com.l7tech.server.message.PolicyEnforcementContextFactory;
import com.l7tech.server.message.ShadowsParentVariables;
import com.l7tech.server.policy.EncapsulatedAssertionConfigManager;
import com.l7tech.server.policy.PolicyCache;
import com.l7tech.server.policy.ServerPolicyHandle;
import com.l7tech.server.policy.assertion.AbstractServerAssertion;
import com.l7tech.server.policy.assertion.AssertionStatusException;
import com.l7tech.server.policy.assertion.ak;
import com.l7tech.server.policy.assertion.q;
import com.l7tech.server.policy.variable.ExpandVariables;
import com.l7tech.server.trace.TracePolicyEvaluator;
import com.l7tech.server.util.ApplicationEventProxy;
import com.l7tech.util.Config;
import com.l7tech.util.ConfigFactory;
import com.l7tech.util.Either;
import com.l7tech.util.ExceptionUtils;
import com.l7tech.util.ResourceUtils;
import jakarta.inject.Inject;
import jakarta.inject.Named;
import java.io.Closeable;
import java.io.IOException;
import java.util.Map;
import java.util.concurrent.atomic.AtomicReference;
import java.util.logging.Level;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
import org.springframework.beans.factory.InitializingBean;
import org.springframework.context.ApplicationListener;

/*
 * Exception performing whole class analysis ignored.
 */
public class ServerEncapsulatedAssertion
extends AbstractServerAssertion<EncapsulatedAssertion>
implements InitializingBean {
    @Inject
    @Named(value="encapsulatedAssertionConfigManager")
    private EncapsulatedAssertionConfigManager encapsulatedAssertionConfigManager;
    @Inject
    @Named(value="applicationEventProxy")
    private ApplicationEventProxy applicationEventProxy;
    @Inject
    private PolicyCache policyCache;
    @Inject
    private Config config;
    private final AtomicReference<Either<String, EncapsulatedAssertionConfig>> d;
    private final AtomicReference<String[]> e;
    private ApplicationListener f;
    private final ThreadLocal<Boolean> g;
    private static final String[] h;

    public ServerEncapsulatedAssertion(@NotNull EncapsulatedAssertion encapsulatedAssertion) {
        if (encapsulatedAssertion == null) {
            ServerEncapsulatedAssertion.b(0);
        }
        super(encapsulatedAssertion);
        this.d = new AtomicReference();
        this.e = new AtomicReference<String[]>(new String[0]);
        this.g = new ak(this);
        this.a(this.a(encapsulatedAssertion));
    }

    public ServerEncapsulatedAssertion(@NotNull EncapsulatedAssertion encapsulatedAssertion, @Nullable AuditFactory auditFactory) {
        if (encapsulatedAssertion == null) {
            ServerEncapsulatedAssertion.b(1);
        }
        super(encapsulatedAssertion, auditFactory);
        this.d = new AtomicReference();
        this.e = new AtomicReference<String[]>(new String[0]);
        this.g = new ak(this);
        this.a(this.a(encapsulatedAssertion));
    }

    public void afterPropertiesSet() throws Exception {
        this.a(this.b());
        this.a();
    }

    private void a() {
        Either<String, EncapsulatedAssertionConfig> either = this.d.get();
        this.f = new q(this, either);
        this.applicationEventProxy.addApplicationListener(this.f);
    }

    private void a(Either<String, EncapsulatedAssertionConfig> either) {
        block4: {
            try {
                try {
                    this.d.set(either);
                    if (either == null || !either.isRight()) break block4;
                }
                catch (NumberFormatException numberFormatException) {
                    throw ServerEncapsulatedAssertion.a(numberFormatException);
                }
                this.e.set(EncapsulatedAssertion.getVariablesUsed((EncapsulatedAssertion)((EncapsulatedAssertion)this.assertion), (EncapsulatedAssertionConfig)((EncapsulatedAssertionConfig)either.right())));
            }
            catch (NumberFormatException numberFormatException) {
                throw ServerEncapsulatedAssertion.a(numberFormatException);
            }
        }
    }

    @Override
    public void close() {
        try {
            if (this.f != null) {
                this.applicationEventProxy.removeApplicationListener(this.f);
                this.f = null;
            }
        }
        catch (NumberFormatException numberFormatException) {
            throw ServerEncapsulatedAssertion.a(numberFormatException);
        }
        super.close();
    }

    private Either<String, EncapsulatedAssertionConfig> a(EncapsulatedAssertion encapsulatedAssertion) {
        Either either;
        EncapsulatedAssertionConfig encapsulatedAssertionConfig = encapsulatedAssertion.config();
        try {
            either = encapsulatedAssertionConfig == null ? null : Either.right((Object)encapsulatedAssertionConfig);
        }
        catch (NumberFormatException numberFormatException) {
            throw ServerEncapsulatedAssertion.a(numberFormatException);
        }
        return either;
    }

    private Either<String, EncapsulatedAssertionConfig> b() {
        String string = ((EncapsulatedAssertion)this.assertion).getEncapsulatedAssertionConfigGuid();
        if (string == null) {
            String[] stringArray = h;
            String string2 = stringArray[0];
            this.logger.log(Level.WARNING, stringArray[21]);
            return Either.left((Object)stringArray[21]);
        }
        try {
            EncapsulatedAssertionConfig encapsulatedAssertionConfig = (EncapsulatedAssertionConfig)this.encapsulatedAssertionConfigManager.findByGuid(string);
            if (encapsulatedAssertionConfig == null) {
                String[] stringArray = h;
                String string3 = stringArray[13] + string;
                this.logger.log(Level.WARNING, string3);
                return Either.left((Object)string3);
            }
            return Either.right((Object)encapsulatedAssertionConfig);
        }
        catch (FindException findException) {
            String[] stringArray = h;
            String string4 = stringArray[15] + string + stringArray[8] + ExceptionUtils.getMessage((Throwable)findException);
            this.logger.log(Level.WARNING, string4, ExceptionUtils.getDebugException((Throwable)findException));
            return Either.left((Object)string4);
        }
        catch (NumberFormatException numberFormatException) {
            String string5 = h[19] + string;
            this.logger.log(Level.WARNING, string5, ExceptionUtils.getDebugException((Throwable)numberFormatException));
            return Either.left((Object)string5);
        }
    }

    /*
     * WARNING - Removed try catching itself - possible behaviour change.
     * Loose catch block
     */
    @Override
    public AssertionStatus checkRequest(PolicyEnforcementContext policyEnforcementContext) throws IOException, PolicyAssertionException {
        Either<String, EncapsulatedAssertionConfig> either;
        block11: {
            block12: {
                either = this.d.get();
                if (!either.isLeft()) break block11;
                try {
                    block13: {
                        if (!((EncapsulatedAssertion)this.assertion).isNoOpIfConfigMissing()) break block12;
                        break block13;
                        catch (IOException iOException) {
                            throw ServerEncapsulatedAssertion.a(iOException);
                        }
                    }
                    return AssertionStatus.NONE;
                }
                catch (IOException iOException) {
                    throw ServerEncapsulatedAssertion.a(iOException);
                }
            }
            String[] stringArray = new String[1];
            String[] stringArray2 = h;
            stringArray[0] = stringArray2[17] + (String)either.left();
            this.getAudit().logAndAudit((AuditDetailMessage)AssertionMessages.EXCEPTION_WARNING_WITH_MORE_INFO, stringArray);
            return AssertionStatus.SERVER_ERROR;
        }
        EncapsulatedAssertionConfig encapsulatedAssertionConfig = (EncapsulatedAssertionConfig)either.right();
        if (this.g.get().booleanValue()) {
            String[] stringArray = h;
            String string = stringArray[9] + encapsulatedAssertionConfig.getName() + stringArray[12];
            this.getAudit().logAndAudit((AuditDetailMessage)AssertionMessages.ASSERTION_MISCONFIGURED, new String[]{string});
            throw new PolicyAssertionException(this.assertion, string);
        }
        Policy policy = encapsulatedAssertionConfig.getPolicy();
        try {
            if (policy == null) {
                this.getAudit().logAndAudit((AuditDetailMessage)AssertionMessages.EXCEPTION_WARNING_WITH_MORE_INFO, new String[]{h[1]});
                return AssertionStatus.SERVER_ERROR;
            }
        }
        catch (IOException iOException) {
            throw ServerEncapsulatedAssertion.a(iOException);
        }
        this.g.set(true);
        try {
            policyEnforcementContext.pushAssertionOrdinal(((EncapsulatedAssertion)this.assertion).getOrdinal());
            String[] stringArray = this.e.get();
            Map<String, Object> map = policyEnforcementContext.getVariableMap(stringArray, this.getAudit());
            PolicyEnforcementContext policyEnforcementContext2 = PolicyEnforcementContextFactory.createPolicyEnforcementContext(policyEnforcementContext, encapsulatedAssertionConfig.getBooleanProperty(EncapsulatedAssertionConfig.PROP_PASS_METRICS_TO_PARENT));
            ShadowsParentVariables shadowsParentVariables = (ShadowsParentVariables)((Object)policyEnforcementContext2);
            policyEnforcementContext.passDownAssertionOrdinal(policyEnforcementContext2);
            this.enableTracing(policyEnforcementContext, policyEnforcementContext2, encapsulatedAssertionConfig.getBooleanProperty(EncapsulatedAssertionConfig.PROP_ALLOW_TRACING));
            policyEnforcementContext2.setDebugContext(policyEnforcementContext.getDebugContext());
            this.a(encapsulatedAssertionConfig, map, policyEnforcementContext, policyEnforcementContext2, shadowsParentVariables);
            this.a(encapsulatedAssertionConfig, (HasOutputVariables)((Object)policyEnforcementContext2));
            AssertionStatus assertionStatus = this.a(policy.getGoid(), policyEnforcementContext2);
            this.a(policyEnforcementContext, encapsulatedAssertionConfig, policyEnforcementContext2);
            AssertionStatus assertionStatus2 = assertionStatus;
            return assertionStatus2;
        }
        finally {
            policyEnforcementContext.popAssertionOrdinal();
            this.g.set(false);
        }
    }

    protected void enableTracing(PolicyEnforcementContext policyEnforcementContext, PolicyEnforcementContext policyEnforcementContext2, boolean bl2) {
        block6: {
            String string;
            block7: {
                try {
                    if (!policyEnforcementContext.hasTraceListener() || !bl2) break block6;
                }
                catch (NumberFormatException numberFormatException) {
                    throw ServerEncapsulatedAssertion.a(numberFormatException);
                }
                String[] stringArray = h;
                string = this.c().getProperty(stringArray[23]);
                try {
                    try {
                        if (string != null && string.trim().length() >= 1) break block7;
                    }
                    catch (NumberFormatException numberFormatException) {
                        throw ServerEncapsulatedAssertion.a(numberFormatException);
                    }
                    this.logger.info(h[3]);
                    return;
                }
                catch (NumberFormatException numberFormatException) {
                    throw ServerEncapsulatedAssertion.a(numberFormatException);
                }
            }
            TracePolicyEvaluator.createAndAttachToContext(policyEnforcementContext2, this.policyCache.getServerPolicy(string));
        }
    }

    private Config c() {
        Config config;
        try {
            config = this.config != null ? this.config : ConfigFactory.getCachedConfig();
        }
        catch (NumberFormatException numberFormatException) {
            throw ServerEncapsulatedAssertion.a(numberFormatException);
        }
        return config;
    }

    /*
     * WARNING - Removed try catching itself - possible behaviour change.
     */
    private AssertionStatus a(Goid goid, PolicyEnforcementContext policyEnforcementContext) throws PolicyAssertionException, IOException {
        AssertionStatus assertionStatus;
        ServerPolicyHandle serverPolicyHandle = this.policyCache.getServerPolicy(goid);
        if (serverPolicyHandle != null) {
            try {
                assertionStatus = this.a(serverPolicyHandle, policyEnforcementContext);
            }
            finally {
                ResourceUtils.closeQuietly((Closeable)serverPolicyHandle);
            }
        } else {
            this.getAudit().logAndAudit((AuditDetailMessage)AssertionMessages.ENCASS_INVALID_BACKING_POLICY, new String[]{((EncapsulatedAssertion)this.assertion).getEncapsulatedAssertionConfigName()});
            assertionStatus = AssertionStatus.SERVER_ERROR;
        }
        return assertionStatus;
    }

    private AssertionStatus a(ServerPolicyHandle serverPolicyHandle, PolicyEnforcementContext policyEnforcementContext) throws PolicyAssertionException, IOException {
        AssertionStatus assertionStatus;
        try {
            assertionStatus = serverPolicyHandle.checkRequest(policyEnforcementContext);
        }
        catch (AssertionStatusException assertionStatusException) {
            assertionStatus = assertionStatusException.getAssertionStatus();
        }
        return assertionStatus;
    }

    private void a(PolicyEnforcementContext policyEnforcementContext, EncapsulatedAssertionConfig encapsulatedAssertionConfig, PolicyEnforcementContext policyEnforcementContext2) {
        for (EncapsulatedAssertionResultDescriptor encapsulatedAssertionResultDescriptor : encapsulatedAssertionConfig.getResultDescriptors()) {
            try {
                String string = encapsulatedAssertionResultDescriptor.getResultName();
                Object object = policyEnforcementContext2.getVariable(string);
                policyEnforcementContext.setVariable(string, object);
            }
            catch (NoSuchVariableException noSuchVariableException) {}
        }
    }

    private void a(EncapsulatedAssertionConfig encapsulatedAssertionConfig, HasOutputVariables hasOutputVariables) {
        for (EncapsulatedAssertionResultDescriptor encapsulatedAssertionResultDescriptor : encapsulatedAssertionConfig.getResultDescriptors()) {
            String string = encapsulatedAssertionResultDescriptor.getResultName();
            hasOutputVariables.addOutputVariableName(string);
        }
    }

    private void a(EncapsulatedAssertionConfig encapsulatedAssertionConfig, Map<String, Object> map, PolicyEnforcementContext policyEnforcementContext, PolicyEnforcementContext policyEnforcementContext2, ShadowsParentVariables shadowsParentVariables) {
        for (EncapsulatedAssertionArgumentDescriptor encapsulatedAssertionArgumentDescriptor : encapsulatedAssertionConfig.getArgumentDescriptors()) {
            if (encapsulatedAssertionArgumentDescriptor.isGuiPrompt()) {
                Object object;
                String string;
                block9: {
                    string = ((EncapsulatedAssertion)this.assertion).getParameter(encapsulatedAssertionArgumentDescriptor.getArgumentName());
                    if (string == null) {
                        string = this.a(encapsulatedAssertionArgumentDescriptor.getArgumentType());
                    }
                    try {
                        if (!EncapsulatedAssertionArgumentDescriptor.valueIsParentContextVariableNameForDataType((String)encapsulatedAssertionArgumentDescriptor.getArgumentType())) break block9;
                        if (string == null) continue;
                    }
                    catch (NoSuchVariableException noSuchVariableException) {
                        throw ServerEncapsulatedAssertion.a((Exception)((Object)noSuchVariableException));
                    }
                    try {
                        object = policyEnforcementContext.getVariable(string);
                        policyEnforcementContext2.setVariable(encapsulatedAssertionArgumentDescriptor.getArgumentName(), object);
                    }
                    catch (NoSuchVariableException noSuchVariableException) {
                        this.getAudit().logAndAudit((AuditDetailMessage)AssertionMessages.NO_SUCH_VARIABLE_WARNING, new String[]{string});
                    }
                    continue;
                }
                object = this.valueFromString(map, encapsulatedAssertionArgumentDescriptor, string);
                try {
                    if (object == null) continue;
                    policyEnforcementContext2.setVariable(encapsulatedAssertionArgumentDescriptor.getArgumentName(), object);
                    continue;
                }
                catch (NoSuchVariableException noSuchVariableException) {
                    throw ServerEncapsulatedAssertion.a((Exception)((Object)noSuchVariableException));
                }
            }
            shadowsParentVariables.putParentVariable(encapsulatedAssertionArgumentDescriptor.getArgumentName(), true);
        }
    }

    /*
     * Exception decompiling
     */
    @Nullable
    private String a(@NotNull String var1_1) {
        /*
         * 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 [1[TRYBLOCK]], but top level block is 3[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: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");
    }

    @Nullable
    public Object valueFromString(Map<String, ?> map, EncapsulatedAssertionArgumentDescriptor encapsulatedAssertionArgumentDescriptor, @Nullable String string) {
        try {
            if (string == null) {
                return null;
            }
        }
        catch (NumberFormatException numberFormatException) {
            throw ServerEncapsulatedAssertion.a(numberFormatException);
        }
        try {
            if (EncapsulatedAssertionArgumentDescriptor.allowVariableInterpolationForDataType((String)encapsulatedAssertionArgumentDescriptor.getArgumentType())) {
                return ExpandVariables.process(string, map, this.getAudit());
            }
        }
        catch (NumberFormatException numberFormatException) {
            throw ServerEncapsulatedAssertion.a(numberFormatException);
        }
        return EncapsulatedAssertionStringEncoding.decodeFromString((DataType)encapsulatedAssertionArgumentDescriptor.dataType(), (String)string);
    }

    AtomicReference<Either<String, EncapsulatedAssertionConfig>> d() {
        return this.d;
    }

    ApplicationListener e() {
        return this.f;
    }

    /*
     * 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;
    }

    /*
     * Unable to fully structure code
     */
    static {
        block10: {
            block9: {
                var5 = new String[24];
                var3_1 = 0;
                var2_2 = "!Qfy~/[\b^q}j|O\u0017L`jz5A\n\u001fiym7]D^%{a2H\rX%_[\u0015j1-Qsyb5JDzk{o,]\u0011Sdlk8\u000e%Lv}|(G\u000bQ%[a2H\rX?8`3\u000e\u0014Piqm%\u0000\t\u0005Lv}|(G\u000bQ.0Md{g2IDZkyl0K\u0000\u001fgmz|@\u000b\u001fqjo?KDOjtg?WD\\jvh5I\u0011M`|\u0007\u0000Zfqc=B\u0003\rQq\u0006XVkqzb\u0005\"^ikk\u0002^\u001f\u0017!Qfy~/[\b^q}j|O\u0017L`jz5A\n\u001f\u0005\u0002Sjyz>\u0007Ph7bkZ\u0001\\m7}9\\\u0012Zw7~3B\r\\|7o/]\u0001Mqqa2\u00017Zwnk.k\n\\dh})B\u0005K`|O/]\u0001Mqqa2,DVv8m=B\bVk\u007f.5Z\u0017Zi~.tJ\rM`{z0WDPw8g2J\rM`{z0WM\u00111*P%}`?O\u0014Lpto(K\u0000\u001fdk}9\\\u0010Vjv.?A\nYl\u007f.:A\u0011Qa8y5Z\f\u001fBMG\u0018\u000e>%Mbmc9@\u0010\u001fcw||n*PqV{0BDOdjo1K\u0010Zw8)y]C\u001fj~.y]J\u001av8c)]\u0010\u001fkwz|L\u0001\u001fkmb09!Mww||B\u000bPnq`;\u000e\u0011O%}`?O\u0014Lpto(K\u0000\u001fdk}9\\\u0010Vjv.?A\nYl\u007f.+G\u0010W%_[\u0015jD\f\u0005Mbmc9@\u0010k|hk'-Qsyb5JDzk{o,]\u0011Sdlk8\u000e%Lv}|(G\u000bQ%[a2H\rX?8\u001e\u0003Zq\\k:O\u0011SqNo0[\u0001yjjO.I\u0011R`vz\bW\u0014Z+-Qsyb5JDZk{o,]\u0011Sdlk8\u000e\u0005Lv}|(G\u000bQ%{a2H\rX%_[\u0015jD\u0007\u0006Pjtk=@*!Qfy~/[\b^q}j|O\u0017L`jz5A\n\u001fiym7]D^%{a2H\rX%_[\u0015j";
                var4_3 = "!Qfy~/[\b^q}j|O\u0017L`jz5A\n\u001fiym7]D^%{a2H\rX%_[\u0015j1-Qsyb5JDzk{o,]\u0011Sdlk8\u000e%Lv}|(G\u000bQ%[a2H\rX?8`3\u000e\u0014Piqm%\u0000\t\u0005Lv}|(G\u000bQ.0Md{g2IDZkyl0K\u0000\u001fgmz|@\u000b\u001fqjo?KDOjtg?WD\\jvh5I\u0011M`|\u0007\u0000Zfqc=B\u0003\rQq\u0006XVkqzb\u0005\"^ikk\u0002^\u001f\u0017!Qfy~/[\b^q}j|O\u0017L`jz5A\n\u001f\u0005\u0002Sjyz>\u0007Ph7bkZ\u0001\\m7}9\\\u0012Zw7~3B\r\\|7o/]\u0001Mqqa2\u00017Zwnk.k\n\\dh})B\u0005K`|O/]\u0001Mqqa2,DVv8m=B\bVk\u007f.5Z\u0017Zi~.tJ\rM`{z0WDPw8g2J\rM`{z0WM\u00111*P%}`?O\u0014Lpto(K\u0000\u001fdk}9\\\u0010Vjv.?A\nYl\u007f.:A\u0011Qa8y5Z\f\u001fBMG\u0018\u000e>%Mbmc9@\u0010\u001fcw||n*PqV{0BDOdjo1K\u0010Zw8)y]C\u001fj~.y]J\u001av8c)]\u0010\u001fkwz|L\u0001\u001fkmb09!Mww||B\u000bPnq`;\u000e\u0011O%}`?O\u0014Lpto(K\u0000\u001fdk}9\\\u0010Vjv.?A\nYl\u007f.+G\u0010W%_[\u0015jD\f\u0005Mbmc9@\u0010k|hk'-Qsyb5JDzk{o,]\u0011Sdlk8\u000e%Lv}|(G\u000bQ%[a2H\rX?8\u001e\u0003Zq\\k:O\u0011SqNo0[\u0001yjjO.I\u0011R`vz\bW\u0014Z+-Qsyb5JDZk{o,]\u0011Sdlk8\u000e\u0005Lv}|(G\u000bQ%{a2H\rX%_[\u0015jD\u0007\u0006Pjtk=@*!Qfy~/[\b^q}j|O\u0017L`jz5A\n\u001fiym7]D^%{a2H\rX%_[\u0015j".length();
                var1_4 = 42;
                var0_5 = -1;
lbl7:
                // 2 sources

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

                while (true) {
                    var5[var3_1++] = ServerEncapsulatedAssertion.b(v0, ServerEncapsulatedAssertion.b(v2));
                    if ((var0_5 += var1_4) < var4_3) {
                        var1_4 = var2_2.charAt(var0_5);
                        ** continue;
                    }
                    var2_2 = "E\u0019%#2i\u0011B\u001f6)9 \fY\u0001>)% \u001bC\u00043";
                    var4_3 = "E\u0019%#2i\u0011B\u001f6)9 \fY\u0001>)% \u001bC\u00043".length();
                    var1_4 = 6;
                    var0_5 = -1;
lbl22:
                    // 2 sources

                    while (true) {
                        v0 = 50;
                        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++] = ServerEncapsulatedAssertion.b(v0, ServerEncapsulatedAssertion.b(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;
            }
        }
        ServerEncapsulatedAssertion.h = var5;
    }

    private static char[] b(String string) {
        char[] cArray = string.toCharArray();
        if (cArray.length < 2) {
            cArray = cArray;
            cArray[0] = (char)(cArray[0] ^ 0x4E);
        }
        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 -> 4;
                    case 1 -> 95;
                    case 2 -> 101;
                    case 3 -> 120;
                    case 4 -> 110;
                    case 5 -> 60;
                    default -> 78;
                })));
                ++n3;
                n4 = n4;
            } while (n4 > n3);
        }
        return new String(cArray2).intern();
    }
}

