package com.l7tech.server.policy.assertion;

import com.l7tech.gateway.common.audit.AssertionMessages;
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.assertion.AssertionStatus;
import com.l7tech.policy.assertion.EncapsulatedAssertion;
import com.l7tech.policy.assertion.PolicyAssertionException;
import com.l7tech.policy.variable.NoSuchVariableException;
import com.l7tech.server.message.HasOutputVariables;
import com.l7tech.server.message.PolicyEnforcementContext;
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.variable.ExpandVariables;
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.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;

public class ServerEncapsulatedAssertion extends AbstractServerAssertion<EncapsulatedAssertion> implements InitializingBean {
   @Inject
   @Named("encapsulatedAssertionConfigManager")
   private EncapsulatedAssertionConfigManager encapsulatedAssertionConfigManager;
   @Inject
   @Named("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 var1) {
      if (var1 == null) {
         b(0);
      }

      super(var1);
      this.d = new AtomicReference<>();
      this.e = new AtomicReference<>(new String[0]);
      this.g = new ak(this);
      this.a(this.a(var1));
   }

   public ServerEncapsulatedAssertion(@NotNull EncapsulatedAssertion var1, @Nullable AuditFactory var2) {
      if (var1 == null) {
         b(1);
      }

      super(var1, var2);
      this.d = new AtomicReference<>();
      this.e = new AtomicReference<>(new String[0]);
      this.g = new ak(this);
      this.a(this.a(var1));
   }

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

   private void a() {
      Either var1 = this.d.get();
      this.f = new q(this, var1);
      this.applicationEventProxy.addApplicationListener(this.f);
   }

   private void a(Either<String, EncapsulatedAssertionConfig> param1) {
      // $VF: Couldn't be decompiled
      // Please report this to the Vineflower issue tracker, at https://github.com/Vineflower/vineflower/issues with a copy of the class file (if you have the rights to distribute it!)
      // java.lang.RuntimeException: parsing failure!
      //   at org.jetbrains.java.decompiler.modules.decompiler.decompose.DomHelper.parseGraph(DomHelper.java:211)
      //   at org.jetbrains.java.decompiler.main.rels.MethodProcessor.codeToJava(MethodProcessor.java:174)
      //
      // Bytecode:
      // 00: aload 0
      // 01: getfield com/l7tech/server/policy/assertion/ServerEncapsulatedAssertion.d Ljava/util/concurrent/atomic/AtomicReference;
      // 04: aload 1
      // 05: invokevirtual java/util/concurrent/atomic/AtomicReference.set (Ljava/lang/Object;)V
      // 08: aload 1
      // 09: ifnull 39
      // 0c: aload 1
      // 0d: invokevirtual com/l7tech/util/Either.isRight ()Z
      // 10: ifeq 39
      // 13: goto 1a
      // 16: invokestatic com/l7tech/server/policy/assertion/ServerEncapsulatedAssertion.a (Ljava/lang/Exception;)Ljava/lang/Exception;
      // 19: athrow
      // 1a: aload 0
      // 1b: getfield com/l7tech/server/policy/assertion/ServerEncapsulatedAssertion.e Ljava/util/concurrent/atomic/AtomicReference;
      // 1e: aload 0
      // 1f: getfield com/l7tech/server/policy/assertion/ServerEncapsulatedAssertion.assertion Lcom/l7tech/policy/assertion/Assertion;
      // 22: checkcast com/l7tech/policy/assertion/EncapsulatedAssertion
      // 25: aload 1
      // 26: invokevirtual com/l7tech/util/Either.right ()Ljava/lang/Object;
      // 29: checkcast com/l7tech/objectmodel/encass/EncapsulatedAssertionConfig
      // 2c: invokestatic com/l7tech/policy/assertion/EncapsulatedAssertion.getVariablesUsed (Lcom/l7tech/policy/assertion/EncapsulatedAssertion;Lcom/l7tech/objectmodel/encass/EncapsulatedAssertionConfig;)[Ljava/lang/String;
      // 2f: invokevirtual java/util/concurrent/atomic/AtomicReference.set (Ljava/lang/Object;)V
      // 32: goto 39
      // 35: invokestatic com/l7tech/server/policy/assertion/ServerEncapsulatedAssertion.a (Ljava/lang/Exception;)Ljava/lang/Exception;
      // 38: athrow
      // 39: return
      // try (0 -> 9): 10 java/lang/NumberFormatException
      // try (6 -> 22): 23 java/lang/NumberFormatException
   }

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

      super.close();
   }

   private Either<String, EncapsulatedAssertionConfig> a(EncapsulatedAssertion var1) {
      EncapsulatedAssertionConfig var2 = var1.config();

      try {
         if (var2 == null) {
            return null;
         }
      } catch (NumberFormatException var3) {
         throw a(var3);
      }

      return Either.right(var2);
   }

   private Either<String, EncapsulatedAssertionConfig> b() {
      String var1 = this.assertion.getEncapsulatedAssertionConfigGuid();
      if (var1 == null) {
         String[] var11 = h;
         String var7 = var11[0];
         this.logger.log(Level.WARNING, var11[21]);
         return Either.left(var11[21]);
      }

      try {
         EncapsulatedAssertionConfig var2 = (EncapsulatedAssertionConfig)this.encapsulatedAssertionConfigManager.findByGuid(var1);
         if (var2 == null) {
            String[] var10 = h;
            String var9 = var10[13] + var1;
            this.logger.log(Level.WARNING, var9);
            return Either.left(var9);
         } else {
            return Either.right(var2);
         }
      } catch (FindException var5) {
         String var10001 = ExceptionUtils.getMessage(var5);
         String[] var4 = h;
         String var8 = var4[15] + var1 + var4[8] + var10001;
         this.logger.log(Level.WARNING, var8, ExceptionUtils.getDebugException(var5));
         return Either.left(var8);
      } catch (NumberFormatException var6) {
         String var3 = h[19] + var1;
         this.logger.log(Level.WARNING, var3, ExceptionUtils.getDebugException(var6));
         return Either.left(var3);
      }
   }

   @Override
   public AssertionStatus checkRequest(PolicyEnforcementContext param1) throws IOException, PolicyAssertionException {
      // $VF: Couldn't be decompiled
      // Please report this to the Vineflower issue tracker, at https://github.com/Vineflower/vineflower/issues with a copy of the class file (if you have the rights to distribute it!)
      // java.lang.RuntimeException: parsing failure!
      //   at org.jetbrains.java.decompiler.modules.decompiler.decompose.DomHelper.parseGraph(DomHelper.java:211)
      //   at org.jetbrains.java.decompiler.main.rels.MethodProcessor.codeToJava(MethodProcessor.java:174)
      //
      // Bytecode:
      // 000: aload 0
      // 001: getfield com/l7tech/server/policy/assertion/ServerEncapsulatedAssertion.d Ljava/util/concurrent/atomic/AtomicReference;
      // 004: invokevirtual java/util/concurrent/atomic/AtomicReference.get ()Ljava/lang/Object;
      // 007: checkcast com/l7tech/util/Either
      // 00a: astore 2
      // 00b: aload 2
      // 00c: invokevirtual com/l7tech/util/Either.isLeft ()Z
      // 00f: ifeq 05c
      // 012: aload 0
      // 013: getfield com/l7tech/server/policy/assertion/ServerEncapsulatedAssertion.assertion Lcom/l7tech/policy/assertion/Assertion;
      // 016: checkcast com/l7tech/policy/assertion/EncapsulatedAssertion
      // 019: invokevirtual com/l7tech/policy/assertion/EncapsulatedAssertion.isNoOpIfConfigMissing ()Z
      // 01c: ifeq 02e
      // 01f: goto 026
      // 022: invokestatic com/l7tech/server/policy/assertion/ServerEncapsulatedAssertion.a (Ljava/lang/Exception;)Ljava/lang/Exception;
      // 025: athrow
      // 026: getstatic com/l7tech/policy/assertion/AssertionStatus.NONE Lcom/l7tech/policy/assertion/AssertionStatus;
      // 029: areturn
      // 02a: invokestatic com/l7tech/server/policy/assertion/ServerEncapsulatedAssertion.a (Ljava/lang/Exception;)Ljava/lang/Exception;
      // 02d: athrow
      // 02e: aload 0
      // 02f: invokevirtual com/l7tech/server/policy/assertion/ServerEncapsulatedAssertion.getAudit ()Lcom/l7tech/gateway/common/audit/Audit;
      // 032: getstatic com/l7tech/gateway/common/audit/AssertionMessages.EXCEPTION_WARNING_WITH_MORE_INFO Lcom/l7tech/gateway/common/audit/Messages$M;
      // 035: bipush 1
      // 036: anewarray 386
      // 039: dup
      // 03a: bipush 0
      // 03b: aload 2
      // 03c: invokevirtual com/l7tech/util/Either.left ()Ljava/lang/Object;
      // 03f: checkcast java/lang/String
      // 042: getstatic com/l7tech/server/policy/assertion/ServerEncapsulatedAssertion.h [Ljava/lang/String;
      // 045: astore 12
      // 047: aload 12
      // 049: bipush 17
      // 04b: aaload
      // 04c: swap
      // 04d: invokedynamic makeConcatWithConstants (Ljava/lang/String;Ljava/lang/String;)Ljava/lang/String; bsm=java/lang/invoke/StringConcatFactory.makeConcatWithConstants (Ljava/lang/invoke/MethodHandles$Lookup;Ljava/lang/String;Ljava/lang/invoke/MethodType;Ljava/lang/String;[Ljava/lang/Object;)Ljava/lang/invoke/CallSite; args=[ "\u0001\u0001" ]
      // 052: aastore
      // 053: invokeinterface com/l7tech/gateway/common/audit/Audit.logAndAudit (Lcom/l7tech/gateway/common/audit/AuditDetailMessage;[Ljava/lang/String;)V 3
      // 058: getstatic com/l7tech/policy/assertion/AssertionStatus.SERVER_ERROR Lcom/l7tech/policy/assertion/AssertionStatus;
      // 05b: areturn
      // 05c: aload 2
      // 05d: invokevirtual com/l7tech/util/Either.right ()Ljava/lang/Object;
      // 060: checkcast com/l7tech/objectmodel/encass/EncapsulatedAssertionConfig
      // 063: astore 3
      // 064: aload 0
      // 065: getfield com/l7tech/server/policy/assertion/ServerEncapsulatedAssertion.g Ljava/lang/ThreadLocal;
      // 068: invokevirtual java/lang/ThreadLocal.get ()Ljava/lang/Object;
      // 06b: checkcast java/lang/Boolean
      // 06e: invokevirtual java/lang/Boolean.booleanValue ()Z
      // 071: ifeq 0b2
      // 074: aload 3
      // 075: invokevirtual com/l7tech/objectmodel/encass/EncapsulatedAssertionConfig.getName ()Ljava/lang/String;
      // 078: getstatic com/l7tech/server/policy/assertion/ServerEncapsulatedAssertion.h [Ljava/lang/String;
      // 07b: astore 12
      // 07d: aload 12
      // 07f: bipush 9
      // 081: aaload
      // 082: swap
      // 083: aload 12
      // 085: bipush 12
      // 087: aaload
      // 088: invokedynamic makeConcatWithConstants (Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)Ljava/lang/String; bsm=java/lang/invoke/StringConcatFactory.makeConcatWithConstants (Ljava/lang/invoke/MethodHandles$Lookup;Ljava/lang/String;Ljava/lang/invoke/MethodType;Ljava/lang/String;[Ljava/lang/Object;)Ljava/lang/invoke/CallSite; args=[ "\u0001\u0001\u0001" ]
      // 08d: astore 4
      // 08f: aload 0
      // 090: invokevirtual com/l7tech/server/policy/assertion/ServerEncapsulatedAssertion.getAudit ()Lcom/l7tech/gateway/common/audit/Audit;
      // 093: getstatic com/l7tech/gateway/common/audit/AssertionMessages.ASSERTION_MISCONFIGURED Lcom/l7tech/gateway/common/audit/Messages$M;
      // 096: bipush 1
      // 097: anewarray 386
      // 09a: dup
      // 09b: bipush 0
      // 09c: aload 4
      // 09e: aastore
      // 09f: invokeinterface com/l7tech/gateway/common/audit/Audit.logAndAudit (Lcom/l7tech/gateway/common/audit/AuditDetailMessage;[Ljava/lang/String;)V 3
      // 0a4: new com/l7tech/policy/assertion/PolicyAssertionException
      // 0a7: dup
      // 0a8: aload 0
      // 0a9: getfield com/l7tech/server/policy/assertion/ServerEncapsulatedAssertion.assertion Lcom/l7tech/policy/assertion/Assertion;
      // 0ac: aload 4
      // 0ae: invokespecial com/l7tech/policy/assertion/PolicyAssertionException.<init> (Lcom/l7tech/policy/assertion/Assertion;Ljava/lang/String;)V
      // 0b1: athrow
      // 0b2: aload 3
      // 0b3: invokevirtual com/l7tech/objectmodel/encass/EncapsulatedAssertionConfig.getPolicy ()Lcom/l7tech/policy/Policy;
      // 0b6: astore 4
      // 0b8: aload 4
      // 0ba: ifnonnull 0dd
      // 0bd: aload 0
      // 0be: invokevirtual com/l7tech/server/policy/assertion/ServerEncapsulatedAssertion.getAudit ()Lcom/l7tech/gateway/common/audit/Audit;
      // 0c1: getstatic com/l7tech/gateway/common/audit/AssertionMessages.EXCEPTION_WARNING_WITH_MORE_INFO Lcom/l7tech/gateway/common/audit/Messages$M;
      // 0c4: bipush 1
      // 0c5: anewarray 386
      // 0c8: dup
      // 0c9: bipush 0
      // 0ca: getstatic com/l7tech/server/policy/assertion/ServerEncapsulatedAssertion.h [Ljava/lang/String;
      // 0cd: bipush 1
      // 0ce: aaload
      // 0cf: aastore
      // 0d0: invokeinterface com/l7tech/gateway/common/audit/Audit.logAndAudit (Lcom/l7tech/gateway/common/audit/AuditDetailMessage;[Ljava/lang/String;)V 3
      // 0d5: getstatic com/l7tech/policy/assertion/AssertionStatus.SERVER_ERROR Lcom/l7tech/policy/assertion/AssertionStatus;
      // 0d8: areturn
      // 0d9: invokestatic com/l7tech/server/policy/assertion/ServerEncapsulatedAssertion.a (Ljava/lang/Exception;)Ljava/lang/Exception;
      // 0dc: athrow
      // 0dd: aload 0
      // 0de: getfield com/l7tech/server/policy/assertion/ServerEncapsulatedAssertion.g Ljava/lang/ThreadLocal;
      // 0e1: bipush 1
      // 0e2: invokestatic java/lang/Boolean.valueOf (Z)Ljava/lang/Boolean;
      // 0e5: invokevirtual java/lang/ThreadLocal.set (Ljava/lang/Object;)V
      // 0e8: aload 1
      // 0e9: aload 0
      // 0ea: getfield com/l7tech/server/policy/assertion/ServerEncapsulatedAssertion.assertion Lcom/l7tech/policy/assertion/Assertion;
      // 0ed: checkcast com/l7tech/policy/assertion/EncapsulatedAssertion
      // 0f0: invokevirtual com/l7tech/policy/assertion/EncapsulatedAssertion.getOrdinal ()I
      // 0f3: invokeinterface com/l7tech/server/message/PolicyEnforcementContext.pushAssertionOrdinal (I)V 2
      // 0f8: aload 0
      // 0f9: getfield com/l7tech/server/policy/assertion/ServerEncapsulatedAssertion.e Ljava/util/concurrent/atomic/AtomicReference;
      // 0fc: invokevirtual java/util/concurrent/atomic/AtomicReference.get ()Ljava/lang/Object;
      // 0ff: checkcast [Ljava/lang/String;
      // 102: astore 5
      // 104: aload 1
      // 105: aload 5
      // 107: aload 0
      // 108: invokevirtual com/l7tech/server/policy/assertion/ServerEncapsulatedAssertion.getAudit ()Lcom/l7tech/gateway/common/audit/Audit;
      // 10b: invokeinterface com/l7tech/server/message/PolicyEnforcementContext.getVariableMap ([Ljava/lang/String;Lcom/l7tech/gateway/common/audit/Audit;)Ljava/util/Map; 3
      // 110: astore 6
      // 112: aload 1
      // 113: aload 3
      // 114: getstatic com/l7tech/objectmodel/encass/EncapsulatedAssertionConfig.PROP_PASS_METRICS_TO_PARENT Ljava/lang/String;
      // 117: invokevirtual com/l7tech/objectmodel/encass/EncapsulatedAssertionConfig.getBooleanProperty (Ljava/lang/String;)Z
      // 11a: invokestatic com/l7tech/server/message/PolicyEnforcementContextFactory.createPolicyEnforcementContext (Lcom/l7tech/server/message/PolicyEnforcementContext;Z)Lcom/l7tech/server/message/PolicyEnforcementContext;
      // 11d: astore 7
      // 11f: aload 7
      // 121: checkcast com/l7tech/server/message/ShadowsParentVariables
      // 124: astore 8
      // 126: aload 1
      // 127: aload 7
      // 129: invokeinterface com/l7tech/server/message/PolicyEnforcementContext.passDownAssertionOrdinal (Lcom/l7tech/server/message/PolicyEnforcementContext;)V 2
      // 12e: aload 0
      // 12f: aload 1
      // 130: aload 7
      // 132: aload 3
      // 133: getstatic com/l7tech/objectmodel/encass/EncapsulatedAssertionConfig.PROP_ALLOW_TRACING Ljava/lang/String;
      // 136: invokevirtual com/l7tech/objectmodel/encass/EncapsulatedAssertionConfig.getBooleanProperty (Ljava/lang/String;)Z
      // 139: invokevirtual com/l7tech/server/policy/assertion/ServerEncapsulatedAssertion.enableTracing (Lcom/l7tech/server/message/PolicyEnforcementContext;Lcom/l7tech/server/message/PolicyEnforcementContext;Z)V
      // 13c: aload 7
      // 13e: aload 1
      // 13f: invokeinterface com/l7tech/server/message/PolicyEnforcementContext.getDebugContext ()Lcom/l7tech/server/stepdebug/DebugContext; 1
      // 144: invokeinterface com/l7tech/server/message/PolicyEnforcementContext.setDebugContext (Lcom/l7tech/server/stepdebug/DebugContext;)V 2
      // 149: aload 0
      // 14a: aload 3
      // 14b: aload 6
      // 14d: aload 1
      // 14e: aload 7
      // 150: aload 8
      // 152: invokevirtual com/l7tech/server/policy/assertion/ServerEncapsulatedAssertion.a (Lcom/l7tech/objectmodel/encass/EncapsulatedAssertionConfig;Ljava/util/Map;Lcom/l7tech/server/message/PolicyEnforcementContext;Lcom/l7tech/server/message/PolicyEnforcementContext;Lcom/l7tech/server/message/ShadowsParentVariables;)V
      // 155: aload 0
      // 156: aload 3
      // 157: aload 7
      // 159: checkcast com/l7tech/server/message/HasOutputVariables
      // 15c: invokevirtual com/l7tech/server/policy/assertion/ServerEncapsulatedAssertion.a (Lcom/l7tech/objectmodel/encass/EncapsulatedAssertionConfig;Lcom/l7tech/server/message/HasOutputVariables;)V
      // 15f: aload 0
      // 160: aload 4
      // 162: invokevirtual com/l7tech/policy/Policy.getGoid ()Lcom/l7tech/objectmodel/Goid;
      // 165: aload 7
      // 167: invokevirtual com/l7tech/server/policy/assertion/ServerEncapsulatedAssertion.a (Lcom/l7tech/objectmodel/Goid;Lcom/l7tech/server/message/PolicyEnforcementContext;)Lcom/l7tech/policy/assertion/AssertionStatus;
      // 16a: astore 9
      // 16c: aload 0
      // 16d: aload 1
      // 16e: aload 3
      // 16f: aload 7
      // 171: invokevirtual com/l7tech/server/policy/assertion/ServerEncapsulatedAssertion.a (Lcom/l7tech/server/message/PolicyEnforcementContext;Lcom/l7tech/objectmodel/encass/EncapsulatedAssertionConfig;Lcom/l7tech/server/message/PolicyEnforcementContext;)V
      // 174: aload 9
      // 176: astore 10
      // 178: aload 1
      // 179: invokeinterface com/l7tech/server/message/PolicyEnforcementContext.popAssertionOrdinal ()I 1
      // 17e: pop
      // 17f: aload 0
      // 180: getfield com/l7tech/server/policy/assertion/ServerEncapsulatedAssertion.g Ljava/lang/ThreadLocal;
      // 183: bipush 0
      // 184: invokestatic java/lang/Boolean.valueOf (Z)Ljava/lang/Boolean;
      // 187: invokevirtual java/lang/ThreadLocal.set (Ljava/lang/Object;)V
      // 18a: aload 10
      // 18c: areturn
      // 18d: astore 11
      // 18f: aload 1
      // 190: invokeinterface com/l7tech/server/message/PolicyEnforcementContext.popAssertionOrdinal ()I 1
      // 195: pop
      // 196: aload 0
      // 197: getfield com/l7tech/server/policy/assertion/ServerEncapsulatedAssertion.g Ljava/lang/ThreadLocal;
      // 19a: bipush 0
      // 19b: invokestatic java/lang/Boolean.valueOf (Z)Ljava/lang/Boolean;
      // 19e: invokevirtual java/lang/ThreadLocal.set (Ljava/lang/Object;)V
      // 1a1: aload 11
      // 1a3: athrow
      // try (84 -> 100): 100 java/io/IOException
      // try (8 -> 18): 18 java/io/IOException
      // try (5 -> 13): 14 java/io/IOException
      // try (107 -> 172): 182 null
      // try (182 -> 183): 182 null
   }

   protected void enableTracing(PolicyEnforcementContext param1, PolicyEnforcementContext param2, boolean param3) {
      // $VF: Couldn't be decompiled
      // Please report this to the Vineflower issue tracker, at https://github.com/Vineflower/vineflower/issues with a copy of the class file (if you have the rights to distribute it!)
      // java.lang.RuntimeException: parsing failure!
      //   at org.jetbrains.java.decompiler.modules.decompiler.decompose.DomHelper.parseGraph(DomHelper.java:211)
      //   at org.jetbrains.java.decompiler.main.rels.MethodProcessor.codeToJava(MethodProcessor.java:174)
      //
      // Bytecode:
      // 00: aload 1
      // 01: invokeinterface com/l7tech/server/message/PolicyEnforcementContext.hasTraceListener ()Z 1
      // 06: ifeq 62
      // 09: iload 3
      // 0a: ifeq 62
      // 0d: goto 14
      // 10: invokestatic com/l7tech/server/policy/assertion/ServerEncapsulatedAssertion.a (Ljava/lang/Exception;)Ljava/lang/Exception;
      // 13: athrow
      // 14: aload 0
      // 15: invokevirtual com/l7tech/server/policy/assertion/ServerEncapsulatedAssertion.c ()Lcom/l7tech/util/Config;
      // 18: getstatic com/l7tech/server/policy/assertion/ServerEncapsulatedAssertion.h [Ljava/lang/String;
      // 1b: astore 5
      // 1d: aload 5
      // 1f: bipush 23
      // 21: aaload
      // 22: invokeinterface com/l7tech/util/Config.getProperty (Ljava/lang/String;)Ljava/lang/String; 2
      // 27: astore 4
      // 29: aload 4
      // 2b: ifnull 41
      // 2e: aload 4
      // 30: invokevirtual java/lang/String.trim ()Ljava/lang/String;
      // 33: invokevirtual java/lang/String.length ()I
      // 36: bipush 1
      // 37: if_icmpge 52
      // 3a: goto 41
      // 3d: invokestatic com/l7tech/server/policy/assertion/ServerEncapsulatedAssertion.a (Ljava/lang/Exception;)Ljava/lang/Exception;
      // 40: athrow
      // 41: aload 0
      // 42: getfield com/l7tech/server/policy/assertion/ServerEncapsulatedAssertion.logger Ljava/util/logging/Logger;
      // 45: getstatic com/l7tech/server/policy/assertion/ServerEncapsulatedAssertion.h [Ljava/lang/String;
      // 48: bipush 3
      // 49: aaload
      // 4a: invokevirtual java/util/logging/Logger.info (Ljava/lang/String;)V
      // 4d: return
      // 4e: invokestatic com/l7tech/server/policy/assertion/ServerEncapsulatedAssertion.a (Ljava/lang/Exception;)Ljava/lang/Exception;
      // 51: athrow
      // 52: aload 2
      // 53: aload 0
      // 54: getfield com/l7tech/server/policy/assertion/ServerEncapsulatedAssertion.policyCache Lcom/l7tech/server/policy/PolicyCache;
      // 57: aload 4
      // 59: invokeinterface com/l7tech/server/policy/PolicyCache.getServerPolicy (Ljava/lang/String;)Lcom/l7tech/server/policy/ServerPolicyHandle; 2
      // 5e: invokestatic com/l7tech/server/trace/TracePolicyEvaluator.createAndAttachToContext (Lcom/l7tech/server/message/PolicyEnforcementContext;Lcom/l7tech/server/policy/ServerPolicyHandle;)Lcom/l7tech/server/trace/TracePolicyEvaluator;
      // 61: pop
      // 62: return
      // try (0 -> 5): 6 java/lang/NumberFormatException
      // try (17 -> 24): 25 java/lang/NumberFormatException
      // try (19 -> 34): 34 java/lang/NumberFormatException
   }

   private Config c() {
      try {
         if (this.config != null) {
            return this.config;
         }
      } catch (NumberFormatException var1) {
         throw a(var1);
      }

      return ConfigFactory.getCachedConfig();
   }

   private AssertionStatus a(Goid var1, PolicyEnforcementContext var2) throws PolicyAssertionException, IOException {
      ServerPolicyHandle var4 = this.policyCache.getServerPolicy(var1);
      AssertionStatus var3;
      if (var4 != null) {
         try {
            var3 = this.a(var4, var2);
         } finally {
            ResourceUtils.closeQuietly(var4);
         }
      } else {
         this.getAudit().logAndAudit(AssertionMessages.ENCASS_INVALID_BACKING_POLICY, new String[]{this.assertion.getEncapsulatedAssertionConfigName()});
         var3 = AssertionStatus.SERVER_ERROR;
      }

      return var3;
   }

   private AssertionStatus a(ServerPolicyHandle var1, PolicyEnforcementContext var2) throws PolicyAssertionException, IOException {
      AssertionStatus var3;
      try {
         var3 = var1.checkRequest(var2);
      } catch (AssertionStatusException var5) {
         var3 = var5.getAssertionStatus();
      }

      return var3;
   }

   private void a(PolicyEnforcementContext var1, EncapsulatedAssertionConfig var2, PolicyEnforcementContext var3) {
      for (EncapsulatedAssertionResultDescriptor var5 : var2.getResultDescriptors()) {
         try {
            String var6 = var5.getResultName();
            Object var7 = var3.getVariable(var6);
            var1.setVariable(var6, var7);
         } catch (NoSuchVariableException var8) {
         }
      }
   }

   private void a(EncapsulatedAssertionConfig var1, HasOutputVariables var2) {
      for (EncapsulatedAssertionResultDescriptor var4 : var1.getResultDescriptors()) {
         String var5 = var4.getResultName();
         var2.addOutputVariableName(var5);
      }
   }

   private void a(
      EncapsulatedAssertionConfig var1, Map<String, Object> var2, PolicyEnforcementContext var3, PolicyEnforcementContext var4, ShadowsParentVariables var5
   ) {
      for (EncapsulatedAssertionArgumentDescriptor var7 : var1.getArgumentDescriptors()) {
         if (var7.isGuiPrompt()) {
            String var8 = this.assertion.getParameter(var7.getArgumentName());
            if (var8 == null) {
               var8 = this.a(var7.getArgumentType());
            }

            label50: {
               try {
                  if (EncapsulatedAssertionArgumentDescriptor.valueIsParentContextVariableNameForDataType(var7.getArgumentType())) {
                     if (var8 == null) {
                        continue;
                     }
                     break label50;
                  }
               } catch (NoSuchVariableException var12) {
                  throw a(var12);
               }

               Object var9 = this.valueFromString(var2, var7, var8);

               try {
                  if (var9 != null) {
                     var4.setVariable(var7.getArgumentName(), var9);
                  }
                  continue;
               } catch (NoSuchVariableException var11) {
                  throw a(var11);
               }
            }

            try {
               Object var13 = var3.getVariable(var8);
               var4.setVariable(var7.getArgumentName(), var13);
            } catch (NoSuchVariableException var10) {
               this.getAudit().logAndAudit(AssertionMessages.NO_SUCH_VARIABLE_WARNING, new String[]{var8});
            }
         } else {
            var5.putParentVariable(var7.getArgumentName(), true);
         }
      }
   }

   @Nullable
   private String a(@NotNull String var1) {
      try {
         if (var1 == null) {
            b(2);
         }
      } catch (NumberFormatException var7) {
         throw a(var7);
      }

      String var2 = var1;
      byte var3 = -1;

      label60: {
         label59: {
            label58: {
               label57: {
                  label56: {
                     try {
                        switch (var2.hashCode()) {
                           case -891985903:
                              if (!var2.equals(h[22])) {
                                 break label60;
                              }
                              break label59;
                           case 104431:
                              break;
                           case 64711720:
                              break label58;
                           case 97526364:
                              break label57;
                           case 1542263633:
                              break label56;
                           default:
                              break label60;
                        }
                     } catch (NumberFormatException var6) {
                        throw a(var6);
                     }

                     String[] var10 = h;
                     if (var2.equals(var10[5])) {
                        var3 = 1;
                     }
                     break label60;
                  }

                  String[] var4 = h;
                  if (var2.equals(var4[4])) {
                     var3 = 2;
                  }
                  break label60;
               }

               String[] var8 = h;
               if (var2.equals(var8[10])) {
                  var3 = 3;
               }
               break label60;
            }

            String[] var9 = h;
            if (var2.equals(var9[20])) {
               var3 = 4;
            }
            break label60;
         }

         var3 = 0;
      }

      try {
         switch (var3) {
            case 0:
               return "";
            case 1:
            case 2:
            case 3:
               return "0";
            case 4:
               return h[7];
            default:
               return null;
         }
      } catch (NumberFormatException var5) {
         throw a(var5);
      }
   }

   @Nullable
   public Object valueFromString(Map<String, ?> var1, EncapsulatedAssertionArgumentDescriptor var2, @Nullable String var3) {
      try {
         if (var3 == null) {
            return null;
         }
      } catch (NumberFormatException var4) {
         throw a(var4);
      }

      try {
         if (EncapsulatedAssertionArgumentDescriptor.allowVariableInterpolationForDataType(var2.getArgumentType())) {
            return ExpandVariables.process(var3, var1, this.getAudit());
         }
      } catch (NumberFormatException var5) {
         throw a(var5);
      }

      return EncapsulatedAssertionStringEncoding.decodeFromString(var2.dataType(), var3);
   }

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

   ApplicationListener e() {
      return this.f;
   }

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

   static {
      String[] var5 = new String[24];
      int var3 = 0;
      String var2 = "!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";
      int var4 = "!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();
      char var1 = '*';
      int var7 = -1;

      label24:
      while (true) {
         byte var10000 = 96;
         String var10001 = var2.substring(++var7, var7 + var1);
         byte var10002 = -1;

         while (true) {
            String var8 = b(var10000, b(var10001));
            switch (var10002) {
               case 0:
                  var5[var3++] = var8;
                  if ((var7 += var1) >= var4) {
                     h = var5;
                     return;
                  }

                  var1 = var2.charAt(var7);
                  break;
               default:
                  var5[var3++] = var8;
                  if ((var7 += var1) < var4) {
                     var1 = var2.charAt(var7);
                     continue label24;
                  }

                  var2 = "E\u0019%#2i\u0011B\u001f6)9 \fY\u0001>)% \u001bC\u00043";
                  var4 = "E\u0019%#2i\u0011B\u001f6)9 \fY\u0001>)% \u001bC\u00043".length();
                  var1 = 6;
                  var7 = -1;
            }

            var10000 = 50;
            var10001 = var2.substring(++var7, var7 + var1);
            var10002 = 0;
         }
      }
   }

   private static char[] b(String var0) {
      char[] var10000 = var0.toCharArray();
      if (var10000.length < 2) {
         var10000[0] = (char)(var10000[0] ^ 78);
      }

      return var10000;
   }

   private static String b(int var0, char[] var1) {
      int var10003 = var1.length;
      int var10002 = var0;
      char[] var10001 = var1;
      int var10000 = var10003;

      for (int var2 = 0; var10000 > var2; var2++) {
         var10001[var2] = (char)(var10001[var2] ^ var10002 ^ switch (var2 % 7) {
            case 0 -> 4;
            case 1 -> 95;
            case 2 -> 101;
            case 3 -> 120;
            case 4 -> 110;
            case 5 -> 60;
            default -> 78;
         });
      }

      return new String(var10001).intern();
   }
}
