package com.l7tech.server.transport;

import com.l7tech.common.io.PortRange;
import com.l7tech.common.io.PortRanges;
import com.l7tech.gateway.common.transport.InterfaceTag;
import com.l7tech.gateway.common.transport.SsgConnector;
import com.l7tech.gateway.common.transport.TransportDescriptor;
import com.l7tech.gateway.common.transport.SsgConnector.Endpoint;
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.server.HibernateEntityManager;
import com.l7tech.server.ServerConfig;
import com.l7tech.server.event.EntityInvalidationEvent;
import com.l7tech.server.util.ApplicationEventProxy;
import com.l7tech.server.util.FirewallUtils;
import com.l7tech.util.ArrayUtils;
import com.l7tech.util.ConfigFactory;
import com.l7tech.util.ExceptionUtils;
import com.l7tech.util.Functions;
import com.l7tech.util.InetAddressUtil;
import com.l7tech.util.Pair;
import java.beans.PropertyChangeEvent;
import java.beans.PropertyChangeListener;
import java.io.File;
import java.net.InetAddress;
import java.net.SocketException;
import java.text.ParseException;
import java.util.ArrayList;
import java.util.Collection;
import java.util.Collections;
import java.util.HashMap;
import java.util.Iterator;
import java.util.LinkedHashMap;
import java.util.List;
import java.util.Map;
import java.util.Set;
import java.util.concurrent.ConcurrentMap;
import java.util.concurrent.ConcurrentSkipListMap;
import java.util.concurrent.atomic.AtomicReference;
import java.util.logging.Level;
import java.util.logging.Logger;
import org.springframework.beans.factory.DisposableBean;
import org.springframework.beans.factory.InitializingBean;
import org.springframework.context.ApplicationEvent;
import org.springframework.transaction.annotation.Propagation;
import org.springframework.transaction.annotation.Transactional;

public class SsgConnectorManagerImpl
   extends HibernateEntityManager<SsgConnector, EntityHeader>
   implements SsgConnectorManager,
   InitializingBean,
   DisposableBean,
   PropertyChangeListener {
   protected static final Logger logger;
   private static final String m;
   private final ServerConfig n;
   private final Map<Goid, SsgConnector> o = new LinkedHashMap<>();
   private final Map<Endpoint, SsgConnector> p = Collections.synchronizedMap(new HashMap<>());
   private final Map<Endpoint, SsgConnector> q = Collections.synchronizedMap(new HashMap<>());
   private final ConcurrentMap<String, Pair<TransportDescriptor, TransportModule>> r = new ConcurrentSkipListMap<>(String.CASE_INSENSITIVE_ORDER);
   private final AtomicReference<Pair<String, Set<InterfaceTag>>> s = new AtomicReference<>(null);
   private static final String[] t;

   public SsgConnectorManagerImpl(ServerConfig var1, ApplicationEventProxy var2) {
      this.n = var1;
      var2.addApplicationListener(new a(this));
   }

   public Class<? extends Entity> getImpClass() {
      return SsgConnector.class;
   }

   @Override
   public Class<? extends Entity> getInterfaceClass() {
      return SsgConnector.class;
   }

   @Override
   public String getTableName() {
      return t[6];
   }

   @Override
   public EntityType getEntityType() {
      return EntityType.SSG_CONNECTOR;
   }

   public SsgConnector find(String param1, Endpoint param2) throws FindException {
      // $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 1
      // 001: ifnonnull 016
      // 004: new java/lang/NullPointerException
      // 007: dup
      // 008: getstatic com/l7tech/server/transport/SsgConnectorManagerImpl.t [Ljava/lang/String;
      // 00b: bipush 18
      // 00d: aaload
      // 00e: invokespecial java/lang/NullPointerException.<init> (Ljava/lang/String;)V
      // 011: athrow
      // 012: invokestatic com/l7tech/server/transport/SsgConnectorManagerImpl.a (Ljava/lang/Exception;)Ljava/lang/Exception;
      // 015: athrow
      // 016: aload 2
      // 017: ifnonnull 02c
      // 01a: new java/lang/NullPointerException
      // 01d: dup
      // 01e: getstatic com/l7tech/server/transport/SsgConnectorManagerImpl.t [Ljava/lang/String;
      // 021: bipush 14
      // 023: aaload
      // 024: invokespecial java/lang/NullPointerException.<init> (Ljava/lang/String;)V
      // 027: athrow
      // 028: invokestatic com/l7tech/server/transport/SsgConnectorManagerImpl.a (Ljava/lang/Exception;)Ljava/lang/Exception;
      // 02b: athrow
      // 02c: aconst_null
      // 02d: astore 3
      // 02e: getstatic com/l7tech/gateway/common/transport/SsgConnector.SCHEME_HTTP Ljava/lang/String;
      // 031: aload 1
      // 032: invokevirtual java/lang/String.equals (Ljava/lang/Object;)Z
      // 035: ifeq 040
      // 038: aload 0
      // 039: getfield com/l7tech/server/transport/SsgConnectorManagerImpl.p Ljava/util/Map;
      // 03c: astore 3
      // 03d: goto 04f
      // 040: getstatic com/l7tech/gateway/common/transport/SsgConnector.SCHEME_HTTPS Ljava/lang/String;
      // 043: aload 1
      // 044: invokevirtual java/lang/String.equals (Ljava/lang/Object;)Z
      // 047: ifeq 04f
      // 04a: aload 0
      // 04b: getfield com/l7tech/server/transport/SsgConnectorManagerImpl.q Ljava/util/Map;
      // 04e: astore 3
      // 04f: aload 3
      // 050: ifnonnull 05b
      // 053: aconst_null
      // 054: goto 065
      // 057: invokestatic com/l7tech/server/transport/SsgConnectorManagerImpl.a (Ljava/lang/Exception;)Ljava/lang/Exception;
      // 05a: athrow
      // 05b: aload 3
      // 05c: aload 2
      // 05d: invokeinterface java/util/Map.get (Ljava/lang/Object;)Ljava/lang/Object; 2
      // 062: checkcast com/l7tech/gateway/common/transport/SsgConnector
      // 065: astore 4
      // 067: aload 4
      // 069: ifnull 073
      // 06c: aload 4
      // 06e: areturn
      // 06f: invokestatic com/l7tech/server/transport/SsgConnectorManagerImpl.a (Ljava/lang/Exception;)Ljava/lang/Exception;
      // 072: athrow
      // 073: new java/util/HashMap
      // 076: dup
      // 077: invokespecial java/util/HashMap.<init> ()V
      // 07a: astore 4
      // 07c: aload 4
      // 07e: getstatic com/l7tech/server/transport/SsgConnectorManagerImpl.t [Ljava/lang/String;
      // 081: astore 9
      // 083: aload 9
      // 085: bipush 4
      // 086: aaload
      // 087: getstatic java/lang/Boolean.TRUE Ljava/lang/Boolean;
      // 08a: invokeinterface java/util/Map.put (Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; 3
      // 08f: pop
      // 090: aload 4
      // 092: aload 9
      // 094: bipush 23
      // 096: aaload
      // 097: aload 1
      // 098: invokeinterface java/util/Map.put (Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; 3
      // 09d: pop
      // 09e: aload 0
      // 09f: aload 4
      // 0a1: invokestatic java/util/Collections.singletonList (Ljava/lang/Object;)Ljava/util/List;
      // 0a4: invokevirtual com/l7tech/server/transport/SsgConnectorManagerImpl.findMatching (Ljava/util/Collection;)Ljava/util/List;
      // 0a7: astore 5
      // 0a9: aconst_null
      // 0aa: astore 6
      // 0ac: aload 5
      // 0ae: invokeinterface java/util/List.iterator ()Ljava/util/Iterator; 1
      // 0b3: astore 7
      // 0b5: aload 7
      // 0b7: invokeinterface java/util/Iterator.hasNext ()Z 1
      // 0bc: ifeq 0f1
      // 0bf: aload 7
      // 0c1: invokeinterface java/util/Iterator.next ()Ljava/lang/Object; 1
      // 0c6: checkcast com/l7tech/gateway/common/transport/SsgConnector
      // 0c9: astore 8
      // 0cb: aload 8
      // 0cd: aload 2
      // 0ce: invokevirtual com/l7tech/gateway/common/transport/SsgConnector.offersEndpoint (Lcom/l7tech/gateway/common/transport/SsgConnector$Endpoint;)Z
      // 0d1: ifeq 0ee
      // 0d4: aload 1
      // 0d5: aload 8
      // 0d7: invokevirtual com/l7tech/gateway/common/transport/SsgConnector.getScheme ()Ljava/lang/String;
      // 0da: invokevirtual java/lang/String.equals (Ljava/lang/Object;)Z
      // 0dd: ifeq 0ee
      // 0e0: goto 0e7
      // 0e3: invokestatic com/l7tech/server/transport/SsgConnectorManagerImpl.a (Ljava/lang/Exception;)Ljava/lang/Exception;
      // 0e6: athrow
      // 0e7: aload 8
      // 0e9: astore 6
      // 0eb: goto 0f1
      // 0ee: goto 0b5
      // 0f1: aload 6
      // 0f3: ifnull 112
      // 0f6: aload 3
      // 0f7: ifnull 112
      // 0fa: goto 101
      // 0fd: invokestatic com/l7tech/server/transport/SsgConnectorManagerImpl.a (Ljava/lang/Exception;)Ljava/lang/Exception;
      // 100: athrow
      // 101: aload 3
      // 102: aload 2
      // 103: aload 6
      // 105: invokeinterface java/util/Map.put (Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; 3
      // 10a: pop
      // 10b: goto 112
      // 10e: invokestatic com/l7tech/server/transport/SsgConnectorManagerImpl.a (Ljava/lang/Exception;)Ljava/lang/Exception;
      // 111: athrow
      // 112: aload 6
      // 114: areturn
      // try (0 -> 9): 9 com/l7tech/objectmodel/FindException
      // try (11 -> 20): 20 com/l7tech/objectmodel/FindException
      // try (39 -> 43): 43 com/l7tech/objectmodel/FindException
      // try (50 -> 54): 54 com/l7tech/objectmodel/FindException
      // try (93 -> 102): 103 com/l7tech/objectmodel/FindException
      // try (109 -> 113): 114 com/l7tech/objectmodel/FindException
      // try (111 -> 121): 122 com/l7tech/objectmodel/FindException
   }

   private void a(String var1, String var2, Endpoint var3) throws FindException {
      SsgConnector var4 = this.find(var2, var3);

      label17: {
         try {
            if (var4 == null) {
               this.n.removeProperty(var1);
               break label17;
            }
         } catch (FindException var6) {
            throw a(var6);
         }

         this.n.putProperty(var1, Integer.toString(var4.getPort()));
      }

      Logger var10000 = logger;
      String var10002 = this.n.getProperty(var1);
      String[] var5 = t;
      var10000.info(var5[1] + var2 + var5[31] + var10002);
   }

   private void a() {
      try {
         String[] var2 = t;
         this.a(var2[15], SsgConnector.SCHEME_HTTP, Endpoint.OTHER_SERVLETS);
         this.a(var2[0], SsgConnector.SCHEME_HTTPS, Endpoint.OTHER_SERVLETS);
      } catch (FindException var3) {
         logger.log(Level.WARNING, t[16] + ExceptionUtils.getMessage(var3), var3);
      }
   }

   @Override
   public String translateBindAddress(String var1, int var2) throws ListenerException {
      try {
         if (!this.looksLikeInterfaceTagName(var1)) {
            return var1;
         }
      } catch (SocketException var21) {
         throw a(var21);
      }

      Pair var3 = this.getInterfaceTagsCached();

      try {
         if (var3 == null) {
            throw new ListenerException(t[27] + var2 + t[13] + var1);
         }
      } catch (SocketException var20) {
         throw a(var20);
      }

      List var4;
      try {
         var4 = InetAddressUtil.findAllLocalInetAddresses();
      } catch (SocketException var16) {
         String var12 = ExceptionUtils.getMessage(var16);
         String var13 = var1;
         int var14 = var2;
         String[] var15 = t;
         throw new ListenerException(var15[22] + var14 + var15[9] + var13 + var15[34] + var12);
      }

      InterfaceTag var5 = this.a((Collection<InterfaceTag>)var3.right, var1);

      try {
         if (var5 == null) {
            throw new ListenerException(t[11] + var1 + t[5] + var2 + ")");
         }
      } catch (SocketException var19) {
         throw a(var19);
      }

      Set var6 = var5.getIpPatterns();
      InetAddress var7 = null;

      label65:
      for (InetAddress var9 : var4) {
         Iterator var10 = var6.iterator();

         while (true) {
            if (!var10.hasNext()) {
               continue label65;
            }

            String var11 = (String)var10.next();

            try {
               if (!InetAddressUtil.patternMatchesAddress(var11, var9)) {
                  continue;
               }

               if (var7 != null) {
                  break;
               }
            } catch (SocketException var18) {
               throw a(var18);
            }

            var7 = var9;
         }

         Logger var10000 = logger;
         Level var10001 = Level.WARNING;
         String var10003 = String.valueOf(var7);
         String[] var22 = t;
         var10000.log(var10001, var22[29] + var1 + var22[30] + var10003);
         break;
      }

      try {
         if (var7 == null) {
            throw new ListenerException(t[20] + var1 + t[8] + var2 + ")");
         }
      } catch (SocketException var17) {
         throw a(var17);
      }

      return var7.getHostAddress();
   }

   @Transactional(propagation = Propagation.SUPPORTS)
   @Override
   public void registerTransportProtocol(TransportDescriptor param1, TransportModule param2) {
      // $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: invokevirtual com/l7tech/gateway/common/transport/TransportDescriptor.getScheme ()Ljava/lang/String;
      // 04: astore 3
      // 05: aload 3
      // 06: ifnull 1b
      // 09: aload 3
      // 0a: invokevirtual java/lang/String.trim ()Ljava/lang/String;
      // 0d: invokevirtual java/lang/String.length ()I
      // 10: bipush 1
      // 11: if_icmpge 2d
      // 14: goto 1b
      // 17: invokestatic com/l7tech/server/transport/SsgConnectorManagerImpl.a (Ljava/lang/Exception;)Ljava/lang/Exception;
      // 1a: athrow
      // 1b: new java/lang/IllegalArgumentException
      // 1e: dup
      // 1f: getstatic com/l7tech/server/transport/SsgConnectorManagerImpl.t [Ljava/lang/String;
      // 22: bipush 7
      // 24: aaload
      // 25: invokespecial java/lang/IllegalArgumentException.<init> (Ljava/lang/String;)V
      // 28: athrow
      // 29: invokestatic com/l7tech/server/transport/SsgConnectorManagerImpl.a (Ljava/lang/Exception;)Ljava/lang/Exception;
      // 2c: athrow
      // 2d: aload 0
      // 2e: getfield com/l7tech/server/transport/SsgConnectorManagerImpl.r Ljava/util/concurrent/ConcurrentMap;
      // 31: aload 3
      // 32: new com/l7tech/util/Pair
      // 35: dup
      // 36: aload 1
      // 37: aload 2
      // 38: invokespecial com/l7tech/util/Pair.<init> (Ljava/lang/Object;Ljava/lang/Object;)V
      // 3b: invokeinterface java/util/concurrent/ConcurrentMap.put (Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; 3
      // 40: checkcast com/l7tech/util/Pair
      // 43: astore 4
      // 45: aload 4
      // 47: ifnull 77
      // 4a: aload 4
      // 4c: getfield com/l7tech/util/Pair.left Ljava/lang/Object;
      // 4f: aload 1
      // 50: if_acmpeq 77
      // 53: goto 5a
      // 56: invokestatic com/l7tech/server/transport/SsgConnectorManagerImpl.a (Ljava/lang/Exception;)Ljava/lang/Exception;
      // 59: athrow
      // 5a: getstatic com/l7tech/server/transport/SsgConnectorManagerImpl.logger Ljava/util/logging/Logger;
      // 5d: getstatic java/util/logging/Level.WARNING Ljava/util/logging/Level;
      // 60: aload 3
      // 61: getstatic com/l7tech/server/transport/SsgConnectorManagerImpl.t [Ljava/lang/String;
      // 64: bipush 26
      // 66: aaload
      // 67: swap
      // 68: 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" ]
      // 6d: invokevirtual java/util/logging/Logger.log (Ljava/util/logging/Level;Ljava/lang/String;)V
      // 70: goto 77
      // 73: invokestatic com/l7tech/server/transport/SsgConnectorManagerImpl.a (Ljava/lang/Exception;)Ljava/lang/Exception;
      // 76: athrow
      // 77: return
      // try (3 -> 10): 11 java/lang/NullPointerException
      // try (5 -> 20): 20 java/lang/NullPointerException
      // try (33 -> 39): 40 java/lang/NullPointerException
      // try (35 -> 51): 52 java/lang/NullPointerException
   }

   @Transactional(propagation = Propagation.SUPPORTS)
   @Override
   public TransportModule unregisterTransportProtocol(String var1) {
      Pair var2 = this.r.remove(var1);

      try {
         if (var2 != null) {
            return (TransportModule)var2.right;
         }
      } catch (NullPointerException var3) {
         throw a(var3);
      }

      return null;
   }

   @Transactional(propagation = Propagation.SUPPORTS)
   @Override
   public TransportDescriptor[] getTransportProtocols() {
      ArrayList var1 = new ArrayList();

      for (Pair var4 : this.r.values()) {
         var1.add((TransportDescriptor)var4.left);
      }

      return var1.toArray(new TransportDescriptor[var1.size()]);
   }

   @Transactional(propagation = Propagation.SUPPORTS)
   @Override
   public PortRanges getReservedPorts() {
      ArrayList var1 = new ArrayList();
      String[] var11 = t;
      String var2 = ConfigFactory.getProperty(var11[19], null);
      if (var2 != null) {
         String[] var3 = var2.split(",");

         for (String var7 : var3) {
            var11 = t;
            String[] var8 = var7.split(var11[10], 2);
            if (var8.length > 0) {
               try {
                  int var9 = Integer.parseInt(var8[0]);

                  int var10000;
                  label31: {
                     try {
                        if (var8.length < 2) {
                           var10000 = var9;
                           break label31;
                        }
                     } catch (IllegalArgumentException var12) {
                        throw a(var12);
                     }

                     var10000 = Integer.parseInt(var8[1]);
                  }

                  int var10 = var10000;
                  var1.add(new PortRange(var9, var10, false));
               } catch (IllegalArgumentException var13) {
                  logger.log(Level.WARNING, t[21]);
               }
            }
         }
      }

      return new PortRanges(var1);
   }

   protected boolean looksLikeInterfaceTagName(String 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 1
      // 01: ifnull 23
      // 04: aload 1
      // 05: invokevirtual java/lang/String.length ()I
      // 08: bipush 1
      // 09: if_icmplt 23
      // 0c: goto 13
      // 0f: invokestatic com/l7tech/server/transport/SsgConnectorManagerImpl.a (Ljava/lang/Exception;)Ljava/lang/Exception;
      // 12: athrow
      // 13: aload 1
      // 14: ldc ":"
      // 16: invokevirtual java/lang/String.contains (Ljava/lang/CharSequence;)Z
      // 19: ifeq 29
      // 1c: goto 23
      // 1f: invokestatic com/l7tech/server/transport/SsgConnectorManagerImpl.a (Ljava/lang/Exception;)Ljava/lang/Exception;
      // 22: athrow
      // 23: bipush 0
      // 24: ireturn
      // 25: invokestatic com/l7tech/server/transport/SsgConnectorManagerImpl.a (Ljava/lang/Exception;)Ljava/lang/Exception;
      // 28: athrow
      // 29: aload 1
      // 2a: bipush 0
      // 2b: invokevirtual java/lang/String.charAt (I)C
      // 2e: istore 2
      // 2f: iload 2
      // 30: bipush 48
      // 32: if_icmplt 42
      // 35: iload 2
      // 36: bipush 57
      // 38: if_icmple 4a
      // 3b: goto 42
      // 3e: invokestatic com/l7tech/server/transport/SsgConnectorManagerImpl.a (Ljava/lang/Exception;)Ljava/lang/Exception;
      // 41: athrow
      // 42: bipush 1
      // 43: goto 4b
      // 46: invokestatic com/l7tech/server/transport/SsgConnectorManagerImpl.a (Ljava/lang/Exception;)Ljava/lang/Exception;
      // 49: athrow
      // 4a: bipush 0
      // 4b: ireturn
      // try (0 -> 6): 7 java/lang/NullPointerException
      // try (2 -> 13): 14 java/lang/NullPointerException
      // try (9 -> 18): 18 java/lang/NullPointerException
      // try (24 -> 30): 31 java/lang/NullPointerException
      // try (27 -> 35): 35 java/lang/NullPointerException
   }

   private InterfaceTag a(Collection<InterfaceTag> var1, String var2) {
      for (InterfaceTag var4 : var1) {
         try {
            if (var4.getName().equalsIgnoreCase(var2)) {
               return var4;
            }
         } catch (NullPointerException var5) {
            throw a(var5);
         }
      }

      return null;
   }

   private Pair<String, Set<InterfaceTag>> b() throws FindException, ParseException {
      String var1 = ConfigFactory.getUncachedConfig().getProperty(InterfaceTag.PROPERTY_NAME);

      Set var10000;
      label17: {
         try {
            if (var1 == null) {
               var10000 = Collections.emptySet();
               break label17;
            }
         } catch (FindException var3) {
            throw a(var3);
         }

         var10000 = InterfaceTag.parseMultiple(var1);
      }

      Set var2 = var10000;
      return new Pair(var1, var2);
   }

   protected Pair<String, Set<InterfaceTag>> getInterfaceTagsCached() {
      Pair var1 = this.s.get();
      if (var1 == null) {
         try {
            var1 = this.b();
            this.s.set(var1);
         } catch (FindException var4) {
            Logger var10000 = logger;
            Level var10001 = Level.WARNING;
            String var10002 = ExceptionUtils.getMessage(var4);
            String[] var3 = t;
            var10000.log(var10001, var3[3] + var10002, ExceptionUtils.getDebugException(var4));
         } catch (ParseException var5) {
            logger.log(Level.WARNING, t[24] + ExceptionUtils.getMessage(var5), ExceptionUtils.getDebugException(var5));
         }
      }

      return var1;
   }

   @Override
   public void propertyChange(PropertyChangeEvent 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: getstatic com/l7tech/gateway/common/transport/InterfaceTag.PROPERTY_NAME Ljava/lang/String;
      // 03: aload 1
      // 04: invokevirtual java/beans/PropertyChangeEvent.getPropertyName ()Ljava/lang/String;
      // 07: invokevirtual java/lang/String.equals (Ljava/lang/Object;)Z
      // 0a: ifne 12
      // 0d: return
      // 0e: invokestatic com/l7tech/server/transport/SsgConnectorManagerImpl.a (Ljava/lang/Exception;)Ljava/lang/Exception;
      // 11: athrow
      // 12: aload 0
      // 13: getfield com/l7tech/server/transport/SsgConnectorManagerImpl.s Ljava/util/concurrent/atomic/AtomicReference;
      // 16: invokevirtual java/util/concurrent/atomic/AtomicReference.get ()Ljava/lang/Object;
      // 19: checkcast com/l7tech/util/Pair
      // 1c: astore 2
      // 1d: aload 2
      // 1e: ifnull 2f
      // 21: aload 2
      // 22: getfield com/l7tech/util/Pair.left Ljava/lang/Object;
      // 25: ifnonnull 34
      // 28: goto 2f
      // 2b: invokestatic com/l7tech/server/transport/SsgConnectorManagerImpl.a (Ljava/lang/Exception;)Ljava/lang/Exception;
      // 2e: athrow
      // 2f: return
      // 30: invokestatic com/l7tech/server/transport/SsgConnectorManagerImpl.a (Ljava/lang/Exception;)Ljava/lang/Exception;
      // 33: athrow
      // 34: aload 0
      // 35: getfield com/l7tech/server/transport/SsgConnectorManagerImpl.s Ljava/util/concurrent/atomic/AtomicReference;
      // 38: aconst_null
      // 39: invokevirtual java/util/concurrent/atomic/AtomicReference.set (Ljava/lang/Object;)V
      // 3c: aload 0
      // 3d: invokevirtual com/l7tech/server/transport/SsgConnectorManagerImpl.getInterfaceTagsCached ()Lcom/l7tech/util/Pair;
      // 40: astore 3
      // 41: aload 3
      // 42: getfield com/l7tech/util/Pair.left Ljava/lang/Object;
      // 45: ifnonnull 50
      // 48: bipush 1
      // 49: goto 51
      // 4c: invokestatic com/l7tech/server/transport/SsgConnectorManagerImpl.a (Ljava/lang/Exception;)Ljava/lang/Exception;
      // 4f: athrow
      // 50: bipush 0
      // 51: aload 2
      // 52: getfield com/l7tech/util/Pair.left Ljava/lang/Object;
      // 55: ifnonnull 60
      // 58: bipush 1
      // 59: goto 61
      // 5c: invokestatic com/l7tech/server/transport/SsgConnectorManagerImpl.a (Ljava/lang/Exception;)Ljava/lang/Exception;
      // 5f: athrow
      // 60: bipush 0
      // 61: if_icmpne 7c
      // 64: aload 3
      // 65: getfield com/l7tech/util/Pair.left Ljava/lang/Object;
      // 68: checkcast java/lang/String
      // 6b: aload 2
      // 6c: getfield com/l7tech/util/Pair.left Ljava/lang/Object;
      // 6f: invokevirtual java/lang/String.equals (Ljava/lang/Object;)Z
      // 72: ifne 87
      // 75: goto 7c
      // 78: invokestatic com/l7tech/server/transport/SsgConnectorManagerImpl.a (Ljava/lang/Exception;)Ljava/lang/Exception;
      // 7b: athrow
      // 7c: aload 0
      // 7d: invokevirtual com/l7tech/server/transport/SsgConnectorManagerImpl.c ()V
      // 80: goto 87
      // 83: invokestatic com/l7tech/server/transport/SsgConnectorManagerImpl.a (Ljava/lang/Exception;)Ljava/lang/Exception;
      // 86: athrow
      // 87: return
      // try (0 -> 6): 6 java/lang/NullPointerException
      // try (13 -> 18): 19 java/lang/NullPointerException
      // try (15 -> 22): 22 java/lang/NullPointerException
      // try (31 -> 36): 36 java/lang/NullPointerException
      // try (39 -> 44): 44 java/lang/NullPointerException
      // try (47 -> 55): 56 java/lang/NullPointerException
      // try (48 -> 60): 61 java/lang/NullPointerException
   }

   private void c() {
      try {
         if (this.applicationContext == null) {
            return;
         }
      } catch (FindException var6) {
         throw a(var6);
      }

      ArrayList var1 = new ArrayList();

      try {
         for (SsgConnector var3 : this.findAll()) {
            try {
               if (this.looksLikeInterfaceTagName(var3.getProperty(SsgConnector.PROP_BIND_ADDRESS))) {
                  var1.add(var3.getGoid());
               }
            } catch (FindException var4) {
               throw a(var4);
            }
         }
      } catch (FindException var5) {
         logger.log(Level.WARNING, t[2] + ExceptionUtils.getMessage(var5), ExceptionUtils.getMessage(var5));
      }

      EntityInvalidationEvent var7 = new EntityInvalidationEvent(
         this, SsgConnector.class, var1.toArray(new Goid[var1.size()]), ArrayUtils.fill(new char[var1.size()], 'U')
      );
      this.applicationContext.publishEvent(var7);
   }

   protected void initDao() throws Exception {
      super.initDao();

      for (SsgConnector var2 : this.findAll()) {
         try {
            if (var2.isEnabled()) {
               this.o.put(var2.getGoid(), var2);
            }
         } catch (Exception var3) {
            throw a(var3);
         }
      }

      this.a();
      this.d();
   }

   public void destroy() throws Exception {
      this.e();
   }

   private void d() {
      File var1 = this.n.getLocalDirectoryProperty(t[33], true);
      Collection var2 = new ArrayList<>(this.o.values());
      var2 = Functions.map(var2, new b(this));
      FirewallUtils.openFirewallForConnectors(var1, var2);
   }

   private SsgConnector a(SsgConnector var1) {
      SsgConnector var2 = var1.getCopy();

      try {
         String var3 = var1.getProperty(SsgConnector.PROP_BIND_ADDRESS);
         if (this.looksLikeInterfaceTagName(var3)) {
            String var4 = this.translateBindAddress(var3, var1.getPort());
            var2.putProperty(SsgConnector.PROP_BIND_ADDRESS, var4);
         }
      } catch (ListenerException var5) {
         logger.log(Level.WARNING, t[25] + ExceptionUtils.getMessage(var5), ExceptionUtils.getDebugException(var5));
      }

      return var2;
   }

   private void e() {
      File var1 = this.n.getLocalDirectoryProperty(t[17], true);
      FirewallUtils.closeFirewallForConnectors(var1);
   }

   private void a(ApplicationEvent var1) {
      try {
         if (!(var1 instanceof EntityInvalidationEvent)) {
            return;
         }
      } catch (NullPointerException var10) {
         throw a(var10);
      }

      EntityInvalidationEvent var2 = (EntityInvalidationEvent)var1;

      try {
         if (!SsgConnector.class.isAssignableFrom(var2.getEntityClass())) {
            return;
         }
      } catch (NullPointerException var9) {
         throw a(var9);
      }

      Goid[] var3 = var2.getEntityIds();
      char[] var4 = var2.getEntityOperations();

      for (int var5 = 0; var5 < var4.length; var5++) {
         char var6 = var4[var5];
         Goid var7 = var3[var5];

         try {
            switch (var6) {
               case 'D':
                  this.o.remove(var7);
                  continue;
            }
         } catch (NullPointerException var8) {
            throw a(var8);
         }

         this.a(var7);
      }

      this.p.clear();
      this.q.clear();
      this.a();
      this.d();
   }

   private void a(Goid 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: aload 1
      // 02: invokevirtual com/l7tech/server/transport/SsgConnectorManagerImpl.findByPrimaryKey (Lcom/l7tech/objectmodel/Goid;)Lcom/l7tech/objectmodel/PersistentEntity;
      // 05: checkcast com/l7tech/gateway/common/transport/SsgConnector
      // 08: astore 2
      // 09: aload 2
      // 0a: ifnull 2e
      // 0d: aload 2
      // 0e: invokevirtual com/l7tech/gateway/common/transport/SsgConnector.isEnabled ()Z
      // 11: ifeq 2e
      // 14: goto 1b
      // 17: invokestatic com/l7tech/server/transport/SsgConnectorManagerImpl.a (Ljava/lang/Exception;)Ljava/lang/Exception;
      // 1a: athrow
      // 1b: aload 0
      // 1c: getfield com/l7tech/server/transport/SsgConnectorManagerImpl.o Ljava/util/Map;
      // 1f: aload 1
      // 20: aload 2
      // 21: invokeinterface java/util/Map.put (Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; 3
      // 26: pop
      // 27: goto 39
      // 2a: invokestatic com/l7tech/server/transport/SsgConnectorManagerImpl.a (Ljava/lang/Exception;)Ljava/lang/Exception;
      // 2d: athrow
      // 2e: aload 0
      // 2f: getfield com/l7tech/server/transport/SsgConnectorManagerImpl.o Ljava/util/Map;
      // 32: aload 1
      // 33: invokeinterface java/util/Map.remove (Ljava/lang/Object;)Ljava/lang/Object; 2
      // 38: pop
      // 39: goto 63
      // 3c: astore 2
      // 3d: getstatic com/l7tech/server/transport/SsgConnectorManagerImpl.logger Ljava/util/logging/Logger;
      // 40: getstatic java/util/logging/Level.WARNING Ljava/util/logging/Level;
      // 43: aload 1
      // 44: invokestatic java/lang/String.valueOf (Ljava/lang/Object;)Ljava/lang/String;
      // 47: aload 2
      // 48: invokestatic com/l7tech/util/ExceptionUtils.getMessage (Ljava/lang/Throwable;)Ljava/lang/String;
      // 4b: getstatic com/l7tech/server/transport/SsgConnectorManagerImpl.t [Ljava/lang/String;
      // 4e: astore 3
      // 4f: aload 3
      // 50: bipush 32
      // 52: aaload
      // 53: dup_x2
      // 54: pop
      // 55: aload 3
      // 56: bipush 12
      // 58: aaload
      // 59: swap
      // 5a: invokedynamic makeConcatWithConstants (Ljava/lang/String;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\u0001" ]
      // 5f: aload 2
      // 60: invokevirtual java/util/logging/Logger.log (Ljava/util/logging/Level;Ljava/lang/String;Ljava/lang/Throwable;)V
      // 63: return
      // try (7 -> 20): 20 com/l7tech/objectmodel/FindException
      // try (5 -> 10): 11 com/l7tech/objectmodel/FindException
      // try (0 -> 27): 28 com/l7tech/objectmodel/FindException
   }

   static {
      String[] var5 = new String[35];
      int var3 = 0;
      String var2 = "u#*E\u0010\u0002?Y28T\u0016>$c2\bU#*E\u0010\u0002?1]D(-F\t\u000bke)lQ\u0015\n*e#lG\n\u0000%t%8K\u0017\u001dkd5%J\u0002N\"\u007f2)V\u0003\u000f(tf(A\u0003\u0007%x2%K\u000b\u001dq13\"E\u0007\u0002.12#\u0004\u0003\u000b?r.lH\f\u001d?1)*\u0004\u0006\u0001%\u007f#/P\n\u001c8+f&D(-F\t\u000bke)lH\n\u000f/1/\"P\u0000\u001c-p%)\u0004\u0001\u000b-x(%P\f\u0001%b|l\u0007t(-F\t\u000b/\u001b1/?\u0004\u000e\u0000$f(l\f\u0003\u000191*%W\u0011\u000b%16#V\u0011N\tr)\"J\u0000\r?~47E.)\u0004\u0011\u001c*\u007f5<K\u0017\u001a\u000ft5/V\f\u001e?~4lI\u0010\u001d?16>K\u0013\u0007/tf-\u0004\u0015\u001c$e)/K\tN8r.)I\u0000@;1+-P\u0006\u0006.bf-J\u001cN%t2;K\u0017\u0005kp\"(V\u0000\u001d81)\"\u0004\u0011\u0006\"bf\"K\u0001\u000bk9 #VE\u0002\"b2)JE\u001e$c2l\u001113?M\u000b\tkx(8A\u0017\b*r#l\u0002Mk\u001e_)lM\u000b\u001a.c -G\u0000N/t %J\f\u001a\"~(lJ\u0004\u0003.uf\u0002+f\u001113?M\u000b\tkx(8A\u0017\b*r#l\bt((T\n\u0007%e\u000fu#*E\u0010\u0002?Y28T5\u00019eED(-F\t\u000bke)lQ\u0015\n*e#l@\u0000\b*d*8\u0004-:\u001fAf-J\u0001N\u0003E\u0012\u001cwE\u001e$c2?\u0004\u0003\u000191$9M\t\u001afx(lW\u0000\u001c=x%)W_N\fg'>`\f\u001c.r2#V\u001c\u0006b%$A\b\u000b)r)!\n\tY?t%$\n\u0016\u000b9g#>\n\u0011\u001c*\u007f5<K\u0017\u001aec#?A\u0017\u0018.u\u0016#V\u0011\u001d'_)lE\u0001\n9t5?\u0004\u0015\u000f?e#>JE\b$cf%J\u0011\u000b9w'/AE\u0000*|#(\u0004CX!\"K\u0017\u0007%vf%J\u0013\u000f'x\"lV\u0004\u0000,tf%JE\r$|h \u0013\u0011\u000b(yh?A\u0017\u0018.ch8V\u0004\u00008a)>PK\u001c.b#>R\u0000\n\u001b~48WKD(-F\t\u000bke)lH\n\u0001 13<\u0004\u000b\u000b?f)>OE\u0007%e#>B\u0004\r.bf;L\f\u0002.1 %J\u0001\u0007%vf-\u0004\b\u000f?r.lB\n\u001ck}/?P\u0000\u0000ka)>PE\u0006b%$A\b\u000b\u001eX(:E\t\u0007/1/\"P\u0000\u001c-p%)\u0004\u0001\u000b-x(%P\f\u0001%+f@D(-F\t\u000bke)lP\u0017\u000f%b*-P\u0000N)x((\u0004\u0004\n/c#?WE\u0019#x*)\u0004\u0010\u001e/p2%J\u0002N-x4)S\u0004\u0002'149H\u0000\u001dq1<\\)>AE\u001a#p(lK\u000b\u000bkp28A\b\u001e?12#\u0004\u0017\u000b,x58A\u0017N(d58K\bN?c'\"W\u0015\u00019ef<V\n\u001a$r) \u0004E_)lM\u000b\u001a.c -G\u0000N/t %J\f\u001a\"~(?\u0004\u0000\u0016\"b2w\u0004\u0010\u0000*s*)\u0004\u0011\u0001kw/\"@E\u0003*e%$\u0004\u0003\u000191*%W\u0011\u000b%16#V\u0011N)r)!\n\tY?t%$\n\u0016\u000b9g#>\n\u0011\u001c*\u007f5<K\u0017\u001aec#?A\u0017\u0018.u\u0016#V\u0011\u001d\nX(8A\u0017\b*r#lc1%#J\u0011\u000f\"\u007f5lT\u0004\u001a?t4\"WE\u0003*e%$M\u000b\tk|)>AE\u001a#p(lK\u000b\u000bk\u007f#8S\n\u001c 1'(@\u0017\u000b8b#?\u0004\n\u0000ke.%WE\u0000$u#b\u0004E9\"}*lQ\u0016\u000bkw/>W\u0011N&p2/LE\u0001-1\u000716#V\u0011Tk9D(-F\t\u000bke)lB\f\u0000/1,9W\u0011C*u\")@E\u000191k9T\u0001\u000f?t\"lG\n\u0000%t%8K\u0017N<x2$\u0004\n\u0007/1";
      int var4 = "u#*E\u0010\u0002?Y28T\u0016>$c2\bU#*E\u0010\u0002?1]D(-F\t\u000bke)lQ\u0015\n*e#lG\n\u0000%t%8K\u0017\u001dkd5%J\u0002N\"\u007f2)V\u0003\u000f(tf(A\u0003\u0007%x2%K\u000b\u001dq13\"E\u0007\u0002.12#\u0004\u0003\u000b?r.lH\f\u001d?1)*\u0004\u0006\u0001%\u007f#/P\n\u001c8+f&D(-F\t\u000bke)lH\n\u000f/1/\"P\u0000\u001c-p%)\u0004\u0001\u000b-x(%P\f\u0001%b|l\u0007t(-F\t\u000b/\u001b1/?\u0004\u000e\u0000$f(l\f\u0003\u000191*%W\u0011\u000b%16#V\u0011N\tr)\"J\u0000\r?~47E.)\u0004\u0011\u001c*\u007f5<K\u0017\u001a\u000ft5/V\f\u001e?~4lI\u0010\u001d?16>K\u0013\u0007/tf-\u0004\u0015\u001c$e)/K\tN8r.)I\u0000@;1+-P\u0006\u0006.bf-J\u001cN%t2;K\u0017\u0005kp\"(V\u0000\u001d81)\"\u0004\u0011\u0006\"bf\"K\u0001\u000bk9 #VE\u0002\"b2)JE\u001e$c2l\u001113?M\u000b\tkx(8A\u0017\b*r#l\u0002Mk\u001e_)lM\u000b\u001a.c -G\u0000N/t %J\f\u001a\"~(lJ\u0004\u0003.uf\u0002+f\u001113?M\u000b\tkx(8A\u0017\b*r#l\bt((T\n\u0007%e\u000fu#*E\u0010\u0002?Y28T5\u00019eED(-F\t\u000bke)lQ\u0015\n*e#l@\u0000\b*d*8\u0004-:\u001fAf-J\u0001N\u0003E\u0012\u001cwE\u001e$c2?\u0004\u0003\u000191$9M\t\u001afx(lW\u0000\u001c=x%)W_N\fg'>`\f\u001c.r2#V\u001c\u0006b%$A\b\u000b)r)!\n\tY?t%$\n\u0016\u000b9g#>\n\u0011\u001c*\u007f5<K\u0017\u001aec#?A\u0017\u0018.u\u0016#V\u0011\u001d'_)lE\u0001\n9t5?\u0004\u0015\u000f?e#>JE\b$cf%J\u0011\u000b9w'/AE\u0000*|#(\u0004CX!\"K\u0017\u0007%vf%J\u0013\u000f'x\"lV\u0004\u0000,tf%JE\r$|h \u0013\u0011\u000b(yh?A\u0017\u0018.ch8V\u0004\u00008a)>PK\u001c.b#>R\u0000\n\u001b~48WKD(-F\t\u000bke)lH\n\u0001 13<\u0004\u000b\u000b?f)>OE\u0007%e#>B\u0004\r.bf;L\f\u0002.1 %J\u0001\u0007%vf-\u0004\b\u000f?r.lB\n\u001ck}/?P\u0000\u0000ka)>PE\u0006b%$A\b\u000b\u001eX(:E\t\u0007/1/\"P\u0000\u001c-p%)\u0004\u0001\u000b-x(%P\f\u0001%+f@D(-F\t\u000bke)lP\u0017\u000f%b*-P\u0000N)x((\u0004\u0004\n/c#?WE\u0019#x*)\u0004\u0010\u001e/p2%J\u0002N-x4)S\u0004\u0002'149H\u0000\u001dq1<\\)>AE\u001a#p(lK\u000b\u000bkp28A\b\u001e?12#\u0004\u0017\u000b,x58A\u0017N(d58K\bN?c'\"W\u0015\u00019ef<V\n\u001a$r) \u0004E_)lM\u000b\u001a.c -G\u0000N/t %J\f\u001a\"~(?\u0004\u0000\u0016\"b2w\u0004\u0010\u0000*s*)\u0004\u0011\u0001kw/\"@E\u0003*e%$\u0004\u0003\u000191*%W\u0011\u000b%16#V\u0011N)r)!\n\tY?t%$\n\u0016\u000b9g#>\n\u0011\u001c*\u007f5<K\u0017\u001aec#?A\u0017\u0018.u\u0016#V\u0011\u001d\nX(8A\u0017\b*r#lc1%#J\u0011\u000f\"\u007f5lT\u0004\u001a?t4\"WE\u0003*e%$M\u000b\tk|)>AE\u001a#p(lK\u000b\u000bk\u007f#8S\n\u001c 1'(@\u0017\u000b8b#?\u0004\n\u0000ke.%WE\u0000$u#b\u0004E9\"}*lQ\u0016\u000bkw/>W\u0011N&p2/LE\u0001-1\u000716#V\u0011Tk9D(-F\t\u000bke)lB\f\u0000/1,9W\u0011C*u\")@E\u000191k9T\u0001\u000f?t\"lG\n\u0000%t%8K\u0017N<x2$\u0004\n\u0007/1"
         .length();
      char var1 = 16;
      int var7 = -1;

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

         while (true) {
            String var8 = b(var10000, a(var10001));
            switch (var10002) {
               case 0:
                  var5[var3++] = var8;
                  if ((var7 += var1) >= var4) {
                     t = var5;
                     m = t[28];
                     logger = Logger.getLogger(SsgConnectorManagerImpl.class.getName());
                     return;
                  }

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

                  var2 = "?\u007ff8TDv*j{\u000eD\u0002s>";
                  var4 = "?\u007ff8TDv*j{\u000eD\u0002s>".length();
                  var1 = '\f';
                  var7 = -1;
            }

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

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

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

      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 -> 82;
            case 1 -> 5;
            case 2 -> 15;
            case 3 -> 103;
            case 4 -> 38;
            case 5 -> 45;
            default -> 8;
         });
      }

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