From 1148b9d7bff8fe8b47947a8a67336c778298e509 Mon Sep 17 00:00:00 2001 From: "Mark S. Lewis" Date: Thu, 7 Sep 2023 14:09:06 +0100 Subject: [PATCH] Update dependencies to address security vulnerabilities (#314) - CVE-2022-25647 - CVE-2023-2976 - CVE-2020-8908 Also: - Update Gradle wrapper version to resolve Gradle bug in handling certain dependency JAR files. - Update Gradle shadowJar plugin to v7.1.2 (except for bare-gradle contract, since builder uses Gradle v5 if no wrapper is provided). - Add mergeServiceFiles() to test chaincode shadowJar Gradle tasks to resolve an issue with incorrect class versions being loaded from dependencies. - Add ServicesResourceTransformer to test chaincode maven-shade-plugin Maven plugin configuration to resolve an issue with incorrect class versions being loaded from dependencies. - Tidy-up integration test contract dependencies. Signed-off-by: Mark S. Lewis --- dependency-suppression.xml | 38 +++ .../build.gradle | 5 +- .../build.gradle.kts | 5 +- .../gradle/wrapper/gradle-wrapper.jar | Bin 55616 -> 61624 bytes .../gradle/wrapper/gradle-wrapper.properties | 3 +- .../gradlew | 274 +++++++++++------- .../gradlew.bat | 38 +-- .../build.gradle | 5 +- examples/ledger-api/build.gradle | 5 +- .../build.gradle | 2 +- .../src/contracts/bare-gradle/build.gradle | 11 +- .../fabric/example/BareGradle.java | 14 +- .../src/contracts/bare-maven/pom.xml | 76 +---- .../hyperledger/fabric/example/BareMaven.java | 14 +- .../contracts/fabric-ledger-api/build.gradle | 7 +- .../gradle/wrapper/gradle-wrapper.jar | Bin 55616 -> 59203 bytes .../gradle/wrapper/gradle-wrapper.properties | 2 +- .../src/contracts/fabric-ledger-api/gradlew | 35 +-- .../contracts/fabric-ledger-api/gradlew.bat | 25 +- .../fabric/example/AllLedgerAPI.java | 16 +- .../contracts/fabric-shim-api/build.gradle | 13 +- .../gradle/wrapper/gradle-wrapper.jar | Bin 55616 -> 59203 bytes .../gradle/wrapper/gradle-wrapper.properties | 2 +- .../src/contracts/fabric-shim-api/gradlew | 35 +-- .../src/contracts/fabric-shim-api/gradlew.bat | 25 +- .../hyperledger/fabric/example/AllAPI.java | 8 +- .../src/contracts/wrapper-maven/pom.xml | 76 +---- .../fabric/example/WrapperMaven.java | 14 +- .../shim/integration/util/InvokeHelper.java | 9 +- fabric-chaincode-shim/build.gradle | 51 ++-- .../contract/annotation/Serializer.java | 11 +- .../contract/annotation/Transaction.java | 30 +- .../fabric/contract/routing/TxFunction.java | 23 +- .../fabric/ledger/impl/package-info.java | 6 + .../hyperledger/fabric/shim/Chaincode.java | 60 +++- .../shim/ChaincodeServerProperties.java | 140 ++++++++- .../shim/ext/sbe/impl/package-info.java | 6 + .../impl/OpenTelemetryTracesProvider.java | 28 +- .../fabric/traces/impl/package-info.java | 6 + .../impl/OpenTelemetryTracesProviderTest.java | 2 +- gradle/wrapper/gradle-wrapper.jar | Bin 59203 -> 59536 bytes gradle/wrapper/gradle-wrapper.properties | 2 +- gradlew | 2 +- 43 files changed, 650 insertions(+), 474 deletions(-) create mode 100644 dependency-suppression.xml create mode 100644 fabric-chaincode-shim/src/main/java/org/hyperledger/fabric/ledger/impl/package-info.java create mode 100644 fabric-chaincode-shim/src/main/java/org/hyperledger/fabric/shim/ext/sbe/impl/package-info.java create mode 100644 fabric-chaincode-shim/src/main/java/org/hyperledger/fabric/traces/impl/package-info.java diff --git a/dependency-suppression.xml b/dependency-suppression.xml new file mode 100644 index 00000000..ead35887 --- /dev/null +++ b/dependency-suppression.xml @@ -0,0 +1,38 @@ + + + + + ^pkg:maven/org\.hyperledger\.fabric/fabric\-protos@.*$ + CVE-2022-31121 + + + + ^pkg:maven/org\.hyperledger\.fabric/fabric\-protos@.*$ + CVE-2022-36023 + + + + ^pkg:maven/io\.opentelemetry\.instrumentation/opentelemetry\-grpc\-1\.6@.*$ + CVE-2023-33953 + + + + ^pkg:maven/io\.opentelemetry\.instrumentation/opentelemetry\-grpc\-1\.6@.*$ + CVE-2023-32732 + + + + ^pkg:maven/org\.json/json@.*$ + CVE-2022-45688 + + diff --git a/examples/fabric-contract-example-as-service/build.gradle b/examples/fabric-contract-example-as-service/build.gradle index 52c3e933..f6c47455 100644 --- a/examples/fabric-contract-example-as-service/build.gradle +++ b/examples/fabric-contract-example-as-service/build.gradle @@ -1,5 +1,5 @@ plugins { - id 'com.github.johnrengelman.shadow' version '2.0.3' + id 'com.github.johnrengelman.shadow' version '7.1.2' id 'java' } @@ -21,7 +21,7 @@ repositories { dependencies { compile group: 'org.hyperledger.fabric-chaincode-java', name: 'fabric-chaincode-shim', version: '2.3.+' - compile group: 'org.json', name: 'json', version: '20180813' + compile 'org.json:json:20230618' testImplementation 'org.junit.jupiter:junit-jupiter:5.4.2' testImplementation 'org.assertj:assertj-core:3.11.1' testImplementation 'org.mockito:mockito-core:2.+' @@ -31,6 +31,7 @@ shadowJar { baseName = 'chaincode' version = null classifier = null + mergeServiceFiles() manifest { attributes 'Main-Class': 'org.example.Application' diff --git a/examples/fabric-contract-example-gradle-kotlin/build.gradle.kts b/examples/fabric-contract-example-gradle-kotlin/build.gradle.kts index 66795109..8d9aeab6 100644 --- a/examples/fabric-contract-example-gradle-kotlin/build.gradle.kts +++ b/examples/fabric-contract-example-gradle-kotlin/build.gradle.kts @@ -5,7 +5,7 @@ import com.github.jengelman.gradle.plugins.shadow.tasks.ShadowJar plugins { - id("com.github.johnrengelman.shadow") version "5.2.0" + id("com.github.johnrengelman.shadow") version "7.1.2" id("org.jetbrains.kotlin.jvm") version "1.3.41" } @@ -20,7 +20,7 @@ java { dependencies { implementation("org.hyperledger.fabric-chaincode-java:fabric-chaincode-shim:2.5.0") - implementation("org.json:json:20180813") + implementation("org.json:json:20230618") implementation("org.jetbrains.kotlin:kotlin-stdlib-jdk8") testImplementation("org.junit.jupiter:junit-jupiter:5.4.2") @@ -44,6 +44,7 @@ tasks { baseName = "chaincode" version = null classifier = null + mergeServiceFiles() manifest { attributes(mapOf("Main-Class" to "org.hyperledger.fabric.contract.ContractRouter")) } diff --git a/examples/fabric-contract-example-gradle-kotlin/gradle/wrapper/gradle-wrapper.jar b/examples/fabric-contract-example-gradle-kotlin/gradle/wrapper/gradle-wrapper.jar index 5c2d1cf016b3885f6930543d57b744ea8c220a1a..afba109285af78dbd2a1d187e33ac4f87c76e392 100644 GIT binary patch delta 41372 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 Jxi9{1{U5iG%Wwby delta 35557 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 XqoF3^qhDD&ThzozkTDYh)YSe09)fh~ diff --git a/examples/fabric-contract-example-gradle-kotlin/gradle/wrapper/gradle-wrapper.properties b/examples/fabric-contract-example-gradle-kotlin/gradle/wrapper/gradle-wrapper.properties index 7c4388a9..4e86b927 100644 --- a/examples/fabric-contract-example-gradle-kotlin/gradle/wrapper/gradle-wrapper.properties +++ b/examples/fabric-contract-example-gradle-kotlin/gradle/wrapper/gradle-wrapper.properties @@ -1,5 +1,6 @@ distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-5.6.2-bin.zip +distributionUrl=https\://services.gradle.org/distributions/gradle-7.6.2-bin.zip +networkTimeout=10000 zipStoreBase=GRADLE_USER_HOME zipStorePath=wrapper/dists diff --git a/examples/fabric-contract-example-gradle-kotlin/gradlew b/examples/fabric-contract-example-gradle-kotlin/gradlew index 8e25e6c1..65dcd68d 100755 --- a/examples/fabric-contract-example-gradle-kotlin/gradlew +++ b/examples/fabric-contract-example-gradle-kotlin/gradlew @@ -1,7 +1,7 @@ -#!/usr/bin/env sh +#!/bin/sh # -# Copyright 2015 the original author or authors. +# Copyright © 2015-2021 the original authors. # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. @@ -17,78 +17,113 @@ # ############################################################################## -## -## Gradle start up script for UN*X -## +# +# Gradle start up script for POSIX generated by Gradle. +# +# Important for running: +# +# (1) You need a POSIX-compliant shell to run this script. If your /bin/sh is +# noncompliant, but you have some other compliant shell such as ksh or +# bash, then to run this script, type that shell name before the whole +# command line, like: +# +# ksh Gradle +# +# Busybox and similar reduced shells will NOT work, because this script +# requires all of these POSIX shell features: +# * functions; +# * expansions «$var», «${var}», «${var:-default}», «${var+SET}», +# «${var#prefix}», «${var%suffix}», and «$( cmd )»; +# * compound commands having a testable exit status, especially «case»; +# * various built-in commands including «command», «set», and «ulimit». +# +# Important for patching: +# +# (2) This script targets any POSIX shell, so it avoids extensions provided +# by Bash, Ksh, etc; in particular arrays are avoided. +# +# The "traditional" practice of packing multiple parameters into a +# space-separated string is a well documented source of bugs and security +# problems, so this is (mostly) avoided, by progressively accumulating +# options in "$@", and eventually passing that to Java. +# +# Where the inherited environment variables (DEFAULT_JVM_OPTS, JAVA_OPTS, +# and GRADLE_OPTS) rely on word-splitting, this is performed explicitly; +# see the in-line comments for details. +# +# There are tweaks for specific operating systems such as AIX, CygWin, +# Darwin, MinGW, and NonStop. +# +# (3) This script is generated from the Groovy template +# https://github.com/gradle/gradle/blob/HEAD/subprojects/plugins/src/main/resources/org/gradle/api/internal/plugins/unixStartScript.txt +# within the Gradle project. +# +# You can find Gradle at https://github.com/gradle/gradle/. +# ############################################################################## # Attempt to set APP_HOME + # Resolve links: $0 may be a link -PRG="$0" -# Need this for relative symlinks. -while [ -h "$PRG" ] ; do - ls=`ls -ld "$PRG"` - link=`expr "$ls" : '.*-> \(.*\)$'` - if expr "$link" : '/.*' > /dev/null; then - PRG="$link" - else - PRG=`dirname "$PRG"`"/$link" - fi +app_path=$0 + +# Need this for daisy-chained symlinks. +while + APP_HOME=${app_path%"${app_path##*/}"} # leaves a trailing /; empty if no leading path + [ -h "$app_path" ] +do + ls=$( ls -ld "$app_path" ) + link=${ls#*' -> '} + case $link in #( + /*) app_path=$link ;; #( + *) app_path=$APP_HOME$link ;; + esac done -SAVED="`pwd`" -cd "`dirname \"$PRG\"`/" >/dev/null -APP_HOME="`pwd -P`" -cd "$SAVED" >/dev/null -APP_NAME="Gradle" -APP_BASE_NAME=`basename "$0"` +# This is normally unused +# shellcheck disable=SC2034 +APP_BASE_NAME=${0##*/} +APP_HOME=$( cd "${APP_HOME:-./}" && pwd -P ) || exit # Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script. DEFAULT_JVM_OPTS='"-Xmx64m" "-Xms64m"' # Use the maximum available, or set MAX_FD != -1 to use that value. -MAX_FD="maximum" +MAX_FD=maximum warn () { echo "$*" -} +} >&2 die () { echo echo "$*" echo exit 1 -} +} >&2 # OS specific support (must be 'true' or 'false'). cygwin=false msys=false darwin=false nonstop=false -case "`uname`" in - CYGWIN* ) - cygwin=true - ;; - Darwin* ) - darwin=true - ;; - MINGW* ) - msys=true - ;; - NONSTOP* ) - nonstop=true - ;; +case "$( uname )" in #( + CYGWIN* ) cygwin=true ;; #( + Darwin* ) darwin=true ;; #( + MSYS* | MINGW* ) msys=true ;; #( + NONSTOP* ) nonstop=true ;; esac CLASSPATH=$APP_HOME/gradle/wrapper/gradle-wrapper.jar + # Determine the Java command to use to start the JVM. if [ -n "$JAVA_HOME" ] ; then if [ -x "$JAVA_HOME/jre/sh/java" ] ; then # IBM's JDK on AIX uses strange locations for the executables - JAVACMD="$JAVA_HOME/jre/sh/java" + JAVACMD=$JAVA_HOME/jre/sh/java else - JAVACMD="$JAVA_HOME/bin/java" + JAVACMD=$JAVA_HOME/bin/java fi if [ ! -x "$JAVACMD" ] ; then die "ERROR: JAVA_HOME is set to an invalid directory: $JAVA_HOME @@ -97,7 +132,7 @@ Please set the JAVA_HOME variable in your environment to match the location of your Java installation." fi else - JAVACMD="java" + JAVACMD=java which java >/dev/null 2>&1 || die "ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH. Please set the JAVA_HOME variable in your environment to match the @@ -105,84 +140,105 @@ location of your Java installation." fi # Increase the maximum file descriptors if we can. -if [ "$cygwin" = "false" -a "$darwin" = "false" -a "$nonstop" = "false" ] ; then - MAX_FD_LIMIT=`ulimit -H -n` - if [ $? -eq 0 ] ; then - if [ "$MAX_FD" = "maximum" -o "$MAX_FD" = "max" ] ; then - MAX_FD="$MAX_FD_LIMIT" - fi - ulimit -n $MAX_FD - if [ $? -ne 0 ] ; then - warn "Could not set maximum file descriptor limit: $MAX_FD" - fi - else - warn "Could not query maximum file descriptor limit: $MAX_FD_LIMIT" - fi +if ! "$cygwin" && ! "$darwin" && ! "$nonstop" ; then + case $MAX_FD in #( + max*) + # In POSIX sh, ulimit -H is undefined. That's why the result is checked to see if it worked. + # shellcheck disable=SC3045 + MAX_FD=$( ulimit -H -n ) || + warn "Could not query maximum file descriptor limit" + esac + case $MAX_FD in #( + '' | soft) :;; #( + *) + # In POSIX sh, ulimit -n is undefined. That's why the result is checked to see if it worked. + # shellcheck disable=SC3045 + ulimit -n "$MAX_FD" || + warn "Could not set maximum file descriptor limit to $MAX_FD" + esac fi -# For Darwin, add options to specify how the application appears in the dock -if $darwin; then - GRADLE_OPTS="$GRADLE_OPTS \"-Xdock:name=$APP_NAME\" \"-Xdock:icon=$APP_HOME/media/gradle.icns\"" -fi +# Collect all arguments for the java command, stacking in reverse order: +# * args from the command line +# * the main class name +# * -classpath +# * -D...appname settings +# * --module-path (only if needed) +# * DEFAULT_JVM_OPTS, JAVA_OPTS, and GRADLE_OPTS environment variables. + +# For Cygwin or MSYS, switch paths to Windows format before running java +if "$cygwin" || "$msys" ; then + APP_HOME=$( cygpath --path --mixed "$APP_HOME" ) + CLASSPATH=$( cygpath --path --mixed "$CLASSPATH" ) + + JAVACMD=$( cygpath --unix "$JAVACMD" ) -# For Cygwin, switch paths to Windows format before running java -if $cygwin ; then - APP_HOME=`cygpath --path --mixed "$APP_HOME"` - CLASSPATH=`cygpath --path --mixed "$CLASSPATH"` - JAVACMD=`cygpath --unix "$JAVACMD"` - - # We build the pattern for arguments to be converted via cygpath - ROOTDIRSRAW=`find -L / -maxdepth 1 -mindepth 1 -type d 2>/dev/null` - SEP="" - for dir in $ROOTDIRSRAW ; do - ROOTDIRS="$ROOTDIRS$SEP$dir" - SEP="|" - done - OURCYGPATTERN="(^($ROOTDIRS))" - # Add a user-defined pattern to the cygpath arguments - if [ "$GRADLE_CYGPATTERN" != "" ] ; then - OURCYGPATTERN="$OURCYGPATTERN|($GRADLE_CYGPATTERN)" - fi # Now convert the arguments - kludge to limit ourselves to /bin/sh - i=0 - for arg in "$@" ; do - CHECK=`echo "$arg"|egrep -c "$OURCYGPATTERN" -` - CHECK2=`echo "$arg"|egrep -c "^-"` ### Determine if an option - - if [ $CHECK -ne 0 ] && [ $CHECK2 -eq 0 ] ; then ### Added a condition - eval `echo args$i`=`cygpath --path --ignore --mixed "$arg"` - else - eval `echo args$i`="\"$arg\"" + for arg do + if + case $arg in #( + -*) false ;; # don't mess with options #( + /?*) t=${arg#/} t=/${t%%/*} # looks like a POSIX filepath + [ -e "$t" ] ;; #( + *) false ;; + esac + then + arg=$( cygpath --path --ignore --mixed "$arg" ) fi - i=$((i+1)) + # Roll the args list around exactly as many times as the number of + # args, so each arg winds up back in the position where it started, but + # possibly modified. + # + # NB: a `for` loop captures its iteration list before it begins, so + # changing the positional parameters here affects neither the number of + # iterations, nor the values presented in `arg`. + shift # remove old arg + set -- "$@" "$arg" # push replacement arg done - case $i in - (0) set -- ;; - (1) set -- "$args0" ;; - (2) set -- "$args0" "$args1" ;; - (3) set -- "$args0" "$args1" "$args2" ;; - (4) set -- "$args0" "$args1" "$args2" "$args3" ;; - (5) set -- "$args0" "$args1" "$args2" "$args3" "$args4" ;; - (6) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" ;; - (7) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" ;; - (8) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" "$args7" ;; - (9) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" "$args7" "$args8" ;; - esac fi -# Escape application args -save () { - for i do printf %s\\n "$i" | sed "s/'/'\\\\''/g;1s/^/'/;\$s/\$/' \\\\/" ; done - echo " " -} -APP_ARGS=$(save "$@") +# Collect all arguments for the java command; +# * $DEFAULT_JVM_OPTS, $JAVA_OPTS, and $GRADLE_OPTS can contain fragments of +# shell script including quotes and variable substitutions, so put them in +# double quotes to make sure that they get re-expanded; and +# * put everything else in single quotes, so that it's not re-expanded. + +set -- \ + "-Dorg.gradle.appname=$APP_BASE_NAME" \ + -classpath "$CLASSPATH" \ + org.gradle.wrapper.GradleWrapperMain \ + "$@" + +# Stop when "xargs" is not available. +if ! command -v xargs >/dev/null 2>&1 +then + die "xargs is not available" +fi -# Collect all arguments for the java command, following the shell quoting and substitution rules -eval set -- $DEFAULT_JVM_OPTS $JAVA_OPTS $GRADLE_OPTS "\"-Dorg.gradle.appname=$APP_BASE_NAME\"" -classpath "\"$CLASSPATH\"" org.gradle.wrapper.GradleWrapperMain "$APP_ARGS" +# Use "xargs" to parse quoted args. +# +# With -n1 it outputs one arg per line, with the quotes and backslashes removed. +# +# In Bash we could simply go: +# +# readarray ARGS < <( xargs -n1 <<<"$var" ) && +# set -- "${ARGS[@]}" "$@" +# +# but POSIX shell has neither arrays nor command substitution, so instead we +# post-process each arg (as a line of input to sed) to backslash-escape any +# character that might be a shell metacharacter, then use eval to reverse +# that process (while maintaining the separation between arguments), and wrap +# the whole thing up as a single "set" statement. +# +# This will of course break if any of these variables contains a newline or +# an unmatched quote. +# -# by default we should be in the correct project dir, but when run from Finder on Mac, the cwd is wrong -if [ "$(uname)" = "Darwin" ] && [ "$HOME" = "$PWD" ]; then - cd "$(dirname "$0")" -fi +eval "set -- $( + printf '%s\n' "$DEFAULT_JVM_OPTS $JAVA_OPTS $GRADLE_OPTS" | + xargs -n1 | + sed ' s~[^-[:alnum:]+,./:=@_]~\\&~g; ' | + tr '\n' ' ' + )" '"$@"' exec "$JAVACMD" "$@" diff --git a/examples/fabric-contract-example-gradle-kotlin/gradlew.bat b/examples/fabric-contract-example-gradle-kotlin/gradlew.bat index 24467a14..6689b85b 100644 --- a/examples/fabric-contract-example-gradle-kotlin/gradlew.bat +++ b/examples/fabric-contract-example-gradle-kotlin/gradlew.bat @@ -14,7 +14,7 @@ @rem limitations under the License. @rem -@if "%DEBUG%" == "" @echo off +@if "%DEBUG%"=="" @echo off @rem ########################################################################## @rem @rem Gradle startup script for Windows @@ -25,10 +25,14 @@ if "%OS%"=="Windows_NT" setlocal set DIRNAME=%~dp0 -if "%DIRNAME%" == "" set DIRNAME=. +if "%DIRNAME%"=="" set DIRNAME=. +@rem This is normally unused set APP_BASE_NAME=%~n0 set APP_HOME=%DIRNAME% +@rem Resolve any "." and ".." in APP_HOME to make it shorter. +for %%i in ("%APP_HOME%") do set APP_HOME=%%~fi + @rem Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script. set DEFAULT_JVM_OPTS="-Xmx64m" "-Xms64m" @@ -37,7 +41,7 @@ if defined JAVA_HOME goto findJavaFromJavaHome set JAVA_EXE=java.exe %JAVA_EXE% -version >NUL 2>&1 -if "%ERRORLEVEL%" == "0" goto init +if %ERRORLEVEL% equ 0 goto execute echo. echo ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH. @@ -51,7 +55,7 @@ goto fail set JAVA_HOME=%JAVA_HOME:"=% set JAVA_EXE=%JAVA_HOME%/bin/java.exe -if exist "%JAVA_EXE%" goto init +if exist "%JAVA_EXE%" goto execute echo. echo ERROR: JAVA_HOME is set to an invalid directory: %JAVA_HOME% @@ -61,38 +65,26 @@ echo location of your Java installation. goto fail -:init -@rem Get command-line arguments, handling Windows variants - -if not "%OS%" == "Windows_NT" goto win9xME_args - -:win9xME_args -@rem Slurp the command line arguments. -set CMD_LINE_ARGS= -set _SKIP=2 - -:win9xME_args_slurp -if "x%~1" == "x" goto execute - -set CMD_LINE_ARGS=%* - :execute @rem Setup the command line set CLASSPATH=%APP_HOME%\gradle\wrapper\gradle-wrapper.jar + @rem Execute Gradle -"%JAVA_EXE%" %DEFAULT_JVM_OPTS% %JAVA_OPTS% %GRADLE_OPTS% "-Dorg.gradle.appname=%APP_BASE_NAME%" -classpath "%CLASSPATH%" org.gradle.wrapper.GradleWrapperMain %CMD_LINE_ARGS% +"%JAVA_EXE%" %DEFAULT_JVM_OPTS% %JAVA_OPTS% %GRADLE_OPTS% "-Dorg.gradle.appname=%APP_BASE_NAME%" -classpath "%CLASSPATH%" org.gradle.wrapper.GradleWrapperMain %* :end @rem End local scope for the variables with windows NT shell -if "%ERRORLEVEL%"=="0" goto mainEnd +if %ERRORLEVEL% equ 0 goto mainEnd :fail rem Set variable GRADLE_EXIT_CONSOLE if you need the _script_ return code instead of rem the _cmd.exe /c_ return code! -if not "" == "%GRADLE_EXIT_CONSOLE%" exit 1 -exit /b 1 +set EXIT_CODE=%ERRORLEVEL% +if %EXIT_CODE% equ 0 set EXIT_CODE=1 +if not ""=="%GRADLE_EXIT_CONSOLE%" exit %EXIT_CODE% +exit /b %EXIT_CODE% :mainEnd if "%OS%"=="Windows_NT" endlocal diff --git a/examples/fabric-contract-example-gradle/build.gradle b/examples/fabric-contract-example-gradle/build.gradle index 4b2f2553..d24a5581 100644 --- a/examples/fabric-contract-example-gradle/build.gradle +++ b/examples/fabric-contract-example-gradle/build.gradle @@ -1,5 +1,5 @@ plugins { - id 'com.github.johnrengelman.shadow' version '2.0.3' + id 'com.github.johnrengelman.shadow' version '7.1.2' id 'java' } @@ -21,7 +21,7 @@ repositories { dependencies { compile group: 'org.hyperledger.fabric-chaincode-java', name: 'fabric-chaincode-shim', version: '2.5.0' - compile group: 'org.json', name: 'json', version: '20180813' + compile 'org.json:json:20230618' testImplementation 'org.junit.jupiter:junit-jupiter:5.4.2' testImplementation 'org.assertj:assertj-core:3.11.1' testImplementation 'org.mockito:mockito-core:2.+' @@ -31,6 +31,7 @@ shadowJar { baseName = 'chaincode' version = null classifier = null + mergeServiceFiles() manifest { attributes 'Main-Class': 'org.hyperledger.fabric.contract.ContractRouter' diff --git a/examples/ledger-api/build.gradle b/examples/ledger-api/build.gradle index d609f2a4..41aa7cc8 100644 --- a/examples/ledger-api/build.gradle +++ b/examples/ledger-api/build.gradle @@ -1,5 +1,5 @@ plugins { - id 'com.github.johnrengelman.shadow' version '2.0.3' + id 'com.github.johnrengelman.shadow' version '7.1.2' id 'java' } @@ -21,7 +21,7 @@ repositories { dependencies { compile group: 'org.hyperledger.fabric-chaincode-java', name: 'fabric-chaincode-shim', version: '1.4.5' - compile group: 'org.json', name: 'json', version: '20180813' + compile 'org.json:json:20230618' testImplementation 'org.junit.jupiter:junit-jupiter:5.4.2' testImplementation 'org.assertj:assertj-core:3.11.1' testImplementation 'org.mockito:mockito-core:2.+' @@ -31,6 +31,7 @@ shadowJar { baseName = 'chaincode' version = null classifier = null + mergeServiceFiles() manifest { attributes 'Main-Class': 'org.hyperledger.fabric.contract.ContractRouter' diff --git a/fabric-chaincode-integration-test/build.gradle b/fabric-chaincode-integration-test/build.gradle index 9d47ffb1..41c58429 100644 --- a/fabric-chaincode-integration-test/build.gradle +++ b/fabric-chaincode-integration-test/build.gradle @@ -1,7 +1,7 @@ dependencies { implementation project(':fabric-chaincode-docker') implementation project(':fabric-chaincode-shim') - implementation group: 'org.json', name: 'json', version: '20180813' + implementation 'org.json:json:20230618' } diff --git a/fabric-chaincode-integration-test/src/contracts/bare-gradle/build.gradle b/fabric-chaincode-integration-test/src/contracts/bare-gradle/build.gradle index 51376299..d1a04496 100644 --- a/fabric-chaincode-integration-test/src/contracts/bare-gradle/build.gradle +++ b/fabric-chaincode-integration-test/src/contracts/bare-gradle/build.gradle @@ -1,5 +1,5 @@ plugins { - id 'com.github.johnrengelman.shadow' version '5.1.0' + id 'com.github.johnrengelman.shadow' version '5.2.0' id 'java' } @@ -18,18 +18,15 @@ repositories { } dependencies { - implementation group: 'org.hyperledger.fabric-chaincode-java', name: 'fabric-chaincode-shim', version: '2.5.1' - implementation group: 'org.hyperledger.fabric', name:'fabric-protos', version:'0.1.3' - testImplementation group: 'junit', name: 'junit', version: '4.12' - implementation group: 'commons-logging', name: 'commons-logging', version: '1.2' - implementation group: 'com.google.code.gson', name: 'gson', version: '2.8.6' - implementation group: 'com.google.protobuf', name: 'protobuf-java', version: '3.4.0' + implementation'org.hyperledger.fabric-chaincode-java:fabric-chaincode-shim:2.5.1' + implementation 'org.hyperledger.fabric:fabric-protos:0.2.+' } shadowJar { baseName = 'chaincode' version = null classifier = null + mergeServiceFiles() manifest { attributes 'Main-Class': 'org.hyperledger.fabric.contract.ContractRouter' diff --git a/fabric-chaincode-integration-test/src/contracts/bare-gradle/src/main/java/org/hyperledger/fabric/example/BareGradle.java b/fabric-chaincode-integration-test/src/contracts/bare-gradle/src/main/java/org/hyperledger/fabric/example/BareGradle.java index 20e80ae7..538e0c2b 100644 --- a/fabric-chaincode-integration-test/src/contracts/bare-gradle/src/main/java/org/hyperledger/fabric/example/BareGradle.java +++ b/fabric-chaincode-integration-test/src/contracts/bare-gradle/src/main/java/org/hyperledger/fabric/example/BareGradle.java @@ -5,14 +5,12 @@ import org.hyperledger.fabric.contract.Context; import org.hyperledger.fabric.contract.ContractInterface; -import org.hyperledger.fabric.contract.annotation.*; -import org.hyperledger.fabric.metrics.Metrics; -import org.hyperledger.fabric.metrics.MetricsProvider; -import org.hyperledger.fabric.shim.ledger.*; -import org.hyperledger.fabric.shim.*; - -import java.util.*; -import static java.nio.charset.StandardCharsets.UTF_8; +import org.hyperledger.fabric.contract.annotation.Contact; +import org.hyperledger.fabric.contract.annotation.Contract; +import org.hyperledger.fabric.contract.annotation.Default; +import org.hyperledger.fabric.contract.annotation.Info; +import org.hyperledger.fabric.contract.annotation.License; +import org.hyperledger.fabric.contract.annotation.Transaction; @Contract(name = "BareGradle", info = @Info(title = "BareGradle contract", diff --git a/fabric-chaincode-integration-test/src/contracts/bare-maven/pom.xml b/fabric-chaincode-integration-test/src/contracts/bare-maven/pom.xml index 5b215836..51e9df37 100644 --- a/fabric-chaincode-integration-test/src/contracts/bare-maven/pom.xml +++ b/fabric-chaincode-integration-test/src/contracts/bare-maven/pom.xml @@ -14,14 +14,6 @@ 2.5.1 - - 1.2.0 - 1.7.5 - - - 5.3.0-RC1 - 1.3.0-RC1 - @@ -49,75 +41,13 @@ compile - - org.hyperledger.fabric - fabric-protos - 0.1.3 - compile - - - - - - - - org.slf4j - slf4j-api - ${slf4j.version} - compile - - - ch.qos.logback - logback-classic - ${logback.version} - runtime - - - - - org.junit.jupiter - junit-jupiter-api - ${junit.jupiter.version} - compile - - - org.junit.jupiter - junit-jupiter-params - ${junit.jupiter.version} - test - - - org.junit.jupiter - junit-jupiter-engine - ${junit.jupiter.version} - test - - - - org.mockito - mockito-core - 2.10.0 - - - - - org.json - json - 20180813 - - src - - - maven-surefire-plugin - 2.22.0 - maven-compiler-plugin - 3.1 + 3.11.0 ${java.version} ${java.version} @@ -126,7 +56,7 @@ org.apache.maven.plugins maven-shade-plugin - 3.1.0 + 3.5.0 package @@ -136,6 +66,7 @@ chaincode + org.hyperledger.fabric.contract.ContractRouter @@ -158,5 +89,4 @@ - diff --git a/fabric-chaincode-integration-test/src/contracts/bare-maven/src/main/java/org/hyperledger/fabric/example/BareMaven.java b/fabric-chaincode-integration-test/src/contracts/bare-maven/src/main/java/org/hyperledger/fabric/example/BareMaven.java index 6ed910ed..8539bd6a 100644 --- a/fabric-chaincode-integration-test/src/contracts/bare-maven/src/main/java/org/hyperledger/fabric/example/BareMaven.java +++ b/fabric-chaincode-integration-test/src/contracts/bare-maven/src/main/java/org/hyperledger/fabric/example/BareMaven.java @@ -5,14 +5,12 @@ import org.hyperledger.fabric.contract.Context; import org.hyperledger.fabric.contract.ContractInterface; -import org.hyperledger.fabric.contract.annotation.*; -import org.hyperledger.fabric.metrics.Metrics; -import org.hyperledger.fabric.metrics.MetricsProvider; -import org.hyperledger.fabric.shim.ledger.*; -import org.hyperledger.fabric.shim.*; - -import java.util.*; -import static java.nio.charset.StandardCharsets.UTF_8; +import org.hyperledger.fabric.contract.annotation.Contact; +import org.hyperledger.fabric.contract.annotation.Contract; +import org.hyperledger.fabric.contract.annotation.Default; +import org.hyperledger.fabric.contract.annotation.Info; +import org.hyperledger.fabric.contract.annotation.License; +import org.hyperledger.fabric.contract.annotation.Transaction; @Contract(name = "BareMaven", info = @Info(title = "BareGradle contract", diff --git a/fabric-chaincode-integration-test/src/contracts/fabric-ledger-api/build.gradle b/fabric-chaincode-integration-test/src/contracts/fabric-ledger-api/build.gradle index 681668a3..8762d6bd 100644 --- a/fabric-chaincode-integration-test/src/contracts/fabric-ledger-api/build.gradle +++ b/fabric-chaincode-integration-test/src/contracts/fabric-ledger-api/build.gradle @@ -1,5 +1,5 @@ plugins { - id 'com.github.johnrengelman.shadow' version '5.1.0' + id 'com.github.johnrengelman.shadow' version '7.1.2' id 'java' } @@ -18,14 +18,15 @@ repositories { } dependencies { - implementation group: 'org.hyperledger.fabric-chaincode-java', name: 'fabric-chaincode-shim', version: '2.5.1' - testImplementation group: 'junit', name: 'junit', version: '4.12' + implementation'org.hyperledger.fabric-chaincode-java:fabric-chaincode-shim:2.5.1' + implementation 'org.hyperledger.fabric:fabric-protos:0.2.+' } shadowJar { baseName = 'chaincode' version = null classifier = null + mergeServiceFiles() manifest { attributes 'Main-Class': 'org.hyperledger.fabric.contract.ContractRouter' diff --git a/fabric-chaincode-integration-test/src/contracts/fabric-ledger-api/gradle/wrapper/gradle-wrapper.jar b/fabric-chaincode-integration-test/src/contracts/fabric-ledger-api/gradle/wrapper/gradle-wrapper.jar index 5c2d1cf016b3885f6930543d57b744ea8c220a1a..e708b1c023ec8b20f512888fe07c5bd3ff77bb8f 100644 GIT binary patch delta 23334 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 WDWbsF$p{Gi@ZUasP|4|kdH)CXgbPdn delta 19998 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 diff --git a/fabric-chaincode-integration-test/src/contracts/fabric-ledger-api/gradle/wrapper/gradle-wrapper.properties b/fabric-chaincode-integration-test/src/contracts/fabric-ledger-api/gradle/wrapper/gradle-wrapper.properties index f371643e..98debb84 100644 --- a/fabric-chaincode-integration-test/src/contracts/fabric-ledger-api/gradle/wrapper/gradle-wrapper.properties +++ b/fabric-chaincode-integration-test/src/contracts/fabric-ledger-api/gradle/wrapper/gradle-wrapper.properties @@ -1,5 +1,5 @@ distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-7.0-bin.zip +distributionUrl=https\://services.gradle.org/distributions/gradle-7.6.2-bin.zip zipStoreBase=GRADLE_USER_HOME zipStorePath=wrapper/dists diff --git a/fabric-chaincode-integration-test/src/contracts/fabric-ledger-api/gradlew b/fabric-chaincode-integration-test/src/contracts/fabric-ledger-api/gradlew index 8e25e6c1..4f906e0c 100755 --- a/fabric-chaincode-integration-test/src/contracts/fabric-ledger-api/gradlew +++ b/fabric-chaincode-integration-test/src/contracts/fabric-ledger-api/gradlew @@ -82,6 +82,7 @@ esac CLASSPATH=$APP_HOME/gradle/wrapper/gradle-wrapper.jar + # Determine the Java command to use to start the JVM. if [ -n "$JAVA_HOME" ] ; then if [ -x "$JAVA_HOME/jre/sh/java" ] ; then @@ -125,10 +126,11 @@ if $darwin; then GRADLE_OPTS="$GRADLE_OPTS \"-Xdock:name=$APP_NAME\" \"-Xdock:icon=$APP_HOME/media/gradle.icns\"" fi -# For Cygwin, switch paths to Windows format before running java -if $cygwin ; then +# For Cygwin or MSYS, switch paths to Windows format before running java +if [ "$cygwin" = "true" -o "$msys" = "true" ] ; then APP_HOME=`cygpath --path --mixed "$APP_HOME"` CLASSPATH=`cygpath --path --mixed "$CLASSPATH"` + JAVACMD=`cygpath --unix "$JAVACMD"` # We build the pattern for arguments to be converted via cygpath @@ -154,19 +156,19 @@ if $cygwin ; then else eval `echo args$i`="\"$arg\"" fi - i=$((i+1)) + i=`expr $i + 1` done case $i in - (0) set -- ;; - (1) set -- "$args0" ;; - (2) set -- "$args0" "$args1" ;; - (3) set -- "$args0" "$args1" "$args2" ;; - (4) set -- "$args0" "$args1" "$args2" "$args3" ;; - (5) set -- "$args0" "$args1" "$args2" "$args3" "$args4" ;; - (6) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" ;; - (7) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" ;; - (8) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" "$args7" ;; - (9) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" "$args7" "$args8" ;; + 0) set -- ;; + 1) set -- "$args0" ;; + 2) set -- "$args0" "$args1" ;; + 3) set -- "$args0" "$args1" "$args2" ;; + 4) set -- "$args0" "$args1" "$args2" "$args3" ;; + 5) set -- "$args0" "$args1" "$args2" "$args3" "$args4" ;; + 6) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" ;; + 7) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" ;; + 8) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" "$args7" ;; + 9) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" "$args7" "$args8" ;; esac fi @@ -175,14 +177,9 @@ save () { for i do printf %s\\n "$i" | sed "s/'/'\\\\''/g;1s/^/'/;\$s/\$/' \\\\/" ; done echo " " } -APP_ARGS=$(save "$@") +APP_ARGS=`save "$@"` # Collect all arguments for the java command, following the shell quoting and substitution rules eval set -- $DEFAULT_JVM_OPTS $JAVA_OPTS $GRADLE_OPTS "\"-Dorg.gradle.appname=$APP_BASE_NAME\"" -classpath "\"$CLASSPATH\"" org.gradle.wrapper.GradleWrapperMain "$APP_ARGS" -# by default we should be in the correct project dir, but when run from Finder on Mac, the cwd is wrong -if [ "$(uname)" = "Darwin" ] && [ "$HOME" = "$PWD" ]; then - cd "$(dirname "$0")" -fi - exec "$JAVACMD" "$@" diff --git a/fabric-chaincode-integration-test/src/contracts/fabric-ledger-api/gradlew.bat b/fabric-chaincode-integration-test/src/contracts/fabric-ledger-api/gradlew.bat index 24467a14..ac1b06f9 100644 --- a/fabric-chaincode-integration-test/src/contracts/fabric-ledger-api/gradlew.bat +++ b/fabric-chaincode-integration-test/src/contracts/fabric-ledger-api/gradlew.bat @@ -29,6 +29,9 @@ if "%DIRNAME%" == "" set DIRNAME=. set APP_BASE_NAME=%~n0 set APP_HOME=%DIRNAME% +@rem Resolve any "." and ".." in APP_HOME to make it shorter. +for %%i in ("%APP_HOME%") do set APP_HOME=%%~fi + @rem Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script. set DEFAULT_JVM_OPTS="-Xmx64m" "-Xms64m" @@ -37,7 +40,7 @@ if defined JAVA_HOME goto findJavaFromJavaHome set JAVA_EXE=java.exe %JAVA_EXE% -version >NUL 2>&1 -if "%ERRORLEVEL%" == "0" goto init +if "%ERRORLEVEL%" == "0" goto execute echo. echo ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH. @@ -51,7 +54,7 @@ goto fail set JAVA_HOME=%JAVA_HOME:"=% set JAVA_EXE=%JAVA_HOME%/bin/java.exe -if exist "%JAVA_EXE%" goto init +if exist "%JAVA_EXE%" goto execute echo. echo ERROR: JAVA_HOME is set to an invalid directory: %JAVA_HOME% @@ -61,28 +64,14 @@ echo location of your Java installation. goto fail -:init -@rem Get command-line arguments, handling Windows variants - -if not "%OS%" == "Windows_NT" goto win9xME_args - -:win9xME_args -@rem Slurp the command line arguments. -set CMD_LINE_ARGS= -set _SKIP=2 - -:win9xME_args_slurp -if "x%~1" == "x" goto execute - -set CMD_LINE_ARGS=%* - :execute @rem Setup the command line set CLASSPATH=%APP_HOME%\gradle\wrapper\gradle-wrapper.jar + @rem Execute Gradle -"%JAVA_EXE%" %DEFAULT_JVM_OPTS% %JAVA_OPTS% %GRADLE_OPTS% "-Dorg.gradle.appname=%APP_BASE_NAME%" -classpath "%CLASSPATH%" org.gradle.wrapper.GradleWrapperMain %CMD_LINE_ARGS% +"%JAVA_EXE%" %DEFAULT_JVM_OPTS% %JAVA_OPTS% %GRADLE_OPTS% "-Dorg.gradle.appname=%APP_BASE_NAME%" -classpath "%CLASSPATH%" org.gradle.wrapper.GradleWrapperMain %* :end @rem End local scope for the variables with windows NT shell diff --git a/fabric-chaincode-integration-test/src/contracts/fabric-ledger-api/src/main/java/org/hyperledger/fabric/example/AllLedgerAPI.java b/fabric-chaincode-integration-test/src/contracts/fabric-ledger-api/src/main/java/org/hyperledger/fabric/example/AllLedgerAPI.java index 309bb09a..c0ea6944 100644 --- a/fabric-chaincode-integration-test/src/contracts/fabric-ledger-api/src/main/java/org/hyperledger/fabric/example/AllLedgerAPI.java +++ b/fabric-chaincode-integration-test/src/contracts/fabric-ledger-api/src/main/java/org/hyperledger/fabric/example/AllLedgerAPI.java @@ -3,17 +3,15 @@ */ package org.hyperledger.fabric.example; - - import org.hyperledger.fabric.contract.Context; import org.hyperledger.fabric.contract.ContractInterface; -import org.hyperledger.fabric.contract.annotation.*; - - -import org.hyperledger.fabric.ledger.*; - -import java.util.*; -import static java.nio.charset.StandardCharsets.UTF_8; +import org.hyperledger.fabric.contract.annotation.Contact; +import org.hyperledger.fabric.contract.annotation.Contract; +import org.hyperledger.fabric.contract.annotation.Default; +import org.hyperledger.fabric.contract.annotation.Info; +import org.hyperledger.fabric.contract.annotation.License; +import org.hyperledger.fabric.contract.annotation.Transaction; +import org.hyperledger.fabric.ledger.Ledger; @Contract(name = "AllLedgerAPI", info = @Info(title = "AllLedgerAPI contract", diff --git a/fabric-chaincode-integration-test/src/contracts/fabric-shim-api/build.gradle b/fabric-chaincode-integration-test/src/contracts/fabric-shim-api/build.gradle index 51376299..fa796caf 100644 --- a/fabric-chaincode-integration-test/src/contracts/fabric-shim-api/build.gradle +++ b/fabric-chaincode-integration-test/src/contracts/fabric-shim-api/build.gradle @@ -1,5 +1,5 @@ plugins { - id 'com.github.johnrengelman.shadow' version '5.1.0' + id 'com.github.johnrengelman.shadow' version '7.1.2' id 'java' } @@ -18,18 +18,17 @@ repositories { } dependencies { - implementation group: 'org.hyperledger.fabric-chaincode-java', name: 'fabric-chaincode-shim', version: '2.5.1' - implementation group: 'org.hyperledger.fabric', name:'fabric-protos', version:'0.1.3' - testImplementation group: 'junit', name: 'junit', version: '4.12' - implementation group: 'commons-logging', name: 'commons-logging', version: '1.2' - implementation group: 'com.google.code.gson', name: 'gson', version: '2.8.6' - implementation group: 'com.google.protobuf', name: 'protobuf-java', version: '3.4.0' + implementation'org.hyperledger.fabric-chaincode-java:fabric-chaincode-shim:2.5.1' + implementation 'org.hyperledger.fabric:fabric-protos:0.2.+' + implementation 'commons-logging:commons-logging:1.2' + implementation 'com.google.code.gson:gson:2.10.1' } shadowJar { baseName = 'chaincode' version = null classifier = null + mergeServiceFiles() manifest { attributes 'Main-Class': 'org.hyperledger.fabric.contract.ContractRouter' diff --git a/fabric-chaincode-integration-test/src/contracts/fabric-shim-api/gradle/wrapper/gradle-wrapper.jar b/fabric-chaincode-integration-test/src/contracts/fabric-shim-api/gradle/wrapper/gradle-wrapper.jar index 5c2d1cf016b3885f6930543d57b744ea8c220a1a..e708b1c023ec8b20f512888fe07c5bd3ff77bb8f 100644 GIT binary patch delta 23334 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 WDWbsF$p{Gi@ZUasP|4|kdH)CXgbPdn delta 19998 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 diff --git a/fabric-chaincode-integration-test/src/contracts/fabric-shim-api/gradle/wrapper/gradle-wrapper.properties b/fabric-chaincode-integration-test/src/contracts/fabric-shim-api/gradle/wrapper/gradle-wrapper.properties index f371643e..98debb84 100644 --- a/fabric-chaincode-integration-test/src/contracts/fabric-shim-api/gradle/wrapper/gradle-wrapper.properties +++ b/fabric-chaincode-integration-test/src/contracts/fabric-shim-api/gradle/wrapper/gradle-wrapper.properties @@ -1,5 +1,5 @@ distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-7.0-bin.zip +distributionUrl=https\://services.gradle.org/distributions/gradle-7.6.2-bin.zip zipStoreBase=GRADLE_USER_HOME zipStorePath=wrapper/dists diff --git a/fabric-chaincode-integration-test/src/contracts/fabric-shim-api/gradlew b/fabric-chaincode-integration-test/src/contracts/fabric-shim-api/gradlew index 8e25e6c1..4f906e0c 100755 --- a/fabric-chaincode-integration-test/src/contracts/fabric-shim-api/gradlew +++ b/fabric-chaincode-integration-test/src/contracts/fabric-shim-api/gradlew @@ -82,6 +82,7 @@ esac CLASSPATH=$APP_HOME/gradle/wrapper/gradle-wrapper.jar + # Determine the Java command to use to start the JVM. if [ -n "$JAVA_HOME" ] ; then if [ -x "$JAVA_HOME/jre/sh/java" ] ; then @@ -125,10 +126,11 @@ if $darwin; then GRADLE_OPTS="$GRADLE_OPTS \"-Xdock:name=$APP_NAME\" \"-Xdock:icon=$APP_HOME/media/gradle.icns\"" fi -# For Cygwin, switch paths to Windows format before running java -if $cygwin ; then +# For Cygwin or MSYS, switch paths to Windows format before running java +if [ "$cygwin" = "true" -o "$msys" = "true" ] ; then APP_HOME=`cygpath --path --mixed "$APP_HOME"` CLASSPATH=`cygpath --path --mixed "$CLASSPATH"` + JAVACMD=`cygpath --unix "$JAVACMD"` # We build the pattern for arguments to be converted via cygpath @@ -154,19 +156,19 @@ if $cygwin ; then else eval `echo args$i`="\"$arg\"" fi - i=$((i+1)) + i=`expr $i + 1` done case $i in - (0) set -- ;; - (1) set -- "$args0" ;; - (2) set -- "$args0" "$args1" ;; - (3) set -- "$args0" "$args1" "$args2" ;; - (4) set -- "$args0" "$args1" "$args2" "$args3" ;; - (5) set -- "$args0" "$args1" "$args2" "$args3" "$args4" ;; - (6) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" ;; - (7) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" ;; - (8) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" "$args7" ;; - (9) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" "$args7" "$args8" ;; + 0) set -- ;; + 1) set -- "$args0" ;; + 2) set -- "$args0" "$args1" ;; + 3) set -- "$args0" "$args1" "$args2" ;; + 4) set -- "$args0" "$args1" "$args2" "$args3" ;; + 5) set -- "$args0" "$args1" "$args2" "$args3" "$args4" ;; + 6) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" ;; + 7) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" ;; + 8) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" "$args7" ;; + 9) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" "$args7" "$args8" ;; esac fi @@ -175,14 +177,9 @@ save () { for i do printf %s\\n "$i" | sed "s/'/'\\\\''/g;1s/^/'/;\$s/\$/' \\\\/" ; done echo " " } -APP_ARGS=$(save "$@") +APP_ARGS=`save "$@"` # Collect all arguments for the java command, following the shell quoting and substitution rules eval set -- $DEFAULT_JVM_OPTS $JAVA_OPTS $GRADLE_OPTS "\"-Dorg.gradle.appname=$APP_BASE_NAME\"" -classpath "\"$CLASSPATH\"" org.gradle.wrapper.GradleWrapperMain "$APP_ARGS" -# by default we should be in the correct project dir, but when run from Finder on Mac, the cwd is wrong -if [ "$(uname)" = "Darwin" ] && [ "$HOME" = "$PWD" ]; then - cd "$(dirname "$0")" -fi - exec "$JAVACMD" "$@" diff --git a/fabric-chaincode-integration-test/src/contracts/fabric-shim-api/gradlew.bat b/fabric-chaincode-integration-test/src/contracts/fabric-shim-api/gradlew.bat index 24467a14..ac1b06f9 100644 --- a/fabric-chaincode-integration-test/src/contracts/fabric-shim-api/gradlew.bat +++ b/fabric-chaincode-integration-test/src/contracts/fabric-shim-api/gradlew.bat @@ -29,6 +29,9 @@ if "%DIRNAME%" == "" set DIRNAME=. set APP_BASE_NAME=%~n0 set APP_HOME=%DIRNAME% +@rem Resolve any "." and ".." in APP_HOME to make it shorter. +for %%i in ("%APP_HOME%") do set APP_HOME=%%~fi + @rem Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script. set DEFAULT_JVM_OPTS="-Xmx64m" "-Xms64m" @@ -37,7 +40,7 @@ if defined JAVA_HOME goto findJavaFromJavaHome set JAVA_EXE=java.exe %JAVA_EXE% -version >NUL 2>&1 -if "%ERRORLEVEL%" == "0" goto init +if "%ERRORLEVEL%" == "0" goto execute echo. echo ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH. @@ -51,7 +54,7 @@ goto fail set JAVA_HOME=%JAVA_HOME:"=% set JAVA_EXE=%JAVA_HOME%/bin/java.exe -if exist "%JAVA_EXE%" goto init +if exist "%JAVA_EXE%" goto execute echo. echo ERROR: JAVA_HOME is set to an invalid directory: %JAVA_HOME% @@ -61,28 +64,14 @@ echo location of your Java installation. goto fail -:init -@rem Get command-line arguments, handling Windows variants - -if not "%OS%" == "Windows_NT" goto win9xME_args - -:win9xME_args -@rem Slurp the command line arguments. -set CMD_LINE_ARGS= -set _SKIP=2 - -:win9xME_args_slurp -if "x%~1" == "x" goto execute - -set CMD_LINE_ARGS=%* - :execute @rem Setup the command line set CLASSPATH=%APP_HOME%\gradle\wrapper\gradle-wrapper.jar + @rem Execute Gradle -"%JAVA_EXE%" %DEFAULT_JVM_OPTS% %JAVA_OPTS% %GRADLE_OPTS% "-Dorg.gradle.appname=%APP_BASE_NAME%" -classpath "%CLASSPATH%" org.gradle.wrapper.GradleWrapperMain %CMD_LINE_ARGS% +"%JAVA_EXE%" %DEFAULT_JVM_OPTS% %JAVA_OPTS% %GRADLE_OPTS% "-Dorg.gradle.appname=%APP_BASE_NAME%" -classpath "%CLASSPATH%" org.gradle.wrapper.GradleWrapperMain %* :end @rem End local scope for the variables with windows NT shell diff --git a/fabric-chaincode-integration-test/src/contracts/fabric-shim-api/src/main/java/org/hyperledger/fabric/example/AllAPI.java b/fabric-chaincode-integration-test/src/contracts/fabric-shim-api/src/main/java/org/hyperledger/fabric/example/AllAPI.java index 630c584f..5c58ba14 100644 --- a/fabric-chaincode-integration-test/src/contracts/fabric-shim-api/src/main/java/org/hyperledger/fabric/example/AllAPI.java +++ b/fabric-chaincode-integration-test/src/contracts/fabric-shim-api/src/main/java/org/hyperledger/fabric/example/AllAPI.java @@ -5,12 +5,16 @@ import org.hyperledger.fabric.contract.Context; import org.hyperledger.fabric.contract.ContractInterface; -import org.hyperledger.fabric.contract.annotation.*; +import org.hyperledger.fabric.contract.annotation.Contact; +import org.hyperledger.fabric.contract.annotation.Contract; +import org.hyperledger.fabric.contract.annotation.Default; +import org.hyperledger.fabric.contract.annotation.Info; +import org.hyperledger.fabric.contract.annotation.License; +import org.hyperledger.fabric.contract.annotation.Transaction; import org.hyperledger.fabric.metrics.Metrics; import org.hyperledger.fabric.metrics.MetricsProvider; import org.hyperledger.fabric.shim.ledger.*; import org.hyperledger.fabric.shim.*; -import java.util.*; import static java.nio.charset.StandardCharsets.UTF_8; @Contract(name = "AllAPI", diff --git a/fabric-chaincode-integration-test/src/contracts/wrapper-maven/pom.xml b/fabric-chaincode-integration-test/src/contracts/wrapper-maven/pom.xml index c3df85b9..069665ac 100644 --- a/fabric-chaincode-integration-test/src/contracts/wrapper-maven/pom.xml +++ b/fabric-chaincode-integration-test/src/contracts/wrapper-maven/pom.xml @@ -14,14 +14,6 @@ 2.5.1 - - 1.2.0 - 1.7.5 - - - 5.3.0-RC1 - 1.3.0-RC1 - @@ -49,75 +41,13 @@ compile - - org.hyperledger.fabric - fabric-protos - 0.1.3 - compile - - - - - - - - org.slf4j - slf4j-api - ${slf4j.version} - compile - - - ch.qos.logback - logback-classic - ${logback.version} - runtime - - - - - org.junit.jupiter - junit-jupiter-api - ${junit.jupiter.version} - compile - - - org.junit.jupiter - junit-jupiter-params - ${junit.jupiter.version} - test - - - org.junit.jupiter - junit-jupiter-engine - ${junit.jupiter.version} - test - - - - org.mockito - mockito-core - 2.10.0 - - - - - org.json - json - 20180813 - - src - - - maven-surefire-plugin - 2.22.0 - maven-compiler-plugin - 3.1 + 3.11.0 ${java.version} ${java.version} @@ -126,7 +56,7 @@ org.apache.maven.plugins maven-shade-plugin - 3.1.0 + 3.5.0 package @@ -136,6 +66,7 @@ chaincode + org.hyperledger.fabric.contract.ContractRouter @@ -158,5 +89,4 @@ - diff --git a/fabric-chaincode-integration-test/src/contracts/wrapper-maven/src/main/java/org/hyperledger/fabric/example/WrapperMaven.java b/fabric-chaincode-integration-test/src/contracts/wrapper-maven/src/main/java/org/hyperledger/fabric/example/WrapperMaven.java index b92be287..436751ba 100644 --- a/fabric-chaincode-integration-test/src/contracts/wrapper-maven/src/main/java/org/hyperledger/fabric/example/WrapperMaven.java +++ b/fabric-chaincode-integration-test/src/contracts/wrapper-maven/src/main/java/org/hyperledger/fabric/example/WrapperMaven.java @@ -5,14 +5,12 @@ import org.hyperledger.fabric.contract.Context; import org.hyperledger.fabric.contract.ContractInterface; -import org.hyperledger.fabric.contract.annotation.*; -import org.hyperledger.fabric.metrics.Metrics; -import org.hyperledger.fabric.metrics.MetricsProvider; -import org.hyperledger.fabric.shim.ledger.*; -import org.hyperledger.fabric.shim.*; - -import java.util.*; -import static java.nio.charset.StandardCharsets.UTF_8; +import org.hyperledger.fabric.contract.annotation.Contact; +import org.hyperledger.fabric.contract.annotation.Contract; +import org.hyperledger.fabric.contract.annotation.Default; +import org.hyperledger.fabric.contract.annotation.Info; +import org.hyperledger.fabric.contract.annotation.License; +import org.hyperledger.fabric.contract.annotation.Transaction; @Contract(name = "WrapperMaven", info = @Info(title = "BareGradle contract", diff --git a/fabric-chaincode-integration-test/src/test/java/org/hyperleder/fabric/shim/integration/util/InvokeHelper.java b/fabric-chaincode-integration-test/src/test/java/org/hyperleder/fabric/shim/integration/util/InvokeHelper.java index b8ee128e..971cb252 100644 --- a/fabric-chaincode-integration-test/src/test/java/org/hyperleder/fabric/shim/integration/util/InvokeHelper.java +++ b/fabric-chaincode-integration-test/src/test/java/org/hyperleder/fabric/shim/integration/util/InvokeHelper.java @@ -1,11 +1,12 @@ package org.hyperleder.fabric.shim.integration.util; -import java.util.Map; -import java.util.stream.Collectors; - import org.hyperleder.fabric.shim.integration.util.Command.Result; import org.hyperleder.fabric.shim.integration.util.Peer.PeerBuilder; +import java.util.Arrays; +import java.util.Map; +import java.util.stream.Collectors; + public class InvokeHelper { private String ccname; @@ -33,6 +34,8 @@ public String invoke(String org, String... args){ .trim(); if (!text.contains("result: status:200")){ + Command logsCommand = new Command(Arrays.asList("docker", "logs", "microfab"), orgEnv); + logsCommand.run(); throw new RuntimeException(text); } diff --git a/fabric-chaincode-shim/build.gradle b/fabric-chaincode-shim/build.gradle index 02daa4e5..86ee2bcd 100644 --- a/fabric-chaincode-shim/build.gradle +++ b/fabric-chaincode-shim/build.gradle @@ -8,7 +8,7 @@ mavenCentral() } dependencies { - classpath 'org.owasp:dependency-check-gradle:8.2.1' + classpath 'org.owasp:dependency-check-gradle:8.4.0' } } @@ -22,7 +22,7 @@ plugins { apply plugin: 'org.owasp.dependencycheck' checkstyle { - toolVersion '8.29' + toolVersion '10.12.2' configFile file("../ci/checkstyle/checkstyle.xml") configProperties = [root_dir: file("..") ] } @@ -34,6 +34,11 @@ checkstyleTest { source ='src/test/java' } +dependencyCheck { + suppressionFile='dependency-suppression.xml' + scanConfigurations = ['runtimeClasspath'] +} + check.dependsOn dependencyCheckAnalyze tasks.withType(org.gradle.api.tasks.testing.Test) { @@ -41,30 +46,32 @@ tasks.withType(org.gradle.api.tasks.testing.Test) { } dependencies { - implementation group: 'org.hyperledger.fabric', name:'fabric-protos', version:'0.2.0' - implementation 'org.bouncycastle:bcpkix-jdk18on:1.75' - implementation 'org.bouncycastle:bcprov-jdk18on:1.75' - implementation 'io.github.classgraph:classgraph:4.8.161' - implementation group: 'com.github.everit-org.json-schema', name: 'org.everit.json.schema', version: '1.14.2' + implementation 'org.hyperledger.fabric:fabric-protos:0.2.1' + implementation 'org.bouncycastle:bcpkix-jdk18on:1.76' + implementation 'org.bouncycastle:bcprov-jdk18on:1.76' + implementation 'io.github.classgraph:classgraph:4.8.162' + implementation 'com.github.everit-org.json-schema:org.everit.json.schema:1.14.2' implementation 'org.json:json:20230618' - implementation group: 'com.google.protobuf', name: 'protobuf-java-util', version: '3.19.6' + implementation 'com.google.protobuf:protobuf-java-util:3.22.5' // Required if using Java 11+ as no longer bundled in the core libraries - testImplementation group: 'javax.xml.bind', name: 'jaxb-api', version: '2.3.1' - implementation 'io.grpc:grpc-netty-shaded:1.45.4' - implementation 'io.grpc:grpc-protobuf:1.45.4' - implementation 'io.grpc:grpc-stub:1.45.4' - - implementation platform("io.opentelemetry:opentelemetry-bom:1.6.0") - - implementation "io.opentelemetry:opentelemetry-api" - implementation "io.opentelemetry:opentelemetry-proto:1.6.0-alpha" - implementation "io.opentelemetry:opentelemetry-sdk" - implementation "io.opentelemetry:opentelemetry-sdk-extension-autoconfigure:1.6.0-alpha" - implementation "io.opentelemetry:opentelemetry-sdk-trace" + testImplementation 'javax.xml.bind:jaxb-api:2.3.1' + + implementation platform('io.grpc:grpc-bom:1.57.2') + implementation 'io.grpc:grpc-netty-shaded' + implementation 'io.grpc:grpc-protobuf' + implementation 'io.grpc:grpc-stub' + + implementation platform("io.opentelemetry:opentelemetry-bom:1.29.0") + + implementation 'io.opentelemetry:opentelemetry-api' + implementation 'io.opentelemetry.proto:opentelemetry-proto:1.0.0-alpha' + implementation 'io.opentelemetry:opentelemetry-sdk' + implementation 'io.opentelemetry:opentelemetry-sdk-extension-autoconfigure' + implementation 'io.opentelemetry:opentelemetry-sdk-trace' implementation 'io.opentelemetry:opentelemetry-exporter-otlp' - implementation 'io.opentelemetry:opentelemetry-extension-trace-propagators:1.6.0' - implementation "io.opentelemetry.instrumentation:opentelemetry-grpc-1.6:1.5.3-alpha" + implementation 'io.opentelemetry:opentelemetry-extension-trace-propagators' + implementation 'io.opentelemetry.instrumentation:opentelemetry-grpc-1.6:1.29.0-alpha' } dependencyCheck { diff --git a/fabric-chaincode-shim/src/main/java/org/hyperledger/fabric/contract/annotation/Serializer.java b/fabric-chaincode-shim/src/main/java/org/hyperledger/fabric/contract/annotation/Serializer.java index ba0ebb23..10ff45d6 100644 --- a/fabric-chaincode-shim/src/main/java/org/hyperledger/fabric/contract/annotation/Serializer.java +++ b/fabric-chaincode-shim/src/main/java/org/hyperledger/fabric/contract/annotation/Serializer.java @@ -15,7 +15,7 @@ * Class level annotation that defines the serializer that should be used to * convert objects to and from the wire format. * - * This should annotate a class that implements the Serializer interface + *

This should annotate a class that implements the Serializer interface

*/ @Retention(RUNTIME) @Target({ElementType.TYPE, ElementType.TYPE_USE}) @@ -25,7 +25,14 @@ * */ enum TARGET { - TRANSACTION, ALL + /** + * Target transaction functions. + */ + TRANSACTION, + /** + * Target all elements. + */ + ALL } /** diff --git a/fabric-chaincode-shim/src/main/java/org/hyperledger/fabric/contract/annotation/Transaction.java b/fabric-chaincode-shim/src/main/java/org/hyperledger/fabric/contract/annotation/Transaction.java index 5bdf8c95..c9180ca4 100644 --- a/fabric-chaincode-shim/src/main/java/org/hyperledger/fabric/contract/annotation/Transaction.java +++ b/fabric-chaincode-shim/src/main/java/org/hyperledger/fabric/contract/annotation/Transaction.java @@ -29,20 +29,27 @@ public @interface Transaction { /** - * SUBMIT or EVALUATE semantics. + * The intended invocation style for a transaction function. */ enum TYPE { - SUBMIT, EVALUATE + /** + * Transaction is used to submit updates to the ledger. + */ + SUBMIT, + /** + * Transaction is evaluated to query information from the ledger. + */ + EVALUATE } /** * Submit semantics. * - * TRUE indicates that this function is intended to be called with the 'submit' - * semantics + *

TRUE indicates that this function is intended to be called with the 'submit' + * semantics

* - * FALSE indicates that this is intended to be called with the evaluate - * semantics + *

FALSE indicates that this is intended to be called with the evaluate + * semantics

* * @return boolean, default is true * @deprecated Please use intent @@ -52,11 +59,12 @@ enum TYPE { /** * What are submit semantics for this transaction. - * - * SUBMIT - indicates that this function is intended to be called with the - * 'submit' semantics EVALUATE - indicates that this is intended to be called - * with the 'evaluate' semantics - * + *
+ *
SUBMIT
indicates that this function is intended to be called with the + * 'submit' semantics
+ *
EVALUATE
indicates that this is intended to be called + * with the 'evaluate' semantics
+ *
* @return submit semantics */ TYPE intent() default Transaction.TYPE.SUBMIT; diff --git a/fabric-chaincode-shim/src/main/java/org/hyperledger/fabric/contract/routing/TxFunction.java b/fabric-chaincode-shim/src/main/java/org/hyperledger/fabric/contract/routing/TxFunction.java index b2df4203..860e2278 100644 --- a/fabric-chaincode-shim/src/main/java/org/hyperledger/fabric/contract/routing/TxFunction.java +++ b/fabric-chaincode-shim/src/main/java/org/hyperledger/fabric/contract/routing/TxFunction.java @@ -15,13 +15,32 @@ public interface TxFunction { interface Routing { - + /** + * Method to route calls to the transaction function. + * @return a method. + */ Method getMethod(); + /** + * The associated contract class. + * @return a contract class. + */ Class getContractClass(); + /** + * The associated contract instance. + * @return a contract. + * @throws IllegalAccessException + * @throws InstantiationException + * @throws InvocationTargetException + * @throws NoSuchMethodException + */ ContractInterface getContractInstance() throws IllegalAccessException, InstantiationException, InvocationTargetException, NoSuchMethodException; + /** + * Name of the serializer used for the transaction function. + * @return a serializer name. + */ String getSerializerName(); } @@ -31,7 +50,7 @@ interface Routing { boolean isUnknownTx(); /** - * @param unknown + * @param unknown true if the transaction is to be called when the request fn is unknown; otherwise false. */ void setUnknownTx(boolean unknown); diff --git a/fabric-chaincode-shim/src/main/java/org/hyperledger/fabric/ledger/impl/package-info.java b/fabric-chaincode-shim/src/main/java/org/hyperledger/fabric/ledger/impl/package-info.java new file mode 100644 index 00000000..96b288ea --- /dev/null +++ b/fabric-chaincode-shim/src/main/java/org/hyperledger/fabric/ledger/impl/package-info.java @@ -0,0 +1,6 @@ +/* + * Copyright 2023 IBM All Rights Reserved. + * + * SPDX-License-Identifier: Apache-2.0 + */ +package org.hyperledger.fabric.ledger.impl; diff --git a/fabric-chaincode-shim/src/main/java/org/hyperledger/fabric/shim/Chaincode.java b/fabric-chaincode-shim/src/main/java/org/hyperledger/fabric/shim/Chaincode.java index 8209c666..046595df 100644 --- a/fabric-chaincode-shim/src/main/java/org/hyperledger/fabric/shim/Chaincode.java +++ b/fabric-chaincode-shim/src/main/java/org/hyperledger/fabric/shim/Chaincode.java @@ -39,23 +39,38 @@ public interface Chaincode { * and{@link #invoke(ChaincodeStub)} */ class Response { - private final int statusCode; private final String message; private final byte[] payload; + /** + * Constructor. + * @param status a status object. + * @param message a response message. + * @param payload a response payload. + */ public Response(final Status status, final String message, final byte[] payload) { this.statusCode = status.getCode(); this.message = message; this.payload = payload; } + /** + * Constructor. + * @param statusCode a status code. + * @param message a response message. + * @param payload a response payload. + */ public Response(final int statusCode, final String message, final byte[] payload) { this.statusCode = statusCode; this.message = message; this.payload = payload; } + /** + * Get the response status. + * @return status. + */ public Status getStatus() { if (Status.hasStatusForCode(statusCode)) { return Status.forCode(statusCode); @@ -64,18 +79,34 @@ public Status getStatus() { } } + /** + * Get the response status code. + * @return status code. + */ public int getStatusCode() { return statusCode; } + /** + * Get the response message. + * @return a message. + */ public String getMessage() { return message; } + /** + * Get the response payload. + * @return payload bytes. + */ public byte[] getPayload() { return payload; } + /** + * Get the response payload as a UTF-8 string. + * @return a string. + */ public String getStringPayload() { return (payload == null) ? null : new String(payload, UTF_8); } @@ -84,7 +115,18 @@ public String getStringPayload() { * {@link Response} status enum. */ public enum Status { - SUCCESS(200), ERROR_THRESHOLD(400), INTERNAL_SERVER_ERROR(500); + /** + * Successful response status. + */ + SUCCESS(200), + /** + * Minimum threshold for as error status code. + */ + ERROR_THRESHOLD(400), + /** + * Server-side error status. + */ + INTERNAL_SERVER_ERROR(500); private static final Map CODETOSTATUS = new HashMap<>(); private final int code; @@ -93,10 +135,19 @@ public enum Status { this.code = code; } + /** + * Get the status code associated with this status object. + * @return a status code. + */ public int getCode() { return code; } + /** + * Get a status object for a given status code. + * @param code a status code. + * @return a status object. + */ public static Status forCode(final int code) { final Status result = CODETOSTATUS.get(code); if (result == null) { @@ -105,6 +156,11 @@ public static Status forCode(final int code) { return result; } + /** + * Whether a status exists for a given status code. + * @param code a status code. + * @return True if a status for the code exists; otherwise false. + */ public static boolean hasStatusForCode(final int code) { return CODETOSTATUS.containsKey(code); } diff --git a/fabric-chaincode-shim/src/main/java/org/hyperledger/fabric/shim/ChaincodeServerProperties.java b/fabric-chaincode-shim/src/main/java/org/hyperledger/fabric/shim/ChaincodeServerProperties.java index 6e9f0192..27c84257 100644 --- a/fabric-chaincode-shim/src/main/java/org/hyperledger/fabric/shim/ChaincodeServerProperties.java +++ b/fabric-chaincode-shim/src/main/java/org/hyperledger/fabric/shim/ChaincodeServerProperties.java @@ -8,14 +8,13 @@ import java.net.SocketAddress; public final class ChaincodeServerProperties { - private SocketAddress serverAddress; - private int maxInboundMetadataSize = 100 * 1024 * 1024; - private int maxInboundMessageSize = 100 * 1024 * 1024; - private int maxConnectionAgeSeconds = 5; - private int keepAliveTimeoutSeconds = 20; - private int permitKeepAliveTimeMinutes = 1; - private int keepAliveTimeMinutes = 1; + private int maxInboundMetadataSize = 100 * 1024 * 1024; // checkstyle:ignore-line:MagicNumber + private int maxInboundMessageSize = 100 * 1024 * 1024; // checkstyle:ignore-line:MagicNumber + private int maxConnectionAgeSeconds = 5; // checkstyle:ignore-line:MagicNumber + private int keepAliveTimeoutSeconds = 20; // checkstyle:ignore-line:MagicNumber + private int permitKeepAliveTimeMinutes = 1; // checkstyle:ignore-line:MagicNumber + private int keepAliveTimeMinutes = 1; // checkstyle:ignore-line:MagicNumber private boolean permitKeepAliveWithoutCalls = true; private String keyPassword; private String keyCertChainFile; @@ -23,9 +22,24 @@ public final class ChaincodeServerProperties { private String trustCertCollectionFile; private boolean tlsEnabled = false; + /** + * Constructor using default configuration. + */ public ChaincodeServerProperties() { } + /** + * Constructor. + * @param portChaincodeServer ignored. + * @param maxInboundMetadataSize the maximum metadata size allowed to be received by the server. + * @param maxInboundMessageSize the maximum message size allowed to be received by the server. + * @param maxConnectionAgeSeconds the maximum connection age in seconds. + * @param keepAliveTimeoutSeconds timeout for a keep-alive ping request in seconds. + * @param permitKeepAliveTimeMinutes the most aggressive keep-alive time clients are permitted to configure in minutes. + * @param keepAliveTimeMinutes delay before server sends a keep-alive in minutes. + * @param permitKeepAliveWithoutCalls whether clients are allowed to send keep-alive HTTP/2 PINGs even if there are no outstanding RPCs on the connection. + */ + // checkstyle:ignore-next-line:ParameterNumber public ChaincodeServerProperties( final int portChaincodeServer, final int maxInboundMetadataSize, final int maxInboundMessageSize, final int maxConnectionAgeSeconds, final int keepAliveTimeoutSeconds, final int permitKeepAliveTimeMinutes, @@ -41,114 +55,226 @@ public ChaincodeServerProperties( this.permitKeepAliveWithoutCalls = permitKeepAliveWithoutCalls; } + /** + * The maximum size of metadata allowed to be received. + * @return The maximum metadata size allowed. + */ public int getMaxInboundMetadataSize() { return maxInboundMetadataSize; } + /** + * Sets the maximum metadata size allowed to be received by the server. + * @param maxInboundMetadataSize The new maximum size allowed for incoming metadata. + */ public void setMaxInboundMetadataSize(final int maxInboundMetadataSize) { this.maxInboundMetadataSize = maxInboundMetadataSize; } + /** + * The maximum message size allowed to be received by the server. + * @return the maximum message size allowed. + */ public int getMaxInboundMessageSize() { return maxInboundMessageSize; } + /** + * Sets the maximum message size allowed to be received by the server. + * @param maxInboundMessageSize The new maximum size allowed for incoming messages. + */ public void setMaxInboundMessageSize(final int maxInboundMessageSize) { this.maxInboundMessageSize = maxInboundMessageSize; } + /** + * The maximum connection age. + * @return The maximum connection age in seconds. + */ public int getMaxConnectionAgeSeconds() { return maxConnectionAgeSeconds; } + /** + * Specify a maximum connection age. + * @param maxConnectionAgeSeconds The maximum connection age in seconds. + */ public void setMaxConnectionAgeSeconds(final int maxConnectionAgeSeconds) { this.maxConnectionAgeSeconds = maxConnectionAgeSeconds; } + /** + * The timeout for a keep-alive ping requests. + * @return timeout in seconds. + */ public int getKeepAliveTimeoutSeconds() { return keepAliveTimeoutSeconds; } + /** + * Set the timeout for keep-alive ping requests. + * @param keepAliveTimeoutSeconds timeout in seconds. + */ public void setKeepAliveTimeoutSeconds(final int keepAliveTimeoutSeconds) { this.keepAliveTimeoutSeconds = keepAliveTimeoutSeconds; } + /** + * The most aggressive keep-alive time clients are permitted to configure. + * @return time in minutes. + */ public int getPermitKeepAliveTimeMinutes() { return permitKeepAliveTimeMinutes; } + /** + * Specify the most aggressive keep-alive time clients are permitted to configure. + * @param permitKeepAliveTimeMinutes time in minutes. + */ public void setPermitKeepAliveTimeMinutes(final int permitKeepAliveTimeMinutes) { this.permitKeepAliveTimeMinutes = permitKeepAliveTimeMinutes; } + /** + * The delay before the server sends a keep-alive. + * @return delay in minutes. + */ public int getKeepAliveTimeMinutes() { return keepAliveTimeMinutes; } + /** + * Set the delay before the server sends a keep-alive. + * @param keepAliveTimeMinutes delay in minutes. + */ public void setKeepAliveTimeMinutes(final int keepAliveTimeMinutes) { this.keepAliveTimeMinutes = keepAliveTimeMinutes; } + /** + * Whether clients are allowed to send keep-alive HTTP/2 PINGs even if there are no outstanding RPCs on the connection. + * @return true if clients are allowed to send keep-alive requests without calls; otherwise false. + */ public boolean getPermitKeepAliveWithoutCalls() { return permitKeepAliveWithoutCalls; } + /** + * Get the server socket address. + * @return a socket address. + */ public SocketAddress getServerAddress() { return serverAddress; } + /** + * Set the server socket address. + * @param address a socket address. + */ public void setServerAddress(final SocketAddress address) { this.serverAddress = address; } + /** + * Whether clients are allowed to send keep-alive HTTP/2 PINGs even if there are no outstanding RPCs on the connection. + * @return true if clients are allowed to send keep-alive requests without calls; otherwise false. + */ public boolean isPermitKeepAliveWithoutCalls() { return permitKeepAliveWithoutCalls; } + /** + * Specify whether clients are allowed to send keep-alive HTTP/2 PINGs even if there are no outstanding RPCs on the connection. + * @param permitKeepAliveWithoutCalls Whether to allow clients to send keep-alive requests without calls. + */ public void setPermitKeepAliveWithoutCalls(final boolean permitKeepAliveWithoutCalls) { this.permitKeepAliveWithoutCalls = permitKeepAliveWithoutCalls; } + /** + * Password used to access the server key. + * @return a password. + */ public String getKeyPassword() { return keyPassword; } + /** + * Set the password used to access the server key. + * @param keyPassword a password. + */ public void setKeyPassword(final String keyPassword) { this.keyPassword = keyPassword; } + /** + * Server keychain file name. + * @return a file name. + */ public String getKeyCertChainFile() { return keyCertChainFile; } + /** + * Set the server keychain file name. + * @param keyCertChainFile a file name. + */ public void setKeyCertChainFile(final String keyCertChainFile) { this.keyCertChainFile = keyCertChainFile; } + /** + * Server key file name. + * @return a file name. + */ public String getKeyFile() { return keyFile; } + /** + * Set the server key file name. + * @param keyFile a file name. + */ public void setKeyFile(final String keyFile) { this.keyFile = keyFile; } + /** + * Server trust certificate collection file name. + * @return a file name. + */ public String getTrustCertCollectionFile() { return trustCertCollectionFile; } + /** + * Set the server trust certificate collection file name. + * @param trustCertCollectionFile a file name. + */ public void setTrustCertCollectionFile(final String trustCertCollectionFile) { this.trustCertCollectionFile = trustCertCollectionFile; } + /** + * Whether TLS is enabled for the server. + * @return true if TLS is enabled; otherwise false. + */ public boolean isTlsEnabled() { return tlsEnabled; } + /** + * Set whether TLS is enabled for the server. + * @param tlsEnabled true to enable TLS; otherwise false. + */ public void setTlsEnabled(final boolean tlsEnabled) { this.tlsEnabled = tlsEnabled; } + /** + * Check that all the server property values are valid. + * @throws IllegalArgumentException if any properties are not valid. + */ public void validate() { if (this.getServerAddress() == null) { throw new IllegalArgumentException("chaincodeServerProperties.getServerAddress() must be set"); diff --git a/fabric-chaincode-shim/src/main/java/org/hyperledger/fabric/shim/ext/sbe/impl/package-info.java b/fabric-chaincode-shim/src/main/java/org/hyperledger/fabric/shim/ext/sbe/impl/package-info.java new file mode 100644 index 00000000..f4f3bb51 --- /dev/null +++ b/fabric-chaincode-shim/src/main/java/org/hyperledger/fabric/shim/ext/sbe/impl/package-info.java @@ -0,0 +1,6 @@ +/* + * Copyright 2023 IBM All Rights Reserved. + * + * SPDX-License-Identifier: Apache-2.0 + */ +package org.hyperledger.fabric.shim.ext.sbe.impl; diff --git a/fabric-chaincode-shim/src/main/java/org/hyperledger/fabric/traces/impl/OpenTelemetryTracesProvider.java b/fabric-chaincode-shim/src/main/java/org/hyperledger/fabric/traces/impl/OpenTelemetryTracesProvider.java index 5610985b..dd15f05e 100644 --- a/fabric-chaincode-shim/src/main/java/org/hyperledger/fabric/traces/impl/OpenTelemetryTracesProvider.java +++ b/fabric-chaincode-shim/src/main/java/org/hyperledger/fabric/traces/impl/OpenTelemetryTracesProvider.java @@ -11,12 +11,14 @@ import io.opentelemetry.api.trace.SpanKind; import io.opentelemetry.api.trace.Tracer; import io.opentelemetry.context.Context; -import io.opentelemetry.instrumentation.grpc.v1_6.GrpcTracing; -import io.opentelemetry.sdk.autoconfigure.OpenTelemetrySdkAutoConfiguration; +import io.opentelemetry.instrumentation.grpc.v1_6.GrpcTelemetry; +import io.opentelemetry.sdk.autoconfigure.AutoConfiguredOpenTelemetrySdk; import io.opentelemetry.semconv.resource.attributes.ResourceAttributes; import org.hyperledger.fabric.shim.ChaincodeStub; import org.hyperledger.fabric.traces.TracesProvider; +import java.util.HashMap; +import java.util.Map; import java.util.Properties; public final class OpenTelemetryTracesProvider implements TracesProvider { @@ -26,17 +28,31 @@ public final class OpenTelemetryTracesProvider implements TracesProvider { private static final String CORE_CHAINCODE_ID_NAME = "CORE_CHAINCODE_ID_NAME"; private Tracer tracer; - private GrpcTracing grpcTracer; + private GrpcTelemetry grpcTracer; @Override public void initialize(final Properties props) { String serviceName = props.getProperty(CORE_CHAINCODE_ID_NAME, "unknown"); props.setProperty(ResourceAttributes.SERVICE_NAME.getKey(), serviceName); - OpenTelemetry openTelemetry = OpenTelemetrySdkAutoConfiguration.initialize(false, - new OpenTelemetryProperties(System.getenv(), System.getProperties(), props)); + OpenTelemetry openTelemetry = AutoConfiguredOpenTelemetrySdk.builder() + .addPropertiesSupplier(() -> getOpenTelemetryProperties(props)) + .build() + .getOpenTelemetrySdk(); + tracer = openTelemetry.getTracerProvider().get("org.hyperledger.traces"); - grpcTracer = GrpcTracing.newBuilder(openTelemetry).build(); + grpcTracer = GrpcTelemetry.create(openTelemetry); + } + + private Map getOpenTelemetryProperties(final Properties props) { + Map results = new HashMap<>(System.getenv()); + + Properties systemProps = System.getProperties(); + systemProps.stringPropertyNames().forEach(key -> results.put(key, systemProps.getProperty(key))); + + props.stringPropertyNames().forEach(key -> results.put(key, props.getProperty(key))); + + return results; } @Override diff --git a/fabric-chaincode-shim/src/main/java/org/hyperledger/fabric/traces/impl/package-info.java b/fabric-chaincode-shim/src/main/java/org/hyperledger/fabric/traces/impl/package-info.java new file mode 100644 index 00000000..b8aef10b --- /dev/null +++ b/fabric-chaincode-shim/src/main/java/org/hyperledger/fabric/traces/impl/package-info.java @@ -0,0 +1,6 @@ +/* + * Copyright 2023 IBM All Rights Reserved. + * + * SPDX-License-Identifier: Apache-2.0 + */ +package org.hyperledger.fabric.traces.impl; diff --git a/fabric-chaincode-shim/src/test/java/org/hyperledger/fabric/traces/impl/OpenTelemetryTracesProviderTest.java b/fabric-chaincode-shim/src/test/java/org/hyperledger/fabric/traces/impl/OpenTelemetryTracesProviderTest.java index 3b900b36..7b03a3f2 100644 --- a/fabric-chaincode-shim/src/test/java/org/hyperledger/fabric/traces/impl/OpenTelemetryTracesProviderTest.java +++ b/fabric-chaincode-shim/src/test/java/org/hyperledger/fabric/traces/impl/OpenTelemetryTracesProviderTest.java @@ -40,7 +40,7 @@ public final class OpenTelemetryTracesProviderTest { - private class ContextGetterChaincode extends ChaincodeBase { + private final class ContextGetterChaincode extends ChaincodeBase { @Override public Response init(final ChaincodeStub stub) { diff --git a/gradle/wrapper/gradle-wrapper.jar b/gradle/wrapper/gradle-wrapper.jar index e708b1c023ec8b20f512888fe07c5bd3ff77bb8f..7454180f2ae8848c63b8b4dea2cb829da983f2fa 100644 GIT binary patch delta 18435 zcmY&<19zBR)MXm8v2EM7ZQHi-#I|kQZfv7Tn#Q)%81v4zX3d)U4d4 zYYc!v@NU%|U;_sM`2z(4BAilWijmR>4U^KdN)D8%@2KLcqkTDW%^3U(Wg>{qkAF z&RcYr;D1I5aD(N-PnqoEeBN~JyXiT(+@b`4Pv`;KmkBXYN48@0;iXuq6!ytn`vGp$ z6X4DQHMx^WlOek^bde&~cvEO@K$oJ}i`T`N;M|lX0mhmEH zuRpo!rS~#&rg}ajBdma$$}+vEhz?JAFUW|iZEcL%amAg_pzqul-B7Itq6Y_BGmOCC zX*Bw3rFz3R)DXpCVBkI!SoOHtYstv*e-May|+?b80ZRh$MZ$FerlC`)ZKt} zTd0Arf9N2dimjs>mg5&@sfTPsRXKXI;0L~&t+GH zkB<>wxI9D+k5VHHcB7Rku{Z>i3$&hgd9Mt_hS_GaGg0#2EHzyV=j=u5xSyV~F0*qs zW{k9}lFZ?H%@4hII_!bzao!S(J^^ZZVmG_;^qXkpJb7OyR*sPL>))Jx{K4xtO2xTr@St!@CJ=y3q2wY5F`77Tqwz8!&Q{f7Dp zifvzVV1!Dj*dxG%BsQyRP6${X+Tc$+XOG zzvq5xcC#&-iXlp$)L=9t{oD~bT~v^ZxQG;FRz|HcZj|^L#_(VNG)k{=_6|6Bs-tRNCn-XuaZ^*^hpZ@qwi`m|BxcF6IWc?_bhtK_cDZRTw#*bZ2`1@1HcB
`mLUmo_>@2R&nj7&CiH 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 B8dv}T delta 17845 zcmV)CK*GO}(F4QI1F(Jx4W$DjNjn4p0N4ir06~)x5+0MO2`GQvQyWzj|J`gh3(E#l zNGO!HfVMRRN~%`0q^)g%XlN*vP!O#;m*h5VyX@j-1N|HN;8S1vqEAj=eCdn`)tUB9 zXZjcT^`bL6qvL}gvXj%9vrOD+x!Gc_0{$Zg+6lTXG$bmoEBV z*%y^c-mV0~Rjzv%e6eVI)yl>h;TMG)Ft8lqpR`>&IL&`>KDi5l$AavcVh9g;CF0tY zw_S0eIzKD?Nj~e4raA8wxiiImTRzv6;b6|LFmw)!E4=CiJ4I%&axSey4zE-MIh@*! z*P;K2Mx{xVYPLeagKA}Hj=N=1VrWU`ukuBnc14iBG?B}Uj>?=2UMk4|42=()8KOnc zrJzAxxaEIfjw(CKV6F$35u=1qyf(%cY8fXaS9iS?yetY{mQ#Xyat*7sSoM9fJlZqq zyasQ3>D>6p^`ck^Y|kYYZB*G})uAbQ#7)Jeb~glGz@2rPu}zBWDzo5K$tP<|meKV% z{Swf^eq6NBioF)v&~9NLIxHMTKe6gJ@QQ^A6fA!n#u1C&n`aG7TDXKM1Jly-DwTB` z+6?=Y)}hj;C#r5>&x;MCM4U13nuXVK*}@yRY~W3X%>U>*CB2C^K6_OZsXD!nG2RSX zQg*0)$G3%Es$otA@p_1N!hIPT(iSE=8OPZG+t)oFyD~{nevj0gZen$p>U<7}uRE`t5Mk1f4M0K*5 zbn@3IG5I2mk;8K>*RZ zPV6iL006)S001s%0eYj)9hu1 z9o)iQT9(v*sAuZ|ot){RrZ0Qw4{E0A+!Yx_M~#Pj&OPUM&i$RU=Uxu}e*6Sr2ror= z&?lmvFCO$)BY+^+21E>ENWe`I0{02H<-lz&?})gIVFyMWxX0B|0b?S6?qghp3lDgz z2?0|ALJU=7s-~Lb3>9AA5`#UYCl!Xeh^i@bxs5f&SdiD!WN}CIgq&WI4VCW;M!UJL zX2};d^sVj5oVl)OrkapV-C&SrG)*x=X*ru!2s04TjZ`pY$jP)4+%)7&MlpiZ`lgoF zo_p>^4qGz^(Y*uB10dY2kcIbt=$FIdYNqk;~47wf@)6|nJp z1cocL3zDR9N2Pxkw)dpi&_rvMW&Dh0@T*_}(1JFSc0S~Ph2Sr=vy)u*=TY$i_IHSo zR+&dtWFNxHE*!miRJ%o5@~GK^G~4$LzEYR-(B-b(L*3jyTq}M3d0g6sdx!X3-m&O% zK5g`P179KHJKXpIAAX`A2MFUA;`nXx^b?mboVbQgigIHTU8FI>`q53AjWaD&aowtj z{XyIX>c)*nLO~-WZG~>I)4S1d2q@&?nwL)CVSWqWi&m1&#K1!gt`g%O4s$u^->Dwq ziKc&0O9KQ7000OG0000%03-m(e&Y`S09YWC4iYDSty&3q8^?8ij|8zxaCt!zCFq1@ z9TX4Hl68`nY>}cQNW4Ullqp$~SHO~l1!CdFLKK}ij_t^a?I?C^CvlvnZkwiVn>dl2 z2$V(JN{`5`-8ShF_ek6HNRPBlPuIPYu>TAeAV5O2)35r3*_k(Q-h1+h5pb(Zu%oJ__pBsW0n5ILw`!&QR&YV`g0Fe z(qDM!FX_7;`U3rxX#QHT{f%h;)Eursw=*#qvV)~y%^Uo^% zi-%sMe^uz;#Pe;@{JUu05zT*i=u7mU9{MkT`ft(vPdQZoK&2mg=tnf8FsaNQ+QcPg zB>vP8Rd6Z0JoH5_Q`zldg;hx4azQCq*rRZThqlqTRMzn1O3_rQTrHk8LQ<{5UYN~` zM6*~lOGHyAnx&#yCK{i@%N1Us@=6cw=UQxpSE;<(LnnES%6^q^QhBYQ-VCSmIu8wh z@_LmwcFDfAhIn>`%h7L{)iGBzu`Md4dj-m3C8mA9+BL*<>q z#$7^ttIBOE-=^|zmG`K8yUKT{yjLu2SGYsreN0*~9yhFxn4U};Nv1XXj1fH*v-g=3 z@tCPc`YdzQGLp%zXwo*o$m9j-+~nSWls#s|?PyrHO%SUGdk**X9_=|b)Y%^j_V$3S z>mL2A-V)Q}qb(uZipEFVm?}HWc+%G6_K+S+87g-&RkRQ8-{0APDil115eG|&>WQhU zufO*|e`hFks^cJJmx_qNx{ltSp3aT|XgD5-VxGGXb7gkiOG$w^qMVBDjR8%!Sbh72niHRDV* ziFy8LE+*$j?t^6aZP9qt-ow;hzkmhvy*Hn-X^6?yVMbtNbyqZQ^rXg58`gk+I%Wv} zn_)dRq+3xjc8D%}EQ%nnTF7L7m}o9&*^jf`_qvUhVKY7w9Zgxr-0YHWFRd3$l_6UX zpXt^U&TiC*qZWx#pOG6k?3Tg)pra*fw(O6_45>lUBN1U5Qmc>^DHt)5b~Ntjsw!NI z1n4{$HWFeIi)*qvgK^ui;(81VQc1(wJ8C#tjR>Dkjf{xYC^_B^#qrdCc)uZxtgua6 zk98UGQF|;;k`c+0_z)tQ&9DwLB~&12@D1!*mTz_!3Mp=cg;B7Oq4cKN>5v&dW7q@H zal=g6Ipe`siZN4NZiBrkJCU*x216gmbV(FymgHuG@%%|8sgD?gR&0*{y4n=pukZnd z4=Nl~_>jVfbIehu)pG)WvuUpLR}~OKlW|)=S738Wh^a&L+Vx~KJU25o6%G7+Cy5mB zgmYsgkBC|@K4Jm_PwPoz`_|5QSk}^p`XV`649#jr4Lh^Q>Ne~#6Cqxn$7dNMF=%Va z%z9Ef6QmfoXAlQ3)PF8#3Y% zadcE<1`fd1&Q9fMZZnyI;&L;YPuy#TQ8b>AnXr*SGY&xUb>2678A+Y z8K%HOdgq_4LRFu_M>Ou|kj4W%sPPaV)#zDzN~25klE!!PFz_>5wCxglj7WZI13U5| zEq_YLKPH;v8sEhyG`dV_jozR);a6dBvkauhC;1dk%mr+J*Z6MMH9jqxFk@)&h{mHl zrf^i_d-#mTF=6-T8Rk?(1+rPGgl$9=j%#dkf@x6>czSc`jk7$f!9SrV{do%m!t8{? z_iAi$Qe&GDR#Nz^#uJ>-_?(E$ns)(3)X3cYY)?gFvU+N>nnCoBSmwB2<4L|xH19+4 z`$u#*Gt%mRw=*&|em}h_Y`Pzno?k^8e*hEwfM`A_yz-#vJtUfkGb=s>-!6cHfR$Mz z`*A8jVcz7T{n8M>ZTb_sl{EZ9Ctau4naX7TX?&g^VLE?wZ+}m)=YW4ODRy*lV4%-0 zG1XrPs($mVVfpnqoSihnIFkLdxG9um&n-U|`47l{bnr(|8dmglO7H~yeK7-wDwZXq zaHT($Qy2=MMuj@lir(iyxI1HnMlaJwpX86je}e=2n|Esb6hB?SmtDH3 z2qH6o`33b{;M{mDa5@@~1or8+Zcio*97pi1Jkx6v5MXCaYsb~Ynq)eWpKnF{n)FXZ z?Xd;o7ESu&rtMFr5(yJ(B7V>&0gnDdL*4MZH&eO+r*t!TR98ssbMRaw`7;`SLI8mT z=)hSAt~F=mz;JbDI6g~J%w!;QI(X14AnOu;uve^4wyaP3>(?jSLp+LQ7uU(iib%IyB(d&g@+hg;78M>h7yAeq$ALRoHGkKXA+E z$Sk-hd$Fs2nL4w9p@O*Y$c;U)W#d~)&8Js;i^Dp^* z0*7*zEGj~VehF4sRqSGny*K_CxeF=T^8;^lb}HF125G{kMRV?+hYktZWfNA^Mp7y8 zK~Q?ycf%rr+wgLaHQ|_<6z^eTG7izr@99SG9Q{$PCjJabSz`6L_QJJe7{LzTc$P&pwTy<&3RRUlSHmK;?}=QAhQaDW3#VWcNAH3 zeBPRTDf3?3mfdI$&WOg(nr9Gyzg`&u^o!f2rKJ57D_>p z6|?Vg?h(@(*X=o071{g^le>*>qSbVam`o}sAK8>b|11%e&;%`~b2OP7--q%0^2YDS z`2M`{2QYr1VC)sIW9WOu8<~7Q>^$*Og{KF+kI;wFegvaIDkB%3*%PWtWKSq7l`1YcDxQQ2@nv{J!xWV?G+w6C zhUUxUYVf%(Q(40_xrZB@rbxL=Dj3RV^{*yHd>4n-TOoHVRnazDOxxkS9kiZyN}IN3 zB^5N=* zRSTO+rA<{*P8-$GZdyUNOB=MzddG$*@q>mM;pUIiQ_z)hbE#Ze-IS)9G}Rt$5PSB{ zZZ;#h9nS7Rf1ecW&n(Gpu9}{vXQZ-f`UHIvD?cTbF`YvH*{rgE(zE22pLAQfhg-`U zuh612EpByB(~{w7svCylrBk%5$LCIyuhrGi=yOfca`=8ltKxHcSNfDRt@62QH^R_0 z&eQL6rRk>Dvf6rjMQv5ZXzg}S`HqV69hJT^pPHtdhqsrPJWs|IT9>BvpQa@*(FX6v zG}TYjreQCnH(slMt5{NgUf)qsS1F&Bb(M>$X}tWI&yt2I&-rJbqveuj?5J$`Dyfa2 z)m6Mq0XH@K)Y2v8X=-_4=4niodT&Y7W?$KLQhjA<+R}WTdYjX9>kD+SRS^oOY1{A= zZTId-(@wF^UEWso($wZtrs%e7t<}YaC_;#@`r0LUzKY&|qPJz*y~RHG`E6bypP5AX zN!p0^AUu8uDR>xM-ALFzBxXM~Q3z=}fHWCIG>0&I6x2Iu7&U)49j7qeMI&?qb$=4I zdMmhAJrO%@0f%YW! z^gLByEGSk+R0v4*d4w*N$Ju6z#j%HBI}6y$2en=-@S3=6+yZX94m&1j@s- z7T6|#0$c~dYq9IkA!P)AGkp~S$zYJ1SXZ#RM0|E~Q0PSm?DsT4N3f^)b#h(u9%_V5 zX*&EIX|gD~P!vtx?ra71pl%v)F!W~X2hcE!h8cu@6uKURdmo1-7icN4)ej4H1N~-C zjXgOK+mi#aJv4;`DZ%QUbVVZclkx;9`2kgbAhL^d{@etnm+5N8pB#fyH)bxtZGCAv z(%t0kPgBS{Q2HtjrfI0B$$M0c?{r~2T=zeXo7V&&aprCzww=i*}Atu7g^(*ivauMz~kkB%Vt{Wydlz%%2c26%>0PAbZO zVHx%tK(uzDl#ZZK`cW8TD2)eD77wB@gum{B2bO_jnqGl~01EF_^jx4Uqu1yfA~*&g zXJ`-N?D-n~5_QNF_5+Un-4&l$1b zVlHFqtluoN85b^C{A==lp#hS9J(npJ#6P4aY41r) zzCmv~c77X5L}H%sj>5t&@0heUDy;S1gSOS>JtH1v-k5l}z2h~i3^4NF6&iMb;ZYVE zMw*0%-9GdbpF1?HHim|4+)Zed=Fk<2Uz~GKc^P(Ig@x0&XuX0<-K(gA*KkN&lY2Xu zG054Q8wbK~$jE32#Ba*Id2vkqmfV{U$Nx9vJ;jeI`X+j1kh7hB8$CBTe@ANmT^tI8 z%U>zrTKuECin-M|B*gy(SPd`(_xvxjUL?s137KOyH>U{z01cBcFFt=Fp%d+BK4U;9 zQG_W5i)JASNpK)Q0wQpL<+Ml#cei41kCHe&P9?>p+KJN>I~`I^vK1h`IKB7k^xi`f z$H_mtr_+@M>C5+_xt%v}{#WO{86J83;VS@Ei3JLtp<*+hsY1oGzo z0?$?OJO$79;{|@aP!fO6t9TJ!?8i&|c&UPWRMbkwT3nEeFH`Yyyh6b%Rm^nBuTt@9 z+$&-4lf!G|@LCo3<8=yN@5dYbc%uq|Hz|0tiiLQKiUoM9g14zyECKGv0}3AWv2WJ zUAXGUhvkNk`0-H%ACsRSmy4fJ@kxBD3ZKSj6g(n1KPw?g{v19phcBr3BEF>J%lL|d zud3LNuL;cR*xS+;X+N^Br+x2{&hDMhb-$6_fKU(Pt0FQUXgNrZvzsVCnsFqv?#L z4-FYsQ-?D>;LdjHu_TT1CHN~aGkmDjWJkJg4G^!+V_APd%_48tErDv6BW5;ji^UDD zRu5Sw7wwplk`w{OGEKWJM&61c-AWn!SeUP8G#+beH4_Ov*)NUV?eGw&GHNDI6G(1Y zTfCv?T*@{QyK|!Q09wbk5koPD>=@(cA<~i4pSO?f(^5sSbdhUc+K$DW#_7^d7i%At z?KBg#vm$?P4h%?T=XymU;w*AsO_tJr)`+HUll+Uk_zx6vNw>G3jT){w3ck+Z=>7f0 zZVkM*!k^Z_E@_pZK6uH#|vzoL{-j1VFlUHP&5~q?j=UvJJNQG ztQdiCF$8_EaN_Pu8+afN6n8?m5UeR_p_6Log$5V(n9^W)-_vS~Ws`RJhQNPb1$C?| zd9D_ePe*`aI9AZ~Ltbg)DZ;JUo@-tu*O7CJ=T)ZI1&tn%#cisS85EaSvpS~c#CN9B z#Bx$vw|E@gm{;cJOuDi3F1#fxWZ9+5JCqVRCz5o`EDW890NUfNCuBn)3!&vFQE{E$L`Cf7FMSSX%ppLH+Z}#=p zSow$)$z3IL7frW#M>Z4|^9T!=Z8}B0h*MrWXXiVschEA=$a|yX9T~o!=%C?T+l^Cc zJx&MB$me(a*@lLLWZ=>PhKs!}#!ICa0! zq%jNgnF$>zrBZ3z%)Y*yOqHbKzEe_P=@<5$u^!~9G2OAzi#}oP&UL9JljG!zf{JIK z++G*8j)K=$#57N)hj_gSA8golO7xZP|KM?elUq)qLS)i(?&lk{oGMJh{^*FgklBY@Xfl<_Q zXP~(}ST6V01$~VfOmD6j!Hi}lsE}GQikW1YmBH)`f_+)KI!t#~B7=V;{F*`umxy#2Wt8(EbQ~ks9wZS(KV5#5Tn3Ia90r{}fI%pfbqBAG zhZ)E7)ZzqA672%@izC5sBpo>dCcpXi$VNFztSQnmI&u`@zQ#bqFd9d&ls?RomgbSh z9a2rjfNiKl2bR!$Y1B*?3Ko@s^L5lQN|i6ZtiZL|w5oq%{Fb@@E*2%%j=bcma{K~9 z*g1%nEZ;0g;S84ZZ$+Rfurh;Nhq0;{t~(EIRt}D@(Jb7fbe+_@H=t&)I)gPCtj*xI z9S>k?WEAWBmJZ|gs}#{3*pR`-`!HJ)1Dkx8vAM6Tv1bHZhH=MLI;iC#Y!$c|$*R>h zjP{ETat(izXB{@tTOAC4nWNhh1_%7AVaf!kVI5D=Jf5I1!?}stbx_Yv23hLf$iUTb z-)WrTtd2X+;vBW_q*Z6}B!10fs=2FA=3gy*dljsE43!G*3Uw(Is>(-a*5E!T4}b-Y zfvOC)-HYjNfcpi`=kG%(X3XcP?;p&=pz+F^6LKqRom~pA}O* zitR+Np{QZ(D2~p_Jh-k|dL!LPmexLM?tEqI^qRDq9Mg z5XBftj3z}dFir4oScbB&{m5>s{v&U=&_trq#7i&yQN}Z~OIu0}G)>RU*`4<}@7bB% zKYxGx0#L#u199YKSWZwV$nZd>D>{mDTs4qDNyi$4QT6z~D_%Bgf?>3L#NTtvX;?2D zS3IT*2i$Snp4fjDzR#<)A``4|dA(}wv^=L?rB!;kiotwU_gma`w+@AUtkSyhwp{M} z!e`jbUR3AG4XvnBVcyIZht6Vi~?pCC!$XF2 z*V~)DBVm8H7$*OZQJYl3482hadhsI2NCz~_NINtpC?|KI6H3`SG@1d%PsDdw{u}hq zN;OU~F7L1jT&KAitilb&Fl3X12zfSuFm;X)xQWOHL&7d)Q5wgn{78QJ6k5J;is+XP zCPO8_rlGMJB-kuQ*_=Yo1TswG4xnZd&eTjc8=-$6J^8TAa~kEnRQ@Zp-_W&B(4r@F zA==}0vBzsF1mB~743XqBmL9=0RSkGn$cvHf*hyc{<2{@hW+jKjbC|y%CNupHY_NC% zivz^btBLP-cDyV8j>u)=loBs>HoI5ME)xg)oK-Q0wAy|8WD$fm>K{-`0|W{H00;;G z000j`0OWQ8aHA9e04^;603eeQIvtaXMG=2tcr1y8Fl-J;AS+=<0%DU8Bp3oEEDhA^ zOY)M8%o5+cF$rC?trfMcty*f)R;^v=f~}||Xe!#;T3eTDZELN&-50xk+J1heP5AQ>h5O#S_uO;O@;~REd*_G$x$hVeE#bchX)otXQy|S5(oB)2a2%Sc(iDHm z=d>V|a!BLp9^#)o7^EQ2kg=K4%nI^sK2w@-kmvB+ARXYdq?xC2age6)e4$^UaY=wn zgLD^{X0A+{ySY+&7RpldwpC6=E zSPq?y(rl8ZN%(A*sapd4PU+dIakIwT0=zxIJEUW0kZSo|(zFEWdETY*ZjIk9uNMUA ze11=mHu8lUUlgRx!hItf0dAF#HfdIB+#aOuY--#QN9Ry zbx|XkG?PrBb@l6Owl{9Oa9w{x^R}%GwcEEfY;L-6OU8|9RXvu`-ECS`jcO1x1MP{P zcr;Bw##*Dod9K@pEx9z9G~MiNi>8v1OU-}vk*HbI)@CM? zn~b=jWUF%HP=CS+VCP>GiAU_UOz$aq3%%Z2laq^Gx`WAEmuNScCN)OlW>YHGYFgV2 z42lO5ZANs5VMXLS-RZTvBJkWy*OeV#L;7HwWg51*E|RpFR=H}h(|N+79g)tIW!RBK ze08bg^hlygY$C2`%N>7bDm`UZ(5M~DTanh3d~dg+OcNdUanr8azO?})g}EfnUB;5- zE1FX=ru?X=zAk4_6@__o1fE+ml1r&u^f1Kb24Jf-)zKla%-dbd>UZ1 zrj3!RR!Jg`ZnllKJ)4Yfg)@z>(fFepeOcp=F-^VHv?3jSxfa}-NB~*qkJ5Uq(yn+( z<8)qbZh{C!xnO@-XC~XMNVnr-Z+paowv!$H7>`ypMwA(X4(knx7z{UcWWe-wXM!d? zYT}xaVy|7T@yCbNOoy)$D=E%hUNTm(lPZqL)?$v+-~^-1P8m@Jm2t^L%4#!JK#Vtg zyUjM+Y*!$);1<)0MUqL00L0*EZcsE&usAK-?|{l|-)b7|PBKl}?TM6~#j9F+eZq25_L&oSl}DOMv^-tacpDI)l*Ws3u+~jO@;t(T)P=HCEZ#s_5q=m zOsVY!QsOJn)&+Ge6Tm)Ww_Bd@0PY(78ZJ)7_eP-cnXYk`>j9q`x2?Xc6O@55wF+6R zUPdIX!2{VGA;FSivN@+;GNZ7H2(pTDnAOKqF*ARg+C54vZ@Ve`i?%nDDvQRh?m&`1 zq46gH)wV=;UrwfCT3F(m!Q5qYpa!#f6qr0wF=5b9rk%HF(ITc!*R3wIFaCcftGwPt z(kzx{$*>g5L<;u}HzS4XD%ml zmdStbJcY@pn`!fUmkzJ8N>*8Y+DOO^r}1f4ix-`?x|khoRvF%jiA)8)P{?$8j2_qN zcl3Lm9-s$xdYN9)>3j6BPFK)Jbovl|Sf_p((CHe!4hx@F)hd&&*Xb&{TBj>%pT;-n z{3+hA^QZYnjXxtF2XwxPZ`S#J8h>5qLwtwM-{5abbEnRS z`9_`Zq8FJiI#0syE_V_3M&trw$P=ezkHosV$8&I5c0(*-9KBE5DJOC-Xv zw}1bq~AD0_Xerm`%ryiG9_$S z5G|btfiAUNdV09SO2l9v+e#(H6HYOdQs=^ z@xwZQU)~;p1L*~ciC}9ao{nQ-@B>rpUzKBxv=cUusOP5Trs3QnvHxGh9e>s7AM{V1|HfYe z3QwH;nHHR49fYzuGc3W3l5xrDAI392SFXx>lWE3V9Ds9il3PyZaN5>oC3>9W-^7vC z3~KZ-@iD?tIkhg+6t{m;RGk2%>@I0&kf)o$+-^ls0(YABNbM(=l#ad@nKp_j=b~Xs ziR;xu_+)lxy6|+af!@}gO2H_x)p;nZ-tYxW5Omq=l`GzMp*GTLr>vZN1?e}^C$t*Z zvzEdIc2|HA2RFN_4#EkzMqKnbbw!?!?%B@M0^^5Z;K?x-%lg?Z>}wMV8zEqHZ$cr~Y#Wv>9+)KMUZatUqbRU8 z8t9qrek(H^C0Tuzq|cP2$WL7tzj+Dj5y^2SF1D154CnsB$xbz`$wV||n-cG%rsT$p z+3RHdadK(3-noj(2L#8c5lODg)V8pv(GEnNb@F>dEHQr>!qge@L>#qg)RAUtiOYqF ziiV_ETExwD)bQ<))?-9$)E(FiRBYyC@}issHS!j9n)~I1tarxnQ2LfjdIJ)*jp{0E z&1oTd%!Qbw$W58s!6ms>F z=p0!~_Mv~8jyaicOS*t(ntw`5uFi0Bc4*mH8kSkk$>!f0;FM zX_t14I55!ZVsg0O$D2iuEDb7(J>5|NKW^Z~kzm@dax z9(|As$U7^}LF%#`6r&UPB*6`!Rf74h~*C=ami6xUxYCwiJxdr$+`z zKSC4A%8!s%R&j*2si(OEc*fy!q)?%=TjDZJ2}O zxT6o>jlKXz_7_Y$N})}IG`*#KfMzs#R(SI#)3*ZEzCv%_tu(VTZ5J| zw2$5kK)xTa>xGFgS0?X(NecjzFVKG%VVn?neu=&eQ+DJ1APlY1E?Q1s!Kk=yf7Uho z>8mg_!U{cKqpvI3ucSkC2V`!d^XMDk;>GG~>6>&X_z75-kv0UjevS5ORHV^e8r{tr z-9z*y&0eq3k-&c_AKw~<`8dtjsP0XgFv6AnG?0eo5P14T{xW#b*Hn2gEnt5-KvN1z zy!TUSi>IRbD3u+h@;fn7fy{F&hAKx7dG4i!c?5_GnvYV|_d&F16p;)pzEjB{zL-zr z(0&AZUkQ!(A>ghC5U-)t7(EXb-3)tNgb=z`>8m8n+N?vtl-1i&*ftMbE~0zsKG^I$ zSbh+rUiucsb!Ax@yB}j>yGeiKIZk1Xj!i#K^I*LZW_bWQIA-}FmJ~^}>p=K$bX9F{}z{s^KWc~OK(zl_X57aB^J9v}yQ5h#BE$+C)WOglV)nd0WWtaF{7`_Ur`my>4*NleQG#xae4fIo(b zW(&|g*#YHZNvDtE|6}yHvu(hDekJ-t*f!2RK;FZHRMb*l@Qwkh*~CqQRNLaepXypX z1?%ATf_nHIu3z6gK<7Dmd;{`0a!|toT0ck|TL$U;7Wr-*piO@R)KrbUz8SXO0vr1K z>76arfrqImq!ny+VkH!4?x*IR$d6*;ZA}Mhro(mzUa?agrFZpHi*)P~4~4N;XoIvH z9N%4VK|j4mV2DRQUD!_-9fmfA2(YVYyL#S$B;vqu7fnTbAFMqH``wS7^B5=|1O&fL z)qq(oV6_u4x(I(**#mD}MnAy(C&B4a1n6V%$&=vrIDq^F_KhE5Uw8_@{V`_#M0vCu zaNUXB=n0HT@D+ppDXi8-vp{tj)?7+k>1j}VvEKRgQ~DWva}8*pp`W8~KRo*kJ*&X} zP!~2fxQr@dM*q0dI|)Fux=pZWBk==RI7i{^BQf`kWlD2%|@R9!JA7& zLbM$uJ12y}_62$|T|{)@OJZtzfpL^t@1nMTYHutrF#D+^?~CN~9`YQ@#&&@c_Zf)( zbC~y8!2LO8jHwQXv>G~1q?c68ipT*%dY&c{8wd_!Y#~tMJ7yk!F8| zt?m_CLVw6cU@@p(#h4cY&Qsfz2Xp3w^4Cg%m03Tmq~9n%hyoMH^KY7{(QkRyn_!YB zzZa!Tgr~5$MAG$x)Fs71#6j}Kvcv3=9VUX8CH< zbP3|fY8f#$K*<5JQ7whM(v=GN2k26Xsh)#0!HKS(koLgAp-;)8z0w&_Z=nG4v6n8u z&Tm0Fi){4_!Y5Kp?!zv$FKfUifQ{%c82uYfrvE{%ejUd72aNYmI*0z3-a-EYr+bB->oH3#t(AY3 zV{Z=(SJr;D#0(`u*dc*~9T7D8Pudw894%!>c4wU&V1m<~0InidR6fbi?yPl(z+sKa zdF*kS>_4^1UO>y4T%Ar>epSr5&vp`$KdY7B(F%P0@VyHk@1fJ=6X0=aGjD-)BrOJD zW}IU@hg~^2r>a1fQvjTtvL*mKJ7q;pfP*U2=URL`VB_Y_JojbZ+MS=vaVN0C6L_MV zG1#5=35-E`KsD%r>-Q_ndvJ2tOYcMMP9f*t0iJ`(Z`^+YP)h>@lR(@Wvrt-`0tHG+ zuP2R@@mx=T@fPoQ1s`e^1I0H*kQPBGDky@!ZQG@8jY-+2ihreG5q$6i{3vmDTg0j$ zzRb*-nKN@{_wD`V6+i*YS)?$XfrA-sW?js?SYU8#vXxxQCc|*K!EbpWfu)3~jwq6_@KC0m;3A%jH^18_a0;ksC2DEwa@2{9@{ z9@T??<4QwR69zk{UvcHHX;`ICOwrF;@U;etd@YE)4MzI1WCsadP=`%^B>xPS-{`=~ zZ+2im8meb#4p~XIL9}ZOBg7D8R=PC8V}ObDcxEEK(4yGKcyCQWUe{9jCs+@k!_y|I z%s{W(&>P4w@hjQ>PQL$zY+=&aDU6cWr#hG)BVCyfP)h>@3IG5I2mk;8K>)Ppba*!h z005B=001VF5fT=Y4_ytCUk`sv8hJckqSy&Gc2Jx^WJ$J~08N{il-M$fz_ML$)Cpil z(nOv_nlZB^c4s&&O3h=OLiCz&(|f0 zxWU_-JZy>hxP*gvR>CLnNeQ1~g;6{g#-}AbkIzWR;j=8=6!AHpKQCbjFYxf9h%bov zVi;eNa1>t-<14KERUW>^KwoF+8zNo`Y*WiQwq}3m0_2RYtL9Wmu`JaRaQMQ)`Si^6+VbM`!rH~T?DX2=(n4nT zf`G`(Rpq*pDk*v~wMYPZ@vMNZDMPnxMYmU!lA{Xfo?n=Ibb4y3eyY1@Dut4|Y^ml& zqs$r}jAo=B(Ml>ogeEjyv(E`=kBzPf2uv9TQtO$~bamD#=Tv`lNy(K|w$J2O6jS51 zzZtOCHDWz7W0=L1XDW5WR5mtLGc~W+>*vX5{e~U@rE~?7e>vKU-v8bj;F4#abtcV(3ZtwXo9ia93HiETyQXwW4a-0){;$OU*l` zW^bjkyZTJ6_DL^0}`*)#EZ|2nvKRzMLH9-~@Z6$v#t8Dm%(qpP+DgzNe6d)1q zBqhyF$jJTyYFvl_=a>#I8jhJ)d6SBNPg#xg2^kZ3NX8kQ74ah(Y5Z8mlXyzTD&}Q8 ziY(pj-N-V2f>&hZQJ`Di%wp2fN(I%F@l)3M8GcSdNy+#HuO{$I8NXubRlFkL)cY@b z#`v{}-^hRXEq*8B_cG=%PZvI$eo(|8Wc(2o8L#0_GX9L$1@yV>%7mGk)QTD1R*OvS z4OW;ym1)%k9Bfem0tOqq3yyAUWp&q|LsN!RDnxa|j;>R|Mm2rIv7=tej5GFaa+`#| z;7u9Z_^XV+vD@2hF8Xe63+Qd`oig6S9jX(*DbjzPb*K-H7c^7E-(~!R6E%TrgW;RvG;WS{Ziv*W*a*`9Bb;$Er3?MyF~5GcXv`k>U)n}lwv$Sp+H@IKA5$mKk0g*4Ln{!tfvITeY zzr%8JJ5BdcEYsR9eGzJ4B&$}4FMmbRU6{8{_w7Kl77@PNe7|Bc#c?5(C5&Z=kJ#(oM90D4`rh2S!|^L!P#e#1hkD5@~-- z`63GV0~*rOZSqw7k^#-Y$Q4z3Oa2SPRURqEahB1B^h{7~+p03SwzqL9QU#$3-X zdYtQ?-K5xDAdfomEd6(yPtZ!yY_<35bMedeq`z2JWorljz5-f9<^93HM-$#+acw%9r!JOM%O<|BR`W& zd-%j_?b^q7Kl6{q^N{cg2u;11rFB5EP+oqG9&pHD#_Mo@aNMj;LUvsl&nK(ca(hT( zzFc2oHC6WQv8g7jo+3ZSwK+9G$cvfRnql)?g=XeQ3+LTh3)79nhEle8OqS3T$qn(> z(=5Bg?EWq-ldEywgzXW965%H(9^ik*rH(8dNdkbcS9|ow&_r`X~R^R?B+(oTiMzzlx8KnHqUi z8Rh-)VAnS-CO+3}yxqm8)X+N+uzieFVm-F#syP#M1p5&$wX3MJ8 z+R@grZ*5G^Uh4I@VT=>C4RJNc^~3mx$kS1F{L?3)BzdduD2MZKdu#jNno&f2&d{?` zW(>$oktzY@GO{|Ln~Bt^A4)(%?l-&(Dm!iL#$K_xOyhwAf=K2<+Bom zw7|hl6E5}B$d%n0sfZvfQRy9Fyz2~ z83#=#LaHnf1th^k*p|ux8!!8pfHE!)x*%=_hAddl)P%4h4%&8!5-W#xqqb}c=H(i|wqcIS&oDQ{ zhI7N-$f$ra3=RjPmMh?-IEkJYQ<}R9Z!}wmp$#~Uc%u1oh#TP}wF*kJJmQX2#27kL z_dz(yKufo<=m71bZfLp^Ll#t3(IHkrgMcvx@~om%Ib(h(<$Da7urTI`x|%`wD--sN zJEEa>4DGSEG?0ulkosfj8IMNN4)B=ZtvGG{|4Fp=Xhg!wPNgYzS>{Bp%%Qa+624X@ X49Luk)baa85H9$5YCsTPT`SVRWMtMW diff --git a/gradle/wrapper/gradle-wrapper.properties b/gradle/wrapper/gradle-wrapper.properties index 05679dc3..98debb84 100644 --- a/gradle/wrapper/gradle-wrapper.properties +++ b/gradle/wrapper/gradle-wrapper.properties @@ -1,5 +1,5 @@ distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-7.1.1-bin.zip +distributionUrl=https\://services.gradle.org/distributions/gradle-7.6.2-bin.zip zipStoreBase=GRADLE_USER_HOME zipStorePath=wrapper/dists diff --git a/gradlew b/gradlew index 4f906e0c..744e882e 100755 --- a/gradlew +++ b/gradlew @@ -72,7 +72,7 @@ case "`uname`" in Darwin* ) darwin=true ;; - MINGW* ) + MSYS* | MINGW* ) msys=true ;; NONSTOP* )