Add more chaincodes

pull/117/head
Baohua Yang 2018-01-05 14:37:52 +08:00
parent 96b581a923
commit 6bbb59a8df
26 changed files with 23721 additions and 23397 deletions

View File

@ -24,8 +24,10 @@ echo_b "Updating anchor peers for peer0/org1... no use for only single channel"
channelUpdate ${APP_CHANNEL} 1 0 Org1MSPanchors.tx
## Install chaincode on all peers
echo_b "Installing chaincode on peer0..."
chaincodeInstall 0 ${CC_02_INIT_ARGS}
CC_NAME=${CC_02_NAME}
CC_PATH=${CC_02_PATH}
echo_b "Installing chaincode ${CC_NAME} on peer0..."
chaincodeInstall 1 0 ${CC_NAME} ${CC_INIT_VERSION} ${CC_PATH}
# Instantiate chaincode on all peers
# Instantiate can only be executed once on any node

View File

@ -8,10 +8,12 @@ elif [ -f scripts/func.sh ]; then
fi
## Install chaincode on all peers
echo_b "Installing chaincode on all 4 peers..."
chaincodeInstall 1 0 ${CC_02_NAME} ${CC_INIT_VERSION} ${CC_02_PATH}
chaincodeInstall 1 1 ${CC_02_NAME} ${CC_INIT_VERSION} ${CC_02_PATH}
chaincodeInstall 2 0 ${CC_02_NAME} ${CC_INIT_VERSION} ${CC_02_PATH}
chaincodeInstall 2 1 ${CC_02_NAME} ${CC_INIT_VERSION} ${CC_02_PATH}
CC_NAME=${CC_02_NAME}
CC_PATH=${CC_02_PATH}
echo_b "Installing chaincode ${CC_NAME} on all 4 peers..."
chaincodeInstall 1 0 ${CC_NAME} ${CC_INIT_VERSION} ${CC_PATH}
chaincodeInstall 1 1 ${CC_NAME} ${CC_INIT_VERSION} ${CC_PATH}
chaincodeInstall 2 0 ${CC_NAME} ${CC_INIT_VERSION} ${CC_PATH}
chaincodeInstall 2 1 ${CC_NAME} ${CC_INIT_VERSION} ${CC_PATH}
echo_g "=== Install chaincode done ==="

View File

@ -7,10 +7,11 @@ elif [ -f scripts/func.sh ]; then
source scripts/func.sh
fi
# Instantiate chaincode on all peers
# Instantiate can only be executed once on any node
# Instantiate chaincode in the channel, executed once on any node is enough
CC_NAME=${CC_02_NAME}
CC_INIT_ARGS=${CC_02_INIT_ARGS}
echo_b "Instantiating chaincode on channel ${APP_CHANNEL} (once for each channel is enough, we make it concurrent here)..."
chaincodeInstantiate "${APP_CHANNEL}" 1 0 ${CC_02_NAME} ${CC_INIT_VERSION} ${CC_02_INIT_ARGS}
chaincodeInstantiate "${APP_CHANNEL}" 2 0 ${CC_02_NAME} ${CC_INIT_VERSION} ${CC_02_INIT_ARGS}
chaincodeInstantiate "${APP_CHANNEL}" 1 0 ${CC_NAME} ${CC_INIT_VERSION} ${CC_INIT_ARGS}
chaincodeInstantiate "${APP_CHANNEL}" 2 0 ${CC_NAME} ${CC_INIT_VERSION} ${CC_INIT_ARGS}
echo_g "=== Instantiate chaincode done ==="

View File

@ -7,26 +7,29 @@ elif [ -f scripts/func.sh ]; then
source scripts/func.sh
fi
CC_NAME=${CC_02_NAME}
CC_INVOKE_ARGS=${CC_02_INVOKE_ARGS}
CC_QUERY_ARGS=${CC_02_QUERY_ARGS}
#Query on chaincode on Peer0/Org1
echo_b "Querying chaincode on peer org2/peer0..."
chaincodeQuery ${APP_CHANNEL} 2 1 ${CC_02_NAME} ${CC_02_QUERY_ARGS} 100
echo_b "Querying chaincode ${CC_NAME} on peer org2/peer0..."
chaincodeQuery ${APP_CHANNEL} 2 1 ${CC_NAME} ${CC_QUERY_ARGS} 100
#Invoke on chaincode on Peer0/Org1
echo_b "Sending invoke transaction (transfer 10) on org1/peer0..."
chaincodeInvoke ${APP_CHANNEL} 1 0 ${CC_02_NAME} ${CC_02_INVOKE_ARGS}
chaincodeInvoke ${APP_CHANNEL} 1 0 ${CC_NAME} ${CC_INVOKE_ARGS}
#Query on chaincode on Peer1/Org2, check if the result is 90
echo_b "Querying chaincode on peer 1 and 3..."
chaincodeQuery ${APP_CHANNEL} 1 1 ${CC_02_NAME} ${CC_02_QUERY_ARGS} 90
chaincodeQuery ${APP_CHANNEL} 2 1 ${CC_02_NAME} ${CC_02_QUERY_ARGS} 90
chaincodeQuery ${APP_CHANNEL} 1 1 ${CC_NAME} ${CC_QUERY_ARGS} 90
chaincodeQuery ${APP_CHANNEL} 2 1 ${CC_NAME} ${CC_QUERY_ARGS} 90
#Invoke on chaincode on Peer1/Org2
echo_b "Sending invoke transaction on org2/peer3..."
chaincodeInvoke ${APP_CHANNEL} 2 1 ${CC_02_NAME} ${CC_02_INVOKE_ARGS}
chaincodeInvoke ${APP_CHANNEL} 2 1 ${CC_NAME} ${CC_INVOKE_ARGS}
#Query on chaincode on Peer1/Org2, check if the result is 80
echo_b "Querying chaincode on all 4peers..."
chaincodeQuery ${APP_CHANNEL} 1 0 ${CC_02_NAME} ${CC_02_QUERY_ARGS} 80
chaincodeQuery ${APP_CHANNEL} 2 0 ${CC_02_NAME} ${CC_02_QUERY_ARGS} 80
chaincodeQuery ${APP_CHANNEL} 1 0 ${CC_NAME} ${CC_QUERY_ARGS} 80
chaincodeQuery ${APP_CHANNEL} 2 0 ${CC_NAME} ${CC_QUERY_ARGS} 80
echo_g "=== All GOOD, chaincode invoke/query completed ==="

View File

@ -7,18 +7,21 @@ elif [ -f scripts/func.sh ]; then
source scripts/func.sh
fi
CC_NAME=${CC_02_NAME}
CC_PATH=${CC_02_PATH}
CC_UPGRADE_ARGS=${CC_02_UPGRADE_ARGS}
#Upgrade to new version
echo_b "Upgrade chaincode to new version..."
chaincodeInstall 1 0 "${CC_02_NAME}" "${CC_UPGRADE_VERSION}" "${CC_02_PATH}"
chaincodeInstall 1 1 "${CC_02_NAME}" "${CC_UPGRADE_VERSION}" "${CC_02_PATH}"
chaincodeInstall 2 0 "${CC_02_NAME}" "${CC_UPGRADE_VERSION}" "${CC_02_PATH}"
chaincodeInstall 2 1 "${CC_02_NAME}" "${CC_UPGRADE_VERSION}" "${CC_02_PATH}"
echo_b "Upgrade chaincode ${CC_NAME} to new version..."
chaincodeInstall 1 0 "${CC_NAME}" "${CC_UPGRADE_VERSION}" "${CC_PATH}"
chaincodeInstall 1 1 "${CC_NAME}" "${CC_UPGRADE_VERSION}" "${CC_PATH}"
chaincodeInstall 2 0 "${CC_NAME}" "${CC_UPGRADE_VERSION}" "${CC_PATH}"
chaincodeInstall 2 1 "${CC_NAME}" "${CC_UPGRADE_VERSION}" "${CC_PATH}"
# Upgrade on one peer of the channel will update all
chaincodeUpgrade ${APP_CHANNEL} 1 0 "${CC_02_NAME}" "${CC_UPGRADE_VERSION}" "${CC_02_UPGRADE_ARGS}"
chaincodeUpgrade ${APP_CHANNEL} 1 0 "${CC_NAME}" "${CC_UPGRADE_VERSION}" "${CC_UPGRADE_ARGS}"
# Query new value, should refresh through all peers in the channel
chaincodeQuery ${APP_CHANNEL} 1 0 "${CC_02_NAME}" "${CC_02_QUERY_ARGS}" 100
chaincodeQuery ${APP_CHANNEL} 2 1 "${CC_02_NAME}" "${CC_02_QUERY_ARGS}" 100
chaincodeQuery ${APP_CHANNEL} 1 0 "${CC_NAME}" "${CC_QUERY_ARGS}" 100
chaincodeQuery ${APP_CHANNEL} 2 1 "${CC_NAME}" "${CC_QUERY_ARGS}" 100
echo_g "=== All GOOD, chaincode Upgrade completed ==="

View File

@ -19,14 +19,15 @@ peer=0
#--tls "true" \
#--cafile ${ORDERER_TLS_CA} \
CC_NAME=${CC_02_NAME}
echo_b "LSCC Get id"
chaincodeQuery "${APP_CHANNEL}" $org $peer lscc '{"Args":["getid","'${APP_CHANNEL}'", "'$CC_02_NAME'"]}'
chaincodeQuery "${APP_CHANNEL}" $org $peer lscc '{"Args":["getid","'${APP_CHANNEL}'", "'${CC_NAME}'"]}'
echo_b "LSCC Get cc ChaincodeDeploymentSpec"
chaincodeQuery "${APP_CHANNEL}" $org $peer lscc '{"Args":["getdepspec","'${APP_CHANNEL}'", "'$CC_02_NAME'"]}'
chaincodeQuery "${APP_CHANNEL}" $org $peer lscc '{"Args":["getdepspec","'${APP_CHANNEL}'", "'${CC_NAME}'"]}'
echo_b "LSCC Get cc bytes"
chaincodeQuery "${APP_CHANNEL}" $org $peer lscc '{"Args":["getccdata","'${APP_CHANNEL}'", "'$CC_02_NAME'"]}'
chaincodeQuery "${APP_CHANNEL}" $org $peer lscc '{"Args":["getccdata","'${APP_CHANNEL}'", "'${CC_NAME}'"]}'
echo_b "LSCC Get all chaincodes installed on the channel"
chaincodeQuery "${APP_CHANNEL}" $org $peer lscc '{"Args":["getinstalledchaincodes"]}'
@ -38,17 +39,17 @@ chaincodeQuery "${APP_CHANNEL}" $org $peer lscc '{"Args":["getchaincodes"]}'
#peer chaincode query \
# -C "${APP_CHANNEL}" \
# -n lscc \
# -c '{"Args":["getid","'${APP_CHANNEL}'", "'$CC_02_NAME'"]}'
# -c '{"Args":["getid","'${APP_CHANNEL}'", "'$CC_NAME'"]}'
#peer chaincode query \
# -C "${APP_CHANNEL}" \
# -n lscc \
# -c '{"Args":["getdepspec","'${APP_CHANNEL}'", "'$CC_02_NAME'"]}'
# -c '{"Args":["getdepspec","'${APP_CHANNEL}'", "'$CC_NAME'"]}'
#peer chaincode query \
# -C "${APP_CHANNEL}" \
# -n lscc \
# -c '{"Args":["getccdata","'${APP_CHANNEL}'", "'$CC_02_NAME'"]}'
# -c '{"Args":["getccdata","'${APP_CHANNEL}'", "'$CC_NAME'"]}'
#peer chaincode query \
# -C "${APP_CHANNEL}" \

View File

@ -39,17 +39,25 @@ ORG1_PEER1_URL="peer1.org1.example.com:7051"
ORG2_PEER0_URL="peer0.org2.example.com:7051"
ORG2_PEER1_URL="peer1.org2.example.com:7051"
# Chaincode related
CC_02_NAME="exp02"
CC_02_PATH="examples/chaincode/go/chaincode_example02"
CC_INIT_VERSION=1.0
CC_UPGRADE_VERSION=1.1
# Chaincode exp02 related
CC_02_NAME="exp02"
CC_02_PATH="examples/chaincode/go/chaincode_example02"
CC_02_INIT_ARGS='{"Args":["init","a","100","b","200"]}'
CC_02_UPGRADE_ARGS='{"Args":["upgrade","a","100","b","200"]}'
CC_02_INVOKE_ARGS='{"Args":["invoke","a","b","10"]}'
CC_02_QUERY_ARGS='{"Args":["query","a"]}'
# Chaincode map related
CC_MAP_NAME="map"
CC_MAP_PATH="examples/chaincode/go/map"
CC_MAP_INIT_ARGS='{"Args":["init",""]}'
CC_MAP_UPGRADE_ARGS='{"Args":["upgrade",""]}'
CC_MAP_INVOKE_ARGS='{"Args":["invoke","put","key","value"]}'
CC_MAP_QUERY_ARGS='{"Args":["get","key"]}'
# TLS config
CORE_PEER_TLS_ENABLED="true"

View File

@ -698,13 +698,13 @@
},
"signatures": [
{
"signature": "MEQCIHwIp2guw9a2SGenaYJWx4LR1be3RLhAY7Qn4rRIyg1lAiATSSj6kSa9lcAImM2WOVKXwtLr9TX73vMDOf2oruE0Ow==",
"signature": "MEUCIQDJ/PJG5coifK0MyZomxvdZOPc+UoDL+DrOLGR6ShgGdgIgMp/p3sXXIDwY9dnvn66fL1FixnJi5YZVcmNGOGWRx2A=",
"signature_header": {
"creator": {
"id_bytes": "LS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCk1JSUNHVENDQWIrZ0F3SUJBZ0lRWGFsZS9zSnJHUnlVQVc3dmQ4eWhHakFLQmdncWhrak9QUVFEQWpCek1Rc3cKQ1FZRFZRUUdFd0pWVXpFVE1CRUdBMVVFQ0JNS1EyRnNhV1p2Y201cFlURVdNQlFHQTFVRUJ4TU5VMkZ1SUVaeQpZVzVqYVhOamJ6RVpNQmNHQTFVRUNoTVFiM0puTWk1bGVHRnRjR3hsTG1OdmJURWNNQm9HQTFVRUF4TVRZMkV1CmIzSm5NaTVsZUdGdGNHeGxMbU52YlRBZUZ3MHhOekV5TWprd05qSTJNemxhRncweU56RXlNamN3TmpJMk16bGEKTUZzeEN6QUpCZ05WQkFZVEFsVlRNUk13RVFZRFZRUUlFd3BEWVd4cFptOXlibWxoTVJZd0ZBWURWUVFIRXcxVApZVzRnUm5KaGJtTnBjMk52TVI4d0hRWURWUVFEREJaQlpHMXBia0J2Y21jeUxtVjRZVzF3YkdVdVkyOXRNRmt3CkV3WUhLb1pJemowQ0FRWUlLb1pJemowREFRY0RRZ0FFNE5aaE5Bek9ReUlweXZnQnNWeDRMN2NreHYrSCtERGwKM2lTNGF2ekJ3czFWeXRjWXBtVVFNN2g3R3Z0VDJjOGJtTjFQZFBqbEdCWnJ2cEdHb2ZTeDJLTk5NRXN3RGdZRApWUjBQQVFIL0JBUURBZ2VBTUF3R0ExVWRFd0VCL3dRQ01BQXdLd1lEVlIwakJDUXdJb0FnK1pVVXZjUi9CWVZGCm1DMmdxS1FBWi93QTBpM3NXSkZvY3BpeEtJQ00rMVl3Q2dZSUtvWkl6ajBFQXdJRFNBQXdSUUloQU1DdjNNME8KQXFIOUJkdlVjYlRXd3BOM09PcGcrKzJETTAxRFY0b1UyRkhNQWlBMk9iL0pLTnl2YS9meFJQRnEyOWkrNVphTApSMEw1SnI4ODc4YkxVNkljRUE9PQotLS0tLUVORCBDRVJUSUZJQ0FURS0tLS0tCg==",
"mspid": "Org2MSP"
},
"nonce": "KFIN9pfh/D2qrHkq+b31h/kgw1H2ipBs"
"nonce": "uFcUC8UcXpNuUO6lljTHKn1K1NpjmN/O"
}
}
]
@ -713,7 +713,7 @@
"channel_header": {
"channel_id": "businesschannel",
"epoch": "0",
"timestamp": "2018-01-05T02:50:27.000Z",
"timestamp": "2018-01-05T06:36:30.000Z",
"tx_id": "",
"type": 2,
"version": 0
@ -723,18 +723,18 @@
"id_bytes": "LS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCk1JSUNHVENDQWIrZ0F3SUJBZ0lRWGFsZS9zSnJHUnlVQVc3dmQ4eWhHakFLQmdncWhrak9QUVFEQWpCek1Rc3cKQ1FZRFZRUUdFd0pWVXpFVE1CRUdBMVVFQ0JNS1EyRnNhV1p2Y201cFlURVdNQlFHQTFVRUJ4TU5VMkZ1SUVaeQpZVzVqYVhOamJ6RVpNQmNHQTFVRUNoTVFiM0puTWk1bGVHRnRjR3hsTG1OdmJURWNNQm9HQTFVRUF4TVRZMkV1CmIzSm5NaTVsZUdGdGNHeGxMbU52YlRBZUZ3MHhOekV5TWprd05qSTJNemxhRncweU56RXlNamN3TmpJMk16bGEKTUZzeEN6QUpCZ05WQkFZVEFsVlRNUk13RVFZRFZRUUlFd3BEWVd4cFptOXlibWxoTVJZd0ZBWURWUVFIRXcxVApZVzRnUm5KaGJtTnBjMk52TVI4d0hRWURWUVFEREJaQlpHMXBia0J2Y21jeUxtVjRZVzF3YkdVdVkyOXRNRmt3CkV3WUhLb1pJemowQ0FRWUlLb1pJemowREFRY0RRZ0FFNE5aaE5Bek9ReUlweXZnQnNWeDRMN2NreHYrSCtERGwKM2lTNGF2ekJ3czFWeXRjWXBtVVFNN2g3R3Z0VDJjOGJtTjFQZFBqbEdCWnJ2cEdHb2ZTeDJLTk5NRXN3RGdZRApWUjBQQVFIL0JBUURBZ2VBTUF3R0ExVWRFd0VCL3dRQ01BQXdLd1lEVlIwakJDUXdJb0FnK1pVVXZjUi9CWVZGCm1DMmdxS1FBWi93QTBpM3NXSkZvY3BpeEtJQ00rMVl3Q2dZSUtvWkl6ajBFQXdJRFNBQXdSUUloQU1DdjNNME8KQXFIOUJkdlVjYlRXd3BOM09PcGcrKzJETTAxRFY0b1UyRkhNQWlBMk9iL0pLTnl2YS9meFJQRnEyOWkrNVphTApSMEw1SnI4ODc4YkxVNkljRUE9PQotLS0tLUVORCBDRVJUSUZJQ0FURS0tLS0tCg==",
"mspid": "Org2MSP"
},
"nonce": "VZpFerjp7rc1wwjkc54kQcMORD2dthzq"
"nonce": "8jn6u8Ccuswbf3vIsdm/LFNqCsxUcv6F"
}
}
},
"signature": "MEQCIHswHsx24JeGCpAptKdFHapoiBnQLnuiVpwk6fTS+6IzAiAfWsvy0Ccyji8Wg3yx8BbM0xcb/Lr7rkJYd3Xq2v4lvA=="
"signature": "MEQCIH0YvyTo+CqRgciMU6SiIcTyw4I3psnLrWMZVsKPPFv7AiAc3ZoyL4+KQ5FjKr5vsR+l6SxmpQ5qvCKqCJ7MDUHStA=="
}
},
"header": {
"channel_header": {
"channel_id": "businesschannel",
"epoch": "0",
"timestamp": "2018-01-05T02:50:27.000Z",
"timestamp": "2018-01-05T06:36:30.000Z",
"tx_id": "",
"type": 1,
"version": 0
@ -744,23 +744,23 @@
"id_bytes": "LS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCk1JSUNERENDQWJPZ0F3SUJBZ0lSQU8zb3g2UGwva1N2d2ZnT25YVUxBQzh3Q2dZSUtvWkl6ajBFQXdJd2FURUwKTUFrR0ExVUVCaE1DVlZNeEV6QVJCZ05WQkFnVENrTmhiR2xtYjNKdWFXRXhGakFVQmdOVkJBY1REVk5oYmlCRwpjbUZ1WTJselkyOHhGREFTQmdOVkJBb1RDMlY0WVcxd2JHVXVZMjl0TVJjd0ZRWURWUVFERXc1allTNWxlR0Z0CmNHeGxMbU52YlRBZUZ3MHhOekV5TWprd05qSTJNemxhRncweU56RXlNamN3TmpJMk16bGFNRmd4Q3pBSkJnTlYKQkFZVEFsVlRNUk13RVFZRFZRUUlFd3BEWVd4cFptOXlibWxoTVJZd0ZBWURWUVFIRXcxVFlXNGdSbkpoYm1OcApjMk52TVJ3d0dnWURWUVFERXhOdmNtUmxjbVZ5TG1WNFlXMXdiR1V1WTI5dE1Ga3dFd1lIS29aSXpqMENBUVlJCktvWkl6ajBEQVFjRFFnQUVtM0ZzdE15T0xCUmwrWDFSVGtJaFhDdHF4VU1vckdPblBsT0FVRFhiK3d6VmNKalIKb3lCZjY4Q25yMFVtWGJzTFRiU0doNnlJZzRsQ3NrcFNwKzF5UktOTk1Fc3dEZ1lEVlIwUEFRSC9CQVFEQWdlQQpNQXdHQTFVZEV3RUIvd1FDTUFBd0t3WURWUjBqQkNRd0lvQWc3ZTQ2aUh6eTgzNURGNlo2MktkbG5DbHFSRkFZClY5cDc4WmxrRmtJd3Bpc3dDZ1lJS29aSXpqMEVBd0lEUndBd1JBSWdLNS9tSHJkcGRqY21tSGV0cW9sWGZvcTMKU09FcTFDTmdHVDF0ZHBLMlozc0NJQ0I3OEUzeXVpVXBtaWVsVnhlc1hMOGo5b0RiK0xLK3NHYWkvRzUyT2U1WAotLS0tLUVORCBDRVJUSUZJQ0FURS0tLS0tCg==",
"mspid": "OrdererMSP"
},
"nonce": "LbUDdDZncSEmg8IaKsceP8tYkcxwRF9D"
"nonce": "9TeXlpYDlodfd+HGxdYSLhjwXEHTML8p"
}
}
},
"signature": "MEUCIQD1Leob7f/Tm+UhWaWga5++yFYar1NPLLZgR49cqbKwbQIgAZ2u3NOl3Tusve7JlB+yvIbxkscYiBWehXnhvr9kk58="
"signature": "MEQCICOAf/sDK4B3upuec5ny0khKUaEAbxNS/4l6vbNd0jy3AiBCZI8KE6+cc3B+Jgx0CcNGGLnw2V6v+AEiopl0y/NNVA=="
}
]
},
"header": {
"data_hash": "PFXmQJonWaN2XKT3gSbsKPW0EboiDPTbr867K9E2jF8=",
"data_hash": "odmOEv05/T2C6GmKC2vsh5bkueAH5/q/PVucn8iUc6A=",
"number": "2",
"previous_hash": "bjZey0pUuU/2DNrJQ9URib2dNHY9WxWL3LSrMVdIrpQ="
"previous_hash": "ZERGtQYOmHA0pvWOz4QJM5AYnEkaZg/jt5gzIHQ7120="
},
"metadata": {
"metadata": [
"EvkGCq0GCpAGCgpPcmRlcmVyTVNQEoEGLS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCk1JSUNERENDQWJPZ0F3SUJBZ0lSQU8zb3g2UGwva1N2d2ZnT25YVUxBQzh3Q2dZSUtvWkl6ajBFQXdJd2FURUwKTUFrR0ExVUVCaE1DVlZNeEV6QVJCZ05WQkFnVENrTmhiR2xtYjNKdWFXRXhGakFVQmdOVkJBY1REVk5oYmlCRwpjbUZ1WTJselkyOHhGREFTQmdOVkJBb1RDMlY0WVcxd2JHVXVZMjl0TVJjd0ZRWURWUVFERXc1allTNWxlR0Z0CmNHeGxMbU52YlRBZUZ3MHhOekV5TWprd05qSTJNemxhRncweU56RXlNamN3TmpJMk16bGFNRmd4Q3pBSkJnTlYKQkFZVEFsVlRNUk13RVFZRFZRUUlFd3BEWVd4cFptOXlibWxoTVJZd0ZBWURWUVFIRXcxVFlXNGdSbkpoYm1OcApjMk52TVJ3d0dnWURWUVFERXhOdmNtUmxjbVZ5TG1WNFlXMXdiR1V1WTI5dE1Ga3dFd1lIS29aSXpqMENBUVlJCktvWkl6ajBEQVFjRFFnQUVtM0ZzdE15T0xCUmwrWDFSVGtJaFhDdHF4VU1vckdPblBsT0FVRFhiK3d6VmNKalIKb3lCZjY4Q25yMFVtWGJzTFRiU0doNnlJZzRsQ3NrcFNwKzF5UktOTk1Fc3dEZ1lEVlIwUEFRSC9CQVFEQWdlQQpNQXdHQTFVZEV3RUIvd1FDTUFBd0t3WURWUjBqQkNRd0lvQWc3ZTQ2aUh6eTgzNURGNlo2MktkbG5DbHFSRkFZClY5cDc4WmxrRmtJd3Bpc3dDZ1lJS29aSXpqMEVBd0lEUndBd1JBSWdLNS9tSHJkcGRqY21tSGV0cW9sWGZvcTMKU09FcTFDTmdHVDF0ZHBLMlozc0NJQ0I3OEUzeXVpVXBtaWVsVnhlc1hMOGo5b0RiK0xLK3NHYWkvRzUyT2U1WAotLS0tLUVORCBDRVJUSUZJQ0FURS0tLS0tChIYVJDDNMg85guEVAwtftJrqT0NIR7XiCejEkcwRQIhAI0iwvwwj0mOdCB7J+CFI01rVbxSP/aaqJ2KfY+h8jfrAiAtg/Kv53UHQyF7jtJA4Jh+lqjv9i+k+qLl9qiWrcGsUw==",
"CgIIAhL4BgqtBgqQBgoKT3JkZXJlck1TUBKBBi0tLS0tQkVHSU4gQ0VSVElGSUNBVEUtLS0tLQpNSUlDRERDQ0FiT2dBd0lCQWdJUkFPM294NlBsL2tTdndmZ09uWFVMQUM4d0NnWUlLb1pJemowRUF3SXdhVEVMCk1Ba0dBMVVFQmhNQ1ZWTXhFekFSQmdOVkJBZ1RDa05oYkdsbWIzSnVhV0V4RmpBVUJnTlZCQWNURFZOaGJpQkcKY21GdVkybHpZMjh4RkRBU0JnTlZCQW9UQzJWNFlXMXdiR1V1WTI5dE1SY3dGUVlEVlFRREV3NWpZUzVsZUdGdApjR3hsTG1OdmJUQWVGdzB4TnpFeU1qa3dOakkyTXpsYUZ3MHlOekV5TWpjd05qSTJNemxhTUZneEN6QUpCZ05WCkJBWVRBbFZUTVJNd0VRWURWUVFJRXdwRFlXeHBabTl5Ym1saE1SWXdGQVlEVlFRSEV3MVRZVzRnUm5KaGJtTnAKYzJOdk1Sd3dHZ1lEVlFRREV4TnZjbVJsY21WeUxtVjRZVzF3YkdVdVkyOXRNRmt3RXdZSEtvWkl6ajBDQVFZSQpLb1pJemowREFRY0RRZ0FFbTNGc3RNeU9MQlJsK1gxUlRrSWhYQ3RxeFVNb3JHT25QbE9BVURYYit3elZjSmpSCm95QmY2OENucjBVbVhic0xUYlNHaDZ5SWc0bENza3BTcCsxeVJLTk5NRXN3RGdZRFZSMFBBUUgvQkFRREFnZUEKTUF3R0ExVWRFd0VCL3dRQ01BQXdLd1lEVlIwakJDUXdJb0FnN2U0NmlIenk4MzVERjZaNjJLZGxuQ2xxUkZBWQpWOXA3OFpsa0ZrSXdwaXN3Q2dZSUtvWkl6ajBFQXdJRFJ3QXdSQUlnSzUvbUhyZHBkamNtbUhldHFvbFhmb3EzClNPRXExQ05nR1QxdGRwSzJaM3NDSUNCNzhFM3l1aVVwbWllbFZ4ZXNYTDhqOW9EYitMSytzR2FpL0c1Mk9lNVgKLS0tLS1FTkQgQ0VSVElGSUNBVEUtLS0tLQoSGMvkI1Nb8JuuhUUCUlYGkdtEqn5b+pw2FhJGMEQCIAWGbXLc2qsu6IKC9qgOYGzIcRSrcTBjTTsmRj1HyTjVAiA96pCtrVCr+8baQgd9IVNPRkKPy/TOmJsoM2mFvDmMhA==",
"EvgGCq0GCpAGCgpPcmRlcmVyTVNQEoEGLS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCk1JSUNERENDQWJPZ0F3SUJBZ0lSQU8zb3g2UGwva1N2d2ZnT25YVUxBQzh3Q2dZSUtvWkl6ajBFQXdJd2FURUwKTUFrR0ExVUVCaE1DVlZNeEV6QVJCZ05WQkFnVENrTmhiR2xtYjNKdWFXRXhGakFVQmdOVkJBY1REVk5oYmlCRwpjbUZ1WTJselkyOHhGREFTQmdOVkJBb1RDMlY0WVcxd2JHVXVZMjl0TVJjd0ZRWURWUVFERXc1allTNWxlR0Z0CmNHeGxMbU52YlRBZUZ3MHhOekV5TWprd05qSTJNemxhRncweU56RXlNamN3TmpJMk16bGFNRmd4Q3pBSkJnTlYKQkFZVEFsVlRNUk13RVFZRFZRUUlFd3BEWVd4cFptOXlibWxoTVJZd0ZBWURWUVFIRXcxVFlXNGdSbkpoYm1OcApjMk52TVJ3d0dnWURWUVFERXhOdmNtUmxjbVZ5TG1WNFlXMXdiR1V1WTI5dE1Ga3dFd1lIS29aSXpqMENBUVlJCktvWkl6ajBEQVFjRFFnQUVtM0ZzdE15T0xCUmwrWDFSVGtJaFhDdHF4VU1vckdPblBsT0FVRFhiK3d6VmNKalIKb3lCZjY4Q25yMFVtWGJzTFRiU0doNnlJZzRsQ3NrcFNwKzF5UktOTk1Fc3dEZ1lEVlIwUEFRSC9CQVFEQWdlQQpNQXdHQTFVZEV3RUIvd1FDTUFBd0t3WURWUjBqQkNRd0lvQWc3ZTQ2aUh6eTgzNURGNlo2MktkbG5DbHFSRkFZClY5cDc4WmxrRmtJd3Bpc3dDZ1lJS29aSXpqMEVBd0lEUndBd1JBSWdLNS9tSHJkcGRqY21tSGV0cW9sWGZvcTMKU09FcTFDTmdHVDF0ZHBLMlozc0NJQ0I3OEUzeXVpVXBtaWVsVnhlc1hMOGo5b0RiK0xLK3NHYWkvRzUyT2U1WAotLS0tLUVORCBDRVJUSUZJQ0FURS0tLS0tChIYt0MLNFJZzwYyCh+J3WTh7orO0wDR/dNrEkYwRAIgBJIEnA2SUpYsw2+nSBBDVSsYVaGpUQGpSwDNQcrLef0CIFNHIOgdh8RWNl9P/7exTllF9ei3nvMfyJjyODgcZEfE",
"CgIIAhL5BgqtBgqQBgoKT3JkZXJlck1TUBKBBi0tLS0tQkVHSU4gQ0VSVElGSUNBVEUtLS0tLQpNSUlDRERDQ0FiT2dBd0lCQWdJUkFPM294NlBsL2tTdndmZ09uWFVMQUM4d0NnWUlLb1pJemowRUF3SXdhVEVMCk1Ba0dBMVVFQmhNQ1ZWTXhFekFSQmdOVkJBZ1RDa05oYkdsbWIzSnVhV0V4RmpBVUJnTlZCQWNURFZOaGJpQkcKY21GdVkybHpZMjh4RkRBU0JnTlZCQW9UQzJWNFlXMXdiR1V1WTI5dE1SY3dGUVlEVlFRREV3NWpZUzVsZUdGdApjR3hsTG1OdmJUQWVGdzB4TnpFeU1qa3dOakkyTXpsYUZ3MHlOekV5TWpjd05qSTJNemxhTUZneEN6QUpCZ05WCkJBWVRBbFZUTVJNd0VRWURWUVFJRXdwRFlXeHBabTl5Ym1saE1SWXdGQVlEVlFRSEV3MVRZVzRnUm5KaGJtTnAKYzJOdk1Sd3dHZ1lEVlFRREV4TnZjbVJsY21WeUxtVjRZVzF3YkdVdVkyOXRNRmt3RXdZSEtvWkl6ajBDQVFZSQpLb1pJemowREFRY0RRZ0FFbTNGc3RNeU9MQlJsK1gxUlRrSWhYQ3RxeFVNb3JHT25QbE9BVURYYit3elZjSmpSCm95QmY2OENucjBVbVhic0xUYlNHaDZ5SWc0bENza3BTcCsxeVJLTk5NRXN3RGdZRFZSMFBBUUgvQkFRREFnZUEKTUF3R0ExVWRFd0VCL3dRQ01BQXdLd1lEVlIwakJDUXdJb0FnN2U0NmlIenk4MzVERjZaNjJLZGxuQ2xxUkZBWQpWOXA3OFpsa0ZrSXdwaXN3Q2dZSUtvWkl6ajBFQXdJRFJ3QXdSQUlnSzUvbUhyZHBkamNtbUhldHFvbFhmb3EzClNPRXExQ05nR1QxdGRwSzJaM3NDSUNCNzhFM3l1aVVwbWllbFZ4ZXNYTDhqOW9EYitMSytzR2FpL0c1Mk9lNVgKLS0tLS1FTkQgQ0VSVElGSUNBVEUtLS0tLQoSGAv9Y+9pB2HYf7lRSgwo1yyx90XPZjWoABJHMEUCIQCuYJfq/st7AKIroj+XoTR5wr1Vc2ft4pQ2OFFvcHzITgIgettMSWfkUU9ENxecKGmmDWjIuagxZ/OX4N6bUj+4fSg=",
"",
""
]

File diff suppressed because one or more lines are too long

File diff suppressed because it is too large Load Diff

File diff suppressed because one or more lines are too long