<output id="qn6qe"></output>

    1. <output id="qn6qe"><tt id="qn6qe"></tt></output>
    2. <strike id="qn6qe"></strike>

      亚洲 日本 欧洲 欧美 视频,日韩中文字幕有码av,一本一道av中文字幕无码,国产线播放免费人成视频播放,人妻少妇偷人无码视频,日夜啪啪一区二区三区,国产尤物精品自在拍视频首页,久热这里只有精品12

      IDEA

      下載:https://www.jetbrains.com/idea/download

      key:https://zhile.io & https://gitee.com/pengzhile/ide-eval-resetterlookdiv.com & https://33tool.com/idea & https://jetbra.in/s & j1 & j2 & j3

      環境變量 IDEA_VM_OPTIONS(idea64.exe.vmoptions)、IDEA_PROPERTIES(idea.properties):https://www.jetbrains.com/help/idea/tuning-the-ide.html

      ::https://plugins.zhile.io & IDE Eval Reset
      ::http://fls.jetbrains-agent.com
      @echo off
      ::setlocal enabledelayedexpansion
      
      set array=IDEA CLION
      for %%i in (%array%) do (
        setx %%i_VM_OPTIONS %cd%\jetbrains.vmoptions
        for /f %%j in ('powershell -Command "'%%i'.ToLower()"') do (
          setx %%i_PROPERTIES %cd%\%%j.properties
        )
      )
      
      (
      echo --add-opens=java.base/jdk.internal.org.objectweb.asm=ALL-UNNAMED
      echo --add-opens=java.base/jdk.internal.org.objectweb.asm.tree=ALL-UNNAMED
      echo -javaagent:%cd%\ja-netfilter.jar=jetbrains
      ) > jetbrains.vmoptions
      (
      echo idea.config.path=../../ideaIUData/config
      echo idea.system.path=../../ideaIUData/system
      echo idea.plugins.path=../../ideaIUData/plugins
      echo idea.log.path=../../ideaIUData/log
      ) > idea.properties
      (
      echo idea.config.path=../../CLionData/config
      echo idea.system.path=../../CLionData/system
      echo idea.plugins.path=../../CLionData/plugins
      echo idea.log.path=../../CLionData/log
      ) > clion.properties
      View Code

      環境變量 IDEA_JDK:https://www.jetbrains.com/help/idea/switching-boot-jdk.html

      setx IDEA_JDK C:\JetBrains\jbr
      setx CLION_JDK C:\JetBrains\jbr
      mklink /j "C:\JetBrains\CLion\jbr" "C:\JetBrains\jbr"
      mklink /j "C:\JetBrains\ideaIU\jbr" "C:\JetBrains\jbr"
      View Code

      OpenJDK:https://adoptium.net/zh-CN/temurin/releases

      OracleJDK:https://www.oracle.com/java/technologies/downloads,LTS 路線圖:https://www.oracle.com/java/technologies/java-se-support-roadmap.html

      JetBrainsJDK(JBRSDK):https://github.com/JetBrains/JetBrainsRuntime

      JDK 8 后沒有單獨的 JRE:jlink --module-path jmods --add-modules java.desktop --output jre

      編碼規范

      阿里巴巴 Java 開發手冊:https://github.com/alibaba/p3c & https://developer.aliyun.com/special/tech-java & https://developer.aliyun.com/ebook

      Google Java 編程風格指南:https://google.github.io/styleguide/javaguide.html & https://hawstein.com/2014/01/20/google-java-style

      相關鏈接

      Java 教程:https://docs.oracle.com/javase/tutorial & https://dev.java/learn

      JavaSE & JVM 規范:https://docs.oracle.com/javase/specs & https://docs.oracle.com/en/java/javase

      JavaEE:https://javaee.github.io & https://jakarta.ee

      Servlet:https://jcp.org/en/jsr/detail?id=369

      RFC 2616 & RFC 7540:https://httpwg.org

      Android:https://developer.android.google.cn & https://developers.google.cn

      ECMAScript-262:https://www.ecma-international.org/publications-and-standards/standards

      Apache:https://archive.apache.org

      JDK GoF:https://stackoverflow.com/questions/1673841/examples-of-gof-design-patterns-in-javas-core-libraries & https://refactoringguru.cn/design-patterns/catalog

      JSON:https://www.json.org/json-zh.html & YAML:https://yaml.org

      其它

      intel:https://www.intel.cn/content/www/cn/zh/developer/articles/technical/intel-sdm.html & https://www.intel.cn/content/www/cn/zh/products/docs/processors/core/core-technical-resources.html

      amd:https://www.amd.com/zh-cn/search/documentation/hub.html 搜索 AMD64 Architecture Programmer's Manual Volume 選擇 Relevance 排序

      csdiy.wikihttps://github.com/PKUFlyingPig/cs-self-learninghttps://oi-wiki.orghttps://ctf-wiki.orghttps://wiki.osdev.orghttps://oldlinux.org

      JD:https://jelly.jd.com

      MT:https://tech.meituan.com

      ruanyifeng:https://ruanyifeng.com/blog & https://wangdoc.com

      liaoxuefeng:https://liaoxuefeng.com

      酷殼:https://coolshell.cn & https://coolshell.org

      restapi:https://restapitutorial.com

      drawio:https://www.drawio.com

      https://github.com/johanjanssen/JavaHiddenGems

       

      一、常用配置

      便攜化配置(bin\idea.properties)

      idea.config.path=../../ideaIU_data/config
      idea.system.path=../../ideaIU_data/system
      idea.plugins.path=../../ideaIU_data/plugins
      idea.log.path=../../ideaIU_data/log
      
      
      
      idea.config.path=../../CLion_data/config
      idea.system.path=../../CLion_data/system
      idea.plugins.path=../../CLion_data/plugins
      idea.log.path=../../CLion_data/log

      編碼格式(bin\idea64.exe.vmoptions)

      -Dfile.encoding=UTF-8
      -Dconsole.encoding=UTF-8

      顯示內存占用(內存指示器)

      新版本中顯示內存占用,雙擊 shift,輸入 memory。或菜單欄中的 View -> Appearance -> Status Bar Widgets -> Memory Indicator。

      啟動不自動加載項目

      自動去掉行尾空格

      新版本設置

      方法分割線

      CTRL 代碼跳轉時打開新窗口

      護眼:C7EDCC,RGB:199,237,204

      新建文件默認換行符

      代碼風格

      下載 intellij-java-google-style.xml https://github.com/google/styleguide

      導入文件

      設置風格,然后就可以使用了

      Ctrl + Alt + L:格式化代碼
      Ctrl + Alt + I:自動縮進
      Ctrl + Alt + O:整理 import

      代碼注釋風格

      勾選 Add a space at comment start,會在 // 后自動添加空格

      properties 配置文件內容顯示中文

      git commit 側邊欄

      調試 JDK 源碼

      搜索結果數量

       

      二、快捷鍵

      To view the keymap reference as PDF, choose Help | Keymap Reference from the main menu.

       

      三、其他工具

      添加 javap -c -p -v 快捷方式

      LightEdit 模式,創建快捷方式:D:\ideaIU\bin\idea64.exe LightEdit

      import org.bouncycastle.asn1.x500.X500Name;
      import org.bouncycastle.asn1.x509.SubjectPublicKeyInfo;
      import org.bouncycastle.cert.X509v3CertificateBuilder;
      import org.bouncycastle.cert.jcajce.JcaX509CertificateConverter;
      import org.bouncycastle.jce.provider.BouncyCastleProvider;
      import org.bouncycastle.openssl.PEMKeyPair;
      import org.bouncycastle.openssl.PEMParser;
      import org.bouncycastle.openssl.jcajce.JcaPEMKeyConverter;
      import org.bouncycastle.openssl.jcajce.JcaPEMWriter;
      import org.bouncycastle.operator.ContentSigner;
      import org.bouncycastle.operator.jcajce.JcaContentSignerBuilder;
      
      import java.io.*;
      import java.lang.instrument.Instrumentation;
      import java.math.BigInteger;
      import java.net.HttpURLConnection;
      import java.net.URL;
      import java.nio.charset.StandardCharsets;
      import java.nio.file.Files;
      import java.nio.file.Paths;
      import java.security.*;
      import java.security.cert.CertificateFactory;
      import java.security.cert.X509Certificate;
      import java.security.interfaces.RSAPublicKey;
      import java.time.LocalDate;
      import java.time.ZoneId;
      import java.time.format.DateTimeFormatter;
      import java.util.*;
      import java.util.stream.Collectors;
      
      /**
       * https://bbs.kanxue.com/thread-271052.htm
       * https://blog.novitechie.com/archives/idea-cracking
       * https://www.aliatry.com/2024/04/07/idea-agent-%E6%BF%80%E6%B4%BB%E5%8E%9F%E7%90%86
       * https://github.com/PastKing/Jetbrains-Key
       * https://github.com/NotoChen/Jetbrains-Help
       * https://github.com/iot/jetbra
       * https://www.xuzhengtong.com/2022/07/25/ja-netfilter/ja-netfilter-plugins-power
       * https://gitee.com/ja-netfilter
       * https://bbs.kanxue.com/thread-271578.htm
       */
      public class JetBrains {
          public static void main(String[] args) throws Exception {
              Security.addProvider(new BouncyCastleProvider()); // bcpkix-jdk18on
              generatorCrtKey(10);
      
              URL url = new URL("https://data.services.jetbrains.com/products?fields=code");
              HttpURLConnection connection = (HttpURLConnection) url.openConnection();
              // String body = new Scanner(connection.getInputStream(), StandardCharsets.UTF_8.name()).useDelimiter("\\A").next();
              String body = new BufferedReader(new InputStreamReader(connection.getInputStream(), StandardCharsets.UTF_8)).lines().collect(Collectors.joining());
              generatorLicense("Jetbrains", 10, Arrays.stream(body.split("},\\{")).map(x -> x.split(":")[1].replaceAll("[\"{}\\[\\]]", "")).toArray(String[]::new));
      
              generatorLicense("IDEA", 10, "II", "PCWMP", "PSI", "PDB");
              generatorLicense("CLion", 10, "CL", "PCWMP", "PSI");
              generatorPowerConf();
          }
      
          public static void premain(String args, Instrumentation inst) {
          }
      
          static void generatorCrtKey(long year) throws Exception {
              KeyPairGenerator keyPairGenerator = KeyPairGenerator.getInstance("RSA");
              // 指定密鑰長度為 4096,并用一個安全的隨機數生成器來生成密鑰
              keyPairGenerator.initialize(4096, new SecureRandom());
              KeyPair keyPair = keyPairGenerator.generateKeyPair(); // 生成 RSA 密鑰對
              PrivateKey privateKey = keyPair.getPrivate();
              PublicKey publicKey = keyPair.getPublic();
              // System.out.println("-----BEGIN PRIVATE KEY-----\n" + Base64.getEncoder().encodeToString(privateKey.getEncoded()) + "\n-----END PRIVATE KEY-----");
              // System.out.println("-----BEGIN PUBLIC KEY-----\n" + Base64.getEncoder().encodeToString(publicKey.getEncoded()) + "\n-----END PUBLIC KEY-----");
      
              // KeyFactory keyFactory = KeyFactory.getInstance("RSA");
              // privateKey = keyFactory.generatePrivate(new PKCS8EncodedKeySpec(Base64.getDecoder().decode("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")));
              // publicKey = keyFactory.generatePublic(new X509EncodedKeySpec(Base64.getDecoder().decode("MIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEApW49ygc1Xeh9UqjhoqgL9itgFuaViLKbJp0G3wFXBic0/0av9Yx4+dvC8tY9YsBjuC0Om06fFdWkrWPH+32Pzbg73sVD3ORZKrkUpQyjhViMjHN07hBOvcaf1YZlcufg0kwu3trvMAK7PeLHazuJnk2DWgfLgGLGDqeVf3ACuzFauRrj6+8DuXO41NGCYmnEk4rn+oGXPibWM0Hy2bya1qFzLo0A6w9o06uUOQxar58OKwb1sBTgk5QlESMHRz+Eiibh0csVTB2NbRN6rTDSILS8ybb+1S09vrGVgTRQCncYW8QJ2mQRYASza6OAKrxWTlJs8JTzWY5b7JfqZElZWwJ6WrbqRUZwiuYOSKHViy499cO+zOJCULjng1kHGfcbp9pxnz1dIy9T//2KLScjPsxTdl23XVtw9s93YQIv+QLfJVo2UT43NzgHbJ0kfVuKRFpUGEWeE78OL7K6rE32VGWeDDbEMEfaJMCjqUWtO5nFhnLLUJrzQCmo1qdU/4QXyVVSSyIAYe+n5rY0SzQRrU0v7UPqvDnewoGHgehaaAv2mav4u08zfAqjv1RMuYJyW8jjXDMoK3pwoi0zNfjdRtJf7mpebtAdqQOu8LBcyfWnzXYLTojNVbjgmpuXnK1ALNuoZIMKnfxrMoMV4WqRWpzYDbgMFR1wjGRURTFtINsCAwEAAQ==")));
      
              // 證書信息,用于構建 X.509 證書
              // 頒發者(issuerName)、主題(subjectName)、序列號(serialNumber)、有效期起始時間(notBefore)、有效期結束時間(notAfter)
              X500Name issuerName = new X500Name("CN=JetProfile CA"), subjectName = new X500Name("CN=Jetbrains");
              BigInteger serialNumber = BigInteger.valueOf(System.currentTimeMillis());
              Date notBefore = Date.from(LocalDate.now().minusYears(1).atStartOfDay(ZoneId.systemDefault()).toInstant());
              Date notAfter = Date.from(LocalDate.now().plusYears(year).atStartOfDay(ZoneId.systemDefault()).toInstant());
              // 創建證書構建器,包括了頒發者、主題、序列號、有效期、主題和公鑰信息
              X509v3CertificateBuilder certBuilder = new X509v3CertificateBuilder(issuerName, serialNumber, notBefore, notAfter, subjectName, SubjectPublicKeyInfo.getInstance(publicKey.getEncoded()));
              // 創建內容簽名器,指定了使用 SHA256withRSA 算法對證書用私鑰進行簽名
              ContentSigner signer = new JcaContentSignerBuilder("SHA256withRSA").build(privateKey);
              // 使用證書轉換器(JcaX509CertificateConverter)將證書構建器以及簽名者信息轉換成 X.509 證書格式
              X509Certificate cert = new JcaX509CertificateConverter().getCertificate(certBuilder.build(signer));
              // System.out.println("-----BEGIN CERTIFICATE-----\n" + Base64.getEncoder().encodeToString(cert.getEncoded()) + "\n-----END CERTIFICATE-----");
      
              // cert = (X509Certificate) CertificateFactory.getInstance("X.509").generateCertificate(new ByteArrayInputStream(Base64.getDecoder().decode("MIIEqjCCApKgAwIBAgIGAY/DcZtdMA0GCSqGSIb3DQEBCwUAMBgxFjAUBgNVBAMMDUpldFByb2ZpbGUgQ0EwHhcNMjMwNTI4MTYwMDAwWhcNMjUwNTI4MTYwMDAwWjAUMRIwEAYDVQQDDAlKZXRicmFpbnMwggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQClbj3KBzVd6H1SqOGiqAv2K2AW5pWIspsmnQbfAVcGJzT/Rq/1jHj528Ly1j1iwGO4LQ6bTp8V1aStY8f7fY/NuDvexUPc5FkquRSlDKOFWIyMc3TuEE69xp/VhmVy5+DSTC7e2u8wArs94sdrO4meTYNaB8uAYsYOp5V/cAK7MVq5GuPr7wO5c7jU0YJiacSTiuf6gZc+JtYzQfLZvJrWoXMujQDrD2jTq5Q5DFqvnw4rBvWwFOCTlCURIwdHP4SKJuHRyxVMHY1tE3qtMNIgtLzJtv7VLT2+sZWBNFAKdxhbxAnaZBFgBLNro4AqvFZOUmzwlPNZjlvsl+pkSVlbAnpatupFRnCK5g5IodWLLj31w77M4kJQuOeDWQcZ9xun2nGfPV0jL1P//YotJyM+zFN2XbddW3D2z3dhAi/5At8lWjZRPjc3OAdsnSR9W4pEWlQYRZ4Tvw4vsrqsTfZUZZ4MNsQwR9okwKOpRa07mcWGcstQmvNAKajWp1T/hBfJVVJLIgBh76fmtjRLNBGtTS/tQ+q8Od7CgYeB6FpoC/aZq/i7TzN8CqO/VEy5gnJbyONcMygrenCiLTM1+N1G0l/ual5u0B2pA67wsFzJ9afNdgtOiM1VuOCam5ecrUAs26hkgwqd/GsygxXhapFanNgNuAwVHXCMZFRFMW0g2wIDAQABMA0GCSqGSIb3DQEBCwUAA4ICAQBkffl8DL/0rwzTJRq82BkrUkKdso6qC6cr4ZLiD/l6+649YKKjBO69J1I8n1NQ0mFY4/JKi9RpEeYlfLhje5C3knqH+udr74DrBUCcBsbzyz/aAUtbiBuDdRDCI2kIPAZFtz79PiIdPrcPLYdnZBzCx4eNYO60dsJRM62Az82HPUJMDqmOxWM6mm6J3TBDnoKqJNbUqVtkyc8GZpa5z66PTpa+m8kxU2nz2XkZIdrA5FNHrIi72A1xZfyUgV/Kt0KEBy6x3k0ponnvKqrHDCpCI1P+KNrIp1eudzeK1TITe85/c8O/p42Ka3ouKvJ3c1c5XxtvZ3MgVVxE/aEqmGJuKKcdUfNTvYTyo+JPTtww++iImJl2wSceTA5k5rDEnd6p09DekkyJumhJFG8faylzI66x3L3W7taiQBTR7uXGEt5twGJf/HyVkU26bnGI8MGrYNdhXPNVpGWrUjhirh//ze2VY7hdILYW0P9XUmpLcz2ngYBdi3id5W6rjIaEm86gQMPZ9nUO1p7ViEwfLmS8lFhlLYRo0dl9nD+OqypSoLSOHySXDuhI/rYxTq9lJ4v83//4Db61Qv2BGO8hkKaK3zWXQQvsfQOzp0bJOA05fgKi65Uo0NrlQqDtaIBaXhGIvJWg/ZLjs7/BcJN47eGQlnApwqghREXcOyiCOEgLWg==")));
      
              if (Files.exists(Paths.get("ca.key"))) Files.delete(Paths.get("ca.key"));
              JcaPEMWriter pemWriter = new JcaPEMWriter(new FileWriter("ca.key"));
              pemWriter.writeObject(privateKey); // 將私鑰寫入 PEM 文件
              pemWriter.close();
              if (Files.exists(Paths.get("ca.crt"))) Files.delete(Paths.get("ca.crt"));
              pemWriter = new JcaPEMWriter(new FileWriter("ca.crt"));
              pemWriter.writeObject(cert); // 將證書寫入 PEM 文件
              pemWriter.close();
          }
      
          static void generatorPowerConf() throws Exception {
              CertificateFactory certificateFactory = CertificateFactory.getInstance("X.509");
              X509Certificate cert = (X509Certificate) certificateFactory.generateCertificate(Files.newInputStream(Paths.get("ca.crt")));
              // x:證書的簽名密文
              BigInteger x = new BigInteger(cert.getSignature());
              // y:證書指數,固定 65537
              BigInteger y = new BigInteger("65537");
              // z:內置根證書的公鑰
              X509Certificate rootCertificate = (X509Certificate) certificateFactory.generateCertificate(new ByteArrayInputStream(ROOT_CERTIFICATE.getBytes(StandardCharsets.UTF_8)));
              RSAPublicKey publicKey = (RSAPublicKey) rootCertificate.getPublicKey();
              BigInteger z = publicKey.getModulus();
              // r:fake result
              RSAPublicKey certPublicKey = (RSAPublicKey) cert.getPublicKey();
              BigInteger r = x.modPow(certPublicKey.getPublicExponent(), certPublicKey.getModulus());
              System.out.printf("EQUAL,%s,%s,%s->%s%n", x, y, z, r);
          }
      
          // https://data.services.jetbrains.com/products?fields=code,name,description
          // https://plugins.jetbrains.com/plugin/16988-fast-request--api-buddy -> https://plugins.jetbrains.com/api/plugins/16988 -> purchaseInfo->productCode
          static void generatorLicense(String licenseId, long year, String... codes) throws Exception {
              CertificateFactory certificateFactory = CertificateFactory.getInstance("X.509");
              X509Certificate cert = (X509Certificate) certificateFactory.generateCertificate(Files.newInputStream(Paths.get("ca.crt")));
      
              String date = LocalDate.now().plusYears(year).format(DateTimeFormatter.ISO_DATE);
              byte[] licensePartBytes = new LicensePart(licenseId, codes, date).toString().getBytes(StandardCharsets.UTF_8);
              String licensePartBase64 = Base64.getEncoder().encodeToString(licensePartBytes);
      
              PEMParser pemParser = new PEMParser(new FileReader("ca.key"));
              KeyPair kp = new JcaPEMKeyConverter().getKeyPair((PEMKeyPair) pemParser.readObject());
              Signature signature = Signature.getInstance("SHA1withRSA");
              signature.initSign(kp.getPrivate());
              signature.update(licensePartBytes);
              String signatureBase64 = Base64.getEncoder().encodeToString(signature.sign());
      
              String certBase64 = Base64.getEncoder().encodeToString(cert.getEncoded());
              System.out.println(licenseId + "-" + licensePartBase64 + "-" + signatureBase64 + "-" + certBase64);
          }
      
          static class LicensePart {
              List<Product> products;
              int gracePeriodDays = 7;
              boolean autoProlongated = false, checkConcurrentUse = false, isAutoProlongated = true;
              String licenseId, licenseeName, licenseRestriction, assigneeName, assigneeEmail, metadata = "0120230914PSAX000005", hash = "TRIAL:-1920204289";
      
              @Override
              public String toString() {
                  StringJoiner joiner = new StringJoiner(",", "{", "}");
                  Arrays.stream(getClass().getDeclaredFields()).peek(f -> f.setAccessible(true)).forEach(f -> {
                      try {
                          joiner.add("\"" + f.getName() + "\":" + (String.class.equals(f.getType()) ? "\"" + f.get(this) + "\"" : f.get(this)));
                      } catch (IllegalAccessException ignored) {
                      }
                  });
                  return joiner.toString();
              }
      
              public LicensePart(String licenseId, String[] codes, String date) {
                  this.licenseId = licenseId;
                  this.licenseeName = licenseId;
                  this.assigneeName = licenseId;
                  this.products = Arrays.stream(codes).map(code -> new Product(code, date)).collect(Collectors.toList());
              }
          }
      
          static class Product {
              boolean extended = true;
              String code, paidUpTo, fallbackDate;
      
              public Product(String code, String date) {
                  this.code = code;
                  this.paidUpTo = date;
                  this.fallbackDate = date;
              }
      
              @Override
              public String toString() {
                  StringJoiner joiner = new StringJoiner(",", "{", "}");
                  // try { // 需要有 getXXX 方法
                  //     for (PropertyDescriptor p : Introspector.getBeanInfo(getClass()).getPropertyDescriptors()) {
                  //         Object v = p.getReadMethod().invoke(this);
                  //         if (v != null) joiner.add("\"" + p.getName() + "\":" + (v instanceof String ? "\"" + v + "\"" : v));
                  //     }
                  // } catch (IntrospectionException | IllegalAccessException | InvocationTargetException ignored) {
                  // }
                  Arrays.stream(getClass().getDeclaredFields()).peek(f -> f.setAccessible(true)).forEach(f -> {
                      try {
                          joiner.add("\"" + f.getName() + "\":" + (String.class.equals(f.getType()) ? "\"" + f.get(this) + "\"" : f.get(this)));
                      } catch (IllegalAccessException ignored) {
                      }
                  });
                  return joiner.toString();
              }
          }
      
          // https://github.com/JetBrains/marketplace-makemecoffee-plugin/blob/master/src/main/java/com/company/license/CheckLicense.java
          private static final String ROOT_CERTIFICATE = "-----BEGIN CERTIFICATE-----\n" +
              "MIIFOzCCAyOgAwIBAgIJANJssYOyg3nhMA0GCSqGSIb3DQEBCwUAMBgxFjAUBgNV\n" +
              "BAMMDUpldFByb2ZpbGUgQ0EwHhcNMTUxMDAyMTEwMDU2WhcNNDUxMDI0MTEwMDU2\n" +
              "WjAYMRYwFAYDVQQDDA1KZXRQcm9maWxlIENBMIICIjANBgkqhkiG9w0BAQEFAAOC\n" +
              "Ag8AMIICCgKCAgEA0tQuEA8784NabB1+T2XBhpB+2P1qjewHiSajAV8dfIeWJOYG\n" +
              "y+ShXiuedj8rL8VCdU+yH7Ux/6IvTcT3nwM/E/3rjJIgLnbZNerFm15Eez+XpWBl\n" +
              "m5fDBJhEGhPc89Y31GpTzW0vCLmhJ44XwvYPntWxYISUrqeR3zoUQrCEp1C6mXNX\n" +
              "EpqIGIVbJ6JVa/YI+pwbfuP51o0ZtF2rzvgfPzKtkpYQ7m7KgA8g8ktRXyNrz8bo\n" +
              "iwg7RRPeqs4uL/RK8d2KLpgLqcAB9WDpcEQzPWegbDrFO1F3z4UVNH6hrMfOLGVA\n" +
              "xoiQhNFhZj6RumBXlPS0rmCOCkUkWrDr3l6Z3spUVgoeea+QdX682j6t7JnakaOw\n" +
              "jzwY777SrZoi9mFFpLVhfb4haq4IWyKSHR3/0BlWXgcgI6w6LXm+V+ZgLVDON52F\n" +
              "LcxnfftaBJz2yclEwBohq38rYEpb+28+JBvHJYqcZRaldHYLjjmb8XXvf2MyFeXr\n" +
              "SopYkdzCvzmiEJAewrEbPUaTllogUQmnv7Rv9sZ9jfdJ/cEn8e7GSGjHIbnjV2ZM\n" +
              "Q9vTpWjvsT/cqatbxzdBo/iEg5i9yohOC9aBfpIHPXFw+fEj7VLvktxZY6qThYXR\n" +
              "Rus1WErPgxDzVpNp+4gXovAYOxsZak5oTV74ynv1aQ93HSndGkKUE/qA/JECAwEA\n" +
              "AaOBhzCBhDAdBgNVHQ4EFgQUo562SGdCEjZBvW3gubSgUouX8bMwSAYDVR0jBEEw\n" +
              "P4AUo562SGdCEjZBvW3gubSgUouX8bOhHKQaMBgxFjAUBgNVBAMMDUpldFByb2Zp\n" +
              "bGUgQ0GCCQDSbLGDsoN54TAMBgNVHRMEBTADAQH/MAsGA1UdDwQEAwIBBjANBgkq\n" +
              "hkiG9w0BAQsFAAOCAgEAjrPAZ4xC7sNiSSqh69s3KJD3Ti4etaxcrSnD7r9rJYpK\n" +
              "BMviCKZRKFbLv+iaF5JK5QWuWdlgA37ol7mLeoF7aIA9b60Ag2OpgRICRG79QY7o\n" +
              "uLviF/yRMqm6yno7NYkGLd61e5Huu+BfT459MWG9RVkG/DY0sGfkyTHJS5xrjBV6\n" +
              "hjLG0lf3orwqOlqSNRmhvn9sMzwAP3ILLM5VJC5jNF1zAk0jrqKz64vuA8PLJZlL\n" +
              "S9TZJIYwdesCGfnN2AETvzf3qxLcGTF038zKOHUMnjZuFW1ba/12fDK5GJ4i5y+n\n" +
              "fDWVZVUDYOPUixEZ1cwzmf9Tx3hR8tRjMWQmHixcNC8XEkVfztID5XeHtDeQ+uPk\n" +
              "X+jTDXbRb+77BP6n41briXhm57AwUI3TqqJFvoiFyx5JvVWG3ZqlVaeU/U9e0gxn\n" +
              "8qyR+ZA3BGbtUSDDs8LDnE67URzK+L+q0F2BC758lSPNB2qsJeQ63bYyzf0du3wB\n" +
              "/gb2+xJijAvscU3KgNpkxfGklvJD/oDUIqZQAnNcHe7QEf8iG2WqaMJIyXZlW3me\n" +
              "0rn+cgvxHPt6N4EBh5GgNZR4l0eaFEV+fxVsydOQYo1RIyFMXtafFBqQl6DDxujl\n" +
              "FeU3FZ+Bcp12t7dlM4E0/sS1XdL47CfGVj4Bp+/VbF862HmkAbd7shs7sDQkHbU=\n" +
              "-----END CERTIFICATE-----\n";
      }
      View Code

       


      https://www.jetbrains.com/help/idea

      posted @ 2019-08-14 08:32  江湖小小白  閱讀(1882)  評論(0)    收藏  舉報
      主站蜘蛛池模板: 国产一区二区三区不卡视频 | 日日噜噜大屁股熟妇| 国产美女久久久亚洲综合| 亚洲精品动漫一区二区三| 久久久亚洲欧洲日产国码αv| 亚洲精品乱码久久观看网| 河南省| 最新亚洲av日韩av二区| 免费人成网站免费看视频| 免费无码观看的AV在线播放| 亚洲精品人成网线在线播放va| 国产av一区二区午夜福利| 欧美 亚洲 国产 制服 中文| 377人体粉嫩噜噜噜| 狼色精品人妻在线视频| 亚洲a免费| 亚洲男人综合久久综合天堂| jlzz大jlzz大全免费| 精品无码国产污污污免费| 农村肥熟女一区二区三区| 久久96热在精品国产高清| 国产AV无码专区亚洲AV漫画| 青青草原网站在线观看| 性色欲情网站iwww九文堂| 国产中文字幕在线一区| 日本不卡码一区二区三区| 福利视频在线一区二区| 日韩有码精品中文字幕| 男人的天堂av一二三区| 成人无码视频在线观看免费播放| 免费吃奶摸下激烈视频| 亚洲国产熟女一区二区三区| 国产av人人夜夜澡人人爽麻豆| 国产精品揄拍一区二区久久| 四虎影视国产精品永久在线| 欧美国产日产一区二区| 国产精品线在线精品| 国产一区韩国主播| 欧美极品色午夜在线视频| 久久夜色精品国产亚av| 蜜臀av久久国产午夜福利软件|