.:;E* ;E97@7D3F768DA?3GF:AD;F3F;H7A@>;@75A@F7@F3@6
;EBDAH;6768AD5A@H7@;7@57A@>K.:;E* 53@@AF47GE76
8AD>793>BGDBAE7E AD3GF:AD;F3F;H7G@67DEF3@6;@9A8I:3F
;E3@6;E@AFEGBBADF763>I3KEGE7F:7A@>;@75A@F7@F.A
5ABK5A67E3?B>7E3>I3KEGE7F:7A@>;@75A@F7@F
A@P9GD73@JF7D@3>3EE3@6D3
!7@7EKE'A4;>7-7DH;57E7B>AK?7@F
!G;67

Con'gure an External Cassandra
Modi1ed in: 
07DE;A@ 7E5D;BF;A@

M -GBBADF8AD3EE3@6D3
-77 -GBBADF76)B7D3F;@9@H;DA@?7@F
,787D7@57 8AD!'-

M (7I67B>AK?7@F8AD!'-E5:7?3E;@F:7
3EE3@6D35>GEF7DD73F73@667B>AK!'-
E5:7?3E;@F:73EE3@6D35>GEF7D478AD7
EF3DF;@9!'-@A67E.:;E5:3@97;?BDAH7EF:7
?3@397?7@FA8F:73EE3@6D33GF:AD;L3F;A@8AD
3EB75;P5GE7D3E3D7EG>FF:7GE7D@A>A@97D
@776EFAAI@EGB7DGE7D3GF:AD;L3F;A@EFA
5D73F7=7KEB357E#8>3F7D@7IF34>7E?;9:F47
5D73F766GD;@93@GB63F7AD3?;9D3F;A@
5A@P9GD7 5D73F7F34>7E = true FA3>>AI!'-FA
5D73F7F:7?;EE;@9F34>7E;@!'-=7KEB357E
M !7@7EKEE;?B>;P7E!'-67B>AK?7@FEI;F:
3EE3@6D34K67BD753F;@9A>6ABF;A@E3@6
;@FDA6G5;@9@7IA@7E-77F:7 53EE3@6D3
-75F;A@ E75F;A@A8F:7 Genesys Mobile
Engagement Conguration Options 9G;67
M .:7?;@;?G?EGBBADF76H7DE;A@A83EE3@6D3;E
@AI,787DFAF:7 *D7D7CG;E;F7E E75F;A@

M !'-@A>A@97DEGBBADFE;@EF3>>;@97?476676
3EE3@6D3;@>34ADBDA6G5F;A@
M :3@97A83EE3@6D36D;H7D.:7@7I6D;H7D
GE764K!'-FA5A@@75FFA3EE3@6D3EGBBADFE
E7FF;@9?G>F;B>73EE3@6D3;@EF3@57E)F:7D
3EE3@6D3;@EF3@57EF:3F47>A@9FAE3?73F3
7@F7D3D73GFA?3F;53>>K67F75F76#8A@7A8
F:7?6;7EF:76D;H7D5A@@75FEFAAF:7D
67F75F763EE3@6D3;@EF3@57E;@5>G6;@9F:AE7
F:3F3D7@AF67P@76;@F:7!'-ABF;A@E

!'-A@>KEGBBADFE67B>AK?7@FEI;F:3@7JF7D@3>
3EE3@6D3@7JF7D@3>3EE3@6D3?;9:F47GE76;@
F:78A>>AI;@9E57@3D;AE
M 2AG3>D736K:3H733EE3@6D33F3-F3J
67B>AK?7@F
A@P9GD73@JF7D@3>3EE3@6D3
!7@7EKE'A4;>7-7DH;57E7B>AK?7@F!G;67
M 2AG3D7E75GD;@9KAGD63F3;@E79D793F76
@7FIAD=E5397E3@6D35=E
M 2AGI3@F?G>F;B>7D76G@63@5K873FGD7EEG5:3E
6;EF;@5F63F357@F7DED35=3@65:3EE;E
3I3D7@7EE
M 2AG3D7;@EF3>>;@9!'-A@3BDA6G5F;A@E7DH7DAD
A@31;@6AIE:AEF
M -F3DF;@9I;F:!'-@A>A@97D
EGBBADFE;@EF3>>;@97?4766763EE3@6D3;@
>34ADBDA6G5F;A@
M !7@7EKE6A7E@AFD75A??7@6;@EF3>>;@9
3EE3@6D3A@1;@6AIE
A@P9GD;@9!'-8AD3@7JF7D@3>3EE3@6D3;E3?G>F;EF7BBDA57EEFA7@34>75A@@75F;A@.&-
5A@@75F;A@3GF:7@F;53F;A@3@63GF:AD;L3F;A@.:7EF7BE;@5>G67E7FF;@95A@P9GD3F;A@ABF;A@E;@
A@P9GD3F;A@'3@397DAD!7@7EKE6?;@;EFD3FAD5:3@9;@95A@P9GD3F;A@E7FF;@9E;@F:7
cassandra.yaml P>73@67J75GF;@93EE3@6D3+G7DK&3@9G397+&5A??3@6E
#?BADF3@F
M >>7JF7D@3>3EE3@6D3@A67E?GEF47A8F:7E3?7H7DE;A@
M 3EE3@6D3;E@AFD7CG;D76;8KAG67B>AK!7@7EKE'A4;>7@H;DA@?7@F8AD:3F*#0
?3;>*#03@6)B7@'76;3*#0
M 1:7@KAG3D767B>AK;@93EE3@6D33@6!'-;@EF3@57E7@EGD7B7D875FF;?7
EK@5:DA@;L3F;A@47FI77@:AEFE(.*AD3@AF:7D637?A@E:AG>647;@EF3>>76A@735:
:AEFFA7@EGD7A@>K387I?;>>;E75A@6E6;O7D7@5747FI77@:AEFE3F?3J;?G?)H7D
F;?763F3;@33EE3@6D3D7B>;5353@475A?7;@5A@E;EF7@FI;F:AF:7DD7B>;53E6G7FAF:7
6;EFD;4GF76@3FGD7A8F:763F343E7#@F:;EE57@3D;AKAG@776FAD7B3;DF:7?3E
67E5D;476;@F:7 )Q5;3>3EE3@6D36A5G?7@F3F;A@
M !'-6A7E@AFEGBBADF?G>F;63F357@F7D3EE3@6D3E;?G>F3@7AGE5A@@75F;A@E!'-
>GEF7D?GEF5A@@75FA@>KFA3E;@9>73@6>A53>63F357@F7D3EE3@6D3>GEF7D
Install External Cassandra Nodes
#8KAG:3H7@AF3>D736K;@EF3>>763EE3@6D3F:7@8A>>AIF:7E79G;67>;@7E
*D7D7CG;E;F7E
M !'-EGBBADFE3EE3@6D33@6:;9:7DN
M .:7>3F7EFF7EF76H7DE;A@;E
A@P9GD73@JF7D@3>3EE3@6D3
!7@7EKE'A4;>7-7DH;57E7B>AK?7@F!G;67
M AD3EE3@6D3GE7+&
M AD3EE3@6D33@6GE7+&
M AD3EE3@6D3GE7+&
M ADF:7(7FIAD=.ABA>A9KGE7A@7ADE7H7D3>5>GEF7DE
#@EF3>>3EE3@6D3A@>>(A67E
AI@>A36B35:73EE3@6D3/E7F:7D;9:F/@;JGE7DFA;@EF3>>F:73BB>;53F;A@A@3>>A8KAGD@A67EAD
:AEF
$ wget https://archive.apache.org/dist/cassandra/4.0.0/apache-cassandra-4.0.0-bin.tar.gz
JFD35F
$ tar xf apache-cassandra-4.0.0-bin.tar.gz
A@P9GD73EE3@6D38AD(7FIAD=.ABA>A9K
 6;FF:7 conf/cassandra.yaml P>78AD3>>A8F:7@A67EF:3FKAG;@EF3>>76
M 'A6;8KF:7 cluster_name H3>G7
cluster_name: '<the same name for all the cluster/datacenter>'
M 'A6;8KF:7 seeds H3>G7FAEB75;8K35A??3E7B3D3F76>;EFA8:AEF#*366D7EE7E
- seeds:
"<cassandra_seed_host_ip_address_cluster_datacenter1>,<cassandra_seed_host_ip_address_cluster_datacenter_2>"
AD7J3?B>73@6E7747>AI
- seeds: "192.168.1.172,10.100.198.143"
M 'A6;8KF:7 listen_address H3>G7
listen_address: <externaly reachable cassandra host ip address>
M 'A6;8KF:7 native_transport_port H3>G7FAEB75;8KF:7BADF?3F5:;@9F:7H3>G7A8F:7!'-
A@P9GD3F;A@ABF;A@ @3F;H7BADF
native_transport_port: 9042 # default port
native_transport_port_ssl: 9142 # default TLS port if you need
native_transport_port for non-TLS connections
Note: #8KAG7@34>7.&-GE7 native_transport_port 8AD.&-5A@@75F;A@E#8KAG@776FA=77B
native_transport_port 8AD@A@.&-5A@@75F;A@EGE7 native_transport_port_ssl FA7@34>7
5>;7@F7@5DKBF;A@A@F:7E75GD76.&-BADF-77 >;7@FFA@A677@5DKBF;A@ ;@F:7 Ocial Apache
Cassandra 6A5G?7@F3F;A@
M 'A6;8KF:7 rpc_address H3>G7
rpc_address: <externaly reachable cassandra host ip address>
M 'A6;8KF:7 endpoint_snitch H3>G7
A@P9GD73@JF7D@3>3EE3@6D3
!7@7EKE'A4;>7-7DH;57E7B>AK?7@F!G;67
endpoint_snitch: PropertyFileSnitch
#?BADF3@F
7B7@6;@9A@KAGDFABA>A9KKAG?3KGE7AF:7DH3>G7EEG5:3E GossipingPropertyFileSnitch 8AD
F:7E@;F5:7@6BA;@F
 6;FF:7 conf/cassandra-topology.properties P>78AD3>>A8F:7@A67E
# Cassandra Node IP=Data Center:Rack
# DC1
192.168.1.172=DC1:RAC1 # seed node DC1
192.168.1.215=DC1:RAC1
192.168.1.234=DC1:RAC1
# DC2
10.100.198.143=DC2:RAC1 # seed node DC2
10.100.198.94=DC2:RAC1
10.100.198.136=DC2:RAC1
# default for unknown nodes
default=DC1:RAC1
-F3DF3>>A8F:753EE3@6D3@A67E(AIKAGD5>GEF7DA853EE3@6D3@A67E;E8G@5F;A@3>
Synchronize Cassandra Hosts
.A3HA;6EK@5:DA@;L3F;A@;EEG7EEK@5:DA@;L7F:75>A5=A83>>!'-@A67E)@1;@6AIEGE78A>>AI;@9
F:75A??3@6
net time \\<ComputerName> /set /yes
1:7D7 \\<ComputerName> EB75;P7EF:7@3?7A83E7DH7DKAGI3@FFA5:75=ADI;F:I:;5:KAGI3@F
FAEK@5:DA@;L7
Deploy GMS schemas in Cassandra
-F3DF;@9;@;F;E?3@63FADKFA5D73F73@667B>AK!'-E5:7?3E;@F:73EE3@6D35>GEF7D
478AD7EF3DF;@9!'-@A67E.:;E5:3@97;?BDAH7EF:7?3@397?7@FA8F:73EE3@6D33GF:AD;L3F;A@
8AD3EB75;P5GE7D3E3D7EG>FF:73EE3@6D3GE7D@A>A@97D@776EFAAI@EGB7DGE7D3GF:AD;L3F;A@E
FA5D73F7=7KEB357E
D73F7-5:7?3E8ADKAGD ;DEF7B>AK?7@F
#@3@7I8D7E:67B>AK?7@FKAG@776FA5D73F7!'-=7KEB357E3@6F34>7E;@ one A8KAGD@A67E@AF
;@3>>A8F:7?78AD7KAGDG@F:7+&E5D;BFEF:3FB7D8AD?F:7E7AB7D3F;A@E76;FF:78A>>AI;@9P>7E
A@P9GD73@JF7D@3>3EE3@6D3
!7@7EKE'A4;>7-7DH;57E7B>AK?7@F!G;67
M <GMS Home>/scripts/cassandra_gsg_schema.cql
M <GMS Home>/scripts/cassandra_gsg_dd_schema.cql
,7B>357F:7F7JFB>357:A>67DE [ToBeChanged:<keyspace_name>] I;F:KAGD=7KEB357@3?7E3@6E7F
F:7D7B>;53F;A@835FADFA NetworkTopologyStrategy
AD7J3?B>7;8KAG76;FF:7 cassandra_gsg_schema.cql P>7:7D73D7F:7PDEF>;@7EF:3FKAGI;>>E77
CREATE KEYSPACE [ToBeChanged:<keyspace_name>] WITH replication =
{'class': 'SimpleStrategy', 'replication_factor': '2'}
AND durable_writes = true;
CREATE TABLE [ToBeChanged:<keyspace_name>].gsg_principal_roles (
key blob,
column1 blob,
value blob,
PRIMARY KEY (key, column1)
)
#8KAGD!'-=7KEB357@3?7;E gsgKAGE:AG>676;FF:7E7>;@7E3E8A>>AIE
CREATE KEYSPACE gsg WITH replication =
{ 'class' : 'NetworkTopologyStrategy', 'DC1' : 2, 'DC2' : 2 }
AND durable_writes = true;
CREATE TABLE gsg.gsg_principal_roles (
key blob,
column1 blob,
value blob,
PRIMARY KEY (key, column1)
)
8F7DKAG:3H776;F76F:7+&E5D;BFE>3G@5:F:7?FA5D73F7F:7!'-E5:7?3E;@F:73EE3@6D3
@A67
$ <CASSANDRA_HOME>/bin/cqlsh <cassandra_host> <cassandra_port> -f <GMS_HOME>/scripts/
cassandra_gsg_schema.cql
$ <CASSANDRA_HOME>/bin/cqlsh <cassandra_host> <cassandra_port> -f <GMS_HOME>/scripts/
cassandra_gsg_dd_schema.cql
#?BADF3@F
D73F7F:7E7E5:7?3E;@A@7@A67A@>K
/B63F7-5:7?338F7D/B9D36;@9
-F3DF;@9;@3EE3@6D3E5:7?3E3D75A?B3F;4>7I;F:!'-3@66A not D7CG;D73@K
GB9D367GF;8KAGGB9D3678DA?!'-H7DE;A@EA>67DF:3@KAGI;>>@776FA?3@G3>>KGB63F7
F:73EE3@6D3E5:7?3E;@ one A8KAGD@A67E@AF3>>
-F3DF;@9;@5A@P9GD7 5D73F7F34>7E = true FA3>>AI!'-FA5D73F7F:7?;EE;@9F34>7E;@!'-
=7KEB357E
78AD7DG@@;@9F:7+&E5D;BFEF:3FB7D8AD?F:7E7AB7D3F;A@E76;FF:78A>>AI;@9P>7E
A@P9GD73@JF7D@3>3EE3@6D3
!7@7EKE'A4;>7-7DH;57E7B>AK?7@F!G;67
M <GMS Home>/scripts/update_cassandra_gsg_schema.cql
M <GMS Home>/scripts/update_cassandra_gsg_dd_schema.cql
,7B>357F:7F7JFB>357:A>67DE [ToBeChanged:<keyspace_name>] I;F:KAGD=7KEB357@3?7E3@6E7F
F:7D7B>;53F;A@835FADFA NetworkTopologyStrategy
AD7J3?B>7;8KAG76;FF:7 update_cassandra_gsg_schema.cql P>7:7D73D7F:7PDEF>;@7EF:3FKAG
I;>>E77
CREATE KEYSPACE IF NOT EXISTS [ToBeChanged:<keyspace_name>] WITH replication = {'class':
'SimpleStrategy', 'replication_factor': '2'}
AND durable_writes = true;
CREATE TABLE IF NOT EXISTS [ToBeChanged:<keyspace_name>].gsg_principal_roles (
key blob,
column1 blob,
value blob,
PRIMARY KEY (key, column1)
)
#8KAGD!'-=7KEB357@3?7;E gsgKAGE:AG>676;FF:7E7>;@7E3E8A>>AIE
CREATE KEYSPACE IF NOT EXISTS gsg WITH replication = {'class' : 'NetworkTopologyStrategy',
'DC1' : 2, 'DC2' : 2}
AND durable_writes = true;
CREATE TABLE IF NOT EXISTS gsg.gsg_principal_roles (
key blob,
column1 blob,
value blob,
PRIMARY KEY (key, column1)
)
8F7DKAG76;F76F:7+&E5D;BFE>3G@5:F:7?FAGB63F7F:7E5:7?3E
$ <CASSANDRA_HOME>/bin/cqlsh <cassandra_host> <cassandra_port> -f <GMS_HOME>/scripts/
update_cassandra_gsg_schema.default.cql
$ <CASSANDRA_HOME>/bin/cqlsh <cassandra_host> <cassandra_port> -f <GMS_HOME>/scripts/
update_cassandra_gsg_dd_schema.default.cql
#?BADF3@F
/B63F7F:7E5:7?3E;@A@7@A67A@>K
Con'guration Options
.:7 53EE3@6D3 3@6 53EE3@6D33GF:7@F;53F;A@E75GD;FK E75F;A@E>;EFF:75A@P9GD3F;A@ABF;A@E
3BB>;534>7FA3@7JF7D@3>3EE3@6D367B>AK?7@F:3@97EF3=77O75F38F7DD7EF3DF
A@P9GD73@JF7D@3>3EE3@6D3
!7@7EKE'A4;>7-7DH;57E7B>AK?7@F!G;67
Connection to an External Cassandra
.:78A>>AI;@9EF7BE3D7D7CG;D76FA7@34>7!'-FA5A@@75FFA3@7JF7D@3>3EE3@6D3
 #@A@P9GD3F;A@'3@397D>A53F73@6AB7@KAGD!'-BB>;53F;A@A4<75F
 )@F:7)BF;A@EF34 [cassandra] E75F;A@5A@P9GD7F:78A>>AI;@9ABF;A@E
@A67E KAGD3EE3@6D3:AEFEAD#*366D7EE7E8ADF:7>A53>63F357@F7D5A??3
E7B3D3F76>;EF
@3F;H7BADF KAGD3EE3@6D3BADF6783G>F;E
7BD753F76;@ strategy-class NetworkTopologyStrategy
7BD753F76;@ strategy-option DC1:2;DC2:2
=7KEB357BD7PJ ;8KAG@776FAE7>75F3BD7PJAF:7DF:3@F:76783G>FA@7gsg8AD
KAGDE5:7?3E
 ,7EF3DF!'-
#?BADF3@F
7BD753F76;@.:7 strategy-class 3@6 strategy-option ABF;A@E?GEF
?3F5:F:7D7B>;53F;A@835FADF:3FKAGE7FI:7@5D73F;@9ADGB63F;@9KAGD3EE3@6D3
E5:7?3E
Con'guring TLS
78AD7EF3DF;@9KAGD3EE3@6D3@A67EKAG?GEF5A@P9GD7F:7.&-ABF;A@E
3EE3@6D3-;67
D73F73EE3@6D3@A6757DF;P53F7
2AG53@7;F:7D5D73F7A@757DF;P53F7B7D3EE3@6D3@A67AD5D73F7A@>KA@757DF;P53F78AD3>>A8KAGD
3EE3@6D3@A67E
/E7 keytoolI:;5:;EB3DFA8F:7$%FAA>E7FFA5D73F7KAGD57DF;P53F7
Example
$ keytool -genkey -keyalg RSA -alias cassandranode -keystore keystore.node -storepass
cassandra -keypass cassandra -validity 36500 -dname "CN=192.168.2.1, OU=None, O=None, L=None,
C=None"
# will create keystore.node file
$ keytool -export -alias cassandranode -file cassandranode.cer -keystore
A@P9GD73@JF7D@3>3EE3@6D3
!7@7EKE'A4;>7-7DH;57E7B>AK?7@F!G;67
keystore.node # password to use: cassandra
# will create cassandranode.cer file
$ keytool -import -v -trustcacerts -alias cassandranode -file cassandranode.cer -keystore
truststore.node
# new password: cassandra
# will create create truststore.node file
*D7B3D7=7KEFAD7P>78AD53EE3@6D35A@P9GD3F;A@P>753EE3@6D3K3?>
ABK3@6E75GD7F:7=7KEFAD7P>7 keystore.node;@3@3BBDABD;3F7B3F:;@KAGDEKEF7?
Example
# copy keystore.node file in <cassandra home path>/conf/cassandra.yaml
$ cp keystore.node .keystore
# for Cassandra server side (client_encryption config)
# restrict access to this file
$ chmod 600 .keystore
-7FGB3EE3@6D35>;7@F7@5DKBF;A@;@53EE3@6D3K3?>P>7
# enable or disable client/server encryption.
client_encryption_options:
enabled: true ## to be changed
# If enabled and optional is set to true encrypted and unencrypted connections are
handled.
optional: false
keystore: conf/.keystore ## to be changed
keystore_password: cassandra ## to be changed
# require_client_auth: false
# Set trustore and truststore_password if require_client_auth is true
# truststore: conf/.truststore
# truststore_password: cassandra
# More advanced defaults below:
# protocol: TLS
# algorithm: SunX509
# store_type: JKS
# cipher_suites:
[TLS_RSA_WITH_AES_128_CBC_SHA,TLS_RSA_WITH_AES_256_CBC_SHA,TLS_DHE_RSA_WITH_AES_128_CBC_SHA,TLS_DHE_RSA_WITH_AES_256_CBC_SHA,TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA,TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA]
2AG53@@AIEF3DF3>>A8KAGD3EE3@6D3@A67E3@6GE7+&-"FABDAH;E;A@F:7?
+&-".&-5A@P9GD3F;A@
#8KAGE7FGB4AF:3@G@E75GD763@63E75GD763EE3@6D3BADFKAG53@GE7+&-"A@F:7G@E75GD76
3EE3@6D3BADF3E;E"AI7H7D;8KAG@776FAGE7+&-"A@3E75GD763EE3@6D3BADFKAG?GEF
7JBADFF:753EE3@6D3@A67E57DF;P53F7FA3@AF:7D8AD?3F
$ keytool -importkeystore -srckeystore keystore.node -destkeystore cassandranode.p12
-deststoretype PKCS12 -srcstorepass cassandra -deststorepass cassandra
# will create cassandranode.p12 file
$ openssl pkcs12 -in cassandranode.p12 -nokeys -out cassandranode.cer.pem -passin
pass:cassandra
# will create cassandranode.cer.pem file
$ openssl pkcs12 -in cassandranode.p12 -nodes -nocerts -out cassandranode.key.pem -passin
pass:cassandra
# will create cassandranode.key.pem file
A@P9GD73@JF7D@3>3EE3@6D3
!7@7EKE'A4;>7-7DH;57E7B>AK?7@F!G;67
+&-".&-E7FGB
Using a cqlshrc 1le
D73F735C>E:D5P>7;@ /home/user home/.cassandra/cqlshrc
[ssl]
certfile = <path to certificate>/cassandranode.cer.pem
validate = false ;; Optional, true by default.
(AF7#8 validate ;E7@34>76F:7:AEF;@F:757DF;P53F7;E5A?B3D76FAF:7:AEFA8F:7?35:;@7FA
I:;5:;F;E5A@@75F76FAH7D;8KF:3FF:757DF;P53F7;EFDGEF76
Using an environment variable
2AG?GEFE7FF:7 SSL_CERTFILE 3@6 SSL_VALIDATE 7@H;DA@?7@FH3D;34>7E
$ export SSL_CERTFILE=<path to certificate>/cassandranode.cer.pem
$ export SSL_VALIDATE=true
+&-".&-5A@@75F;A@
.AEF3DF+&-"KAG?GEF>A9;@I;F:GE7D cassandra 6783G>FB3EEIAD6 cassandra
<apache-cassandra-4.0 home>$ bin/cqlsh --ssl -u cassandra -p cassandra <cassandra node IP
address> <native port, default is 9042>
!'-E;67
!'-.&-5A@P9GD3F;A@
Import the Cassandra node certi1cate
2AG53@;?BADFF:7 cassandranode.cer P>75D73F7634AH7;@A@7A8FIAI3KE
M #?BADFF:73EE3@6D3@A6757DF;P53F7;@FA3EB75;P5!'-P>7 Note: #8KAGGE7F:;E?7F:A6KAGIA@F
4734>7FAGE7EA?7873FGD7EA8F:7@AF;P53F;A@*#F:3F@776EFAD736AF:7D57DF;P53F7E
M #?BADFF:757DF;P53F7;@FAF:7$3H3$%$,E75GD;FKP>7F:3FD7E;67E;@F:7$%KAGGE7FAEF3DF!'-
Java JDK home/jre/lib/security/cacerts
Using a speci1c GMS Certi1cate 1le
.A;?BADFF:73EE3@6D357DF;P53F7FA3EB75;P5$3H35>;7@FFDGEFEFAD7P>78AD!'-GE7 keytool
I:;5:;EB3DFA8F:7$%FAA>E7F
<GMS client side>$ keytool -import -v -trustcacerts -alias cassandranode -file
cassandranode.cer -keystore client.truststore
# password: cassandra
Modify launcher.xml
A@P9GD73@JF7D@3>3EE3@6D3
!7@7EKE'A4;>7-7DH;57E7B>AK?7@F!G;67 
66F:78A>>AI;@9B3D3?7F7DEFA launcher.xml @AF7F:3FF:7 debugtls B3D3?7F7DI:;5:;EGE768AD
674G99;@9;EABF;A@3>
<parameter name="cassandranodes_truststore" displayName="cassandratrustore" mandatory="true"
hidden="true" readOnly="true">
<description><![CDATA[Certificates trustStore for Cassandra nodes]]></description>
<valid-description><![CDATA[]]></valid-description>
<effective-description/>
<format type="string" default="-Djavax.net.ssl.trustStore=client.truststore" />
<validation></validation>
</parameter>
<parameter name="cassandranodes_trustStorePassword" displayName="cassandratrustStorePassword"
mandatory="true" hidden="true" readOnly="true">
<description><![CDATA[Certificates trustStore password for Cassandra
nodes]]></description>
<valid-description><![CDATA[]]></valid-description>
<effective-description/>
<format type="string" default="-Djavax.net.ssl.trustStorePassword=cassandra" />
<validation></validation>
</parameter>
<parameter name="debugtls" displayName="Debug TLS" mandatory="true" hidden="true"
readOnly="true">
<description><![CDATA[Add debug mode for SSL]]></description>
<valid-description><![CDATA[]]></valid-description>
<effective-description/>
<format type="string" default="-Djavax.net.debug=ssl" />
<validation></validation>
</parameter>
Using a global Certi1cate 1le
AD1;@6AIE66 Certi1cates trustStore for Cassandra nodes FAF:7?3;@$, lib/security/
cacerts P>7
$ sudo keytool -importcert -file cassandranodes.cer -alias cassandranodes -keystore
$JAVA_HOME/jre/lib/security/cacerts -storepass changeit
2AG6A@AF@776FA5:3@97 launcher.xml I:7@GE;@939>A43>7DF;P53F7P>7
-7FF:7.&-D7>3F76!'-ABF;A@E
-7FF:7!'- @3F;H7BADF 3@6 E75GD76 3BB>;53F;A@ABF;A@EFAF:7H3>G7EE:AI@:7D7
[cassandra]
nodes = <your Cassandra hosts or IP addresses for the local datacenter (comma-separated list)>
native-port = 9142
secured = true
keyspace-prefix = <if you need to select a prefix other than the default one ('''gsg''') for
your schemas>
ADH7DE;A@EBD;ADFA!'-KAG3>EA@776FA5A@P9GD7F:78A>>AI;@9ABF;A@E
strategy-class = NetworkTopologyStrategy
strategy-option = DC1:2;DC2:2
A@P9GD73@JF7D@3>3EE3@6D3
!7@7EKE'A4;>7-7DH;57E7B>AK?7@F!G;67 
Authentication on External Cassandra
#?BADF3@F
-GBBADFE3EE3@6D3H7DE;A@J3@6:;9:7DN
.:78A>>AI;@9EF7BE3D7BD7D7CG;E;F7EBD;ADFA7@34>;@93GF:7@F;53F;A@
A@P9GD753EE3@6D3K3?> ;>7
 -FABF:73EE3@6D3@A67E
 6;FF:7 conf/cassandra.yaml P>78AD3>>@A67E
 @EGD7F:3F cluster_name ;E;67@F;53>8AD3>>@A67E
 &A53F7F:7E776@A67E.:;E;EF:7P7>68AD3>>3EE3@6D3@A67E5:3@97;F355AD6;@9>K
M ADF:7E776@A67F:;EI;>>47;FEAI@BADF
M ADF:7@A@E776@A67EF:;EI;>>47F:7#*366D7EEA8F:7E776@A67
 @EGD7F:3F listen_address ;E5:3@9768DA? 127.0.0.1 FAF:75GDD7@F#*366D7EE
 @EGD7F:3F rpc_address ;E5:3@9768DA? 127.0.0.1 FAF:75GDD7@F#*366D7EE
 &A53F7F:7 authenticator P7>6
 :3@97F:7H3>G78DA? AllowAllAuthenticator FA PasswordAuthenticator
authenticator: PasswordAuthenticator
Note: .:78G>>5>3EE@3?7;E org.apache.cassandra.auth.PasswordAuthenticator
 -3H7F:7P>7
 ,7B73FF:7E7EF7BEA@735:7JF7D@3>3EE3@6D3;@EF3@57
 -F3DF3>>F:753EE3@6D3@A67E
J75GF7+&A??3@6E
 )@F:77JF7D@3>3EE3@6D3GE;@9F:75C>E:GF;>;FK;@5>G676I;F:3EE3@6D35D73F7KAGDGE7D@3?73@6
B3EEIAD68AD one A8F:7@A67E@AF3>>.:78A>>AI;@97J3?B>7E:AIEF:75D73F;A@A83 genesys GE7D
I;F: genesys B3EEIAD6
$ cqlsh -u cassandra -p cassandra cassandra_host cassandra_port
> CREATE USER genesys WITH PASSWORD 'genesys';
> LIST USERS;
name | super
-----------+-------
genesys | False
cassandra | True
A@P9GD73@JF7D@3>3EE3@6D3
!7@7EKE'A4;>7-7DH;57E7B>AK?7@F!G;67 
#?BADF3@F
.:76783G>FEGB7DGE7D;E cassandra I;F:B3EEIAD6 cassandra.:;EEF7B;ED7CG;D76FA475A?B>7F76A@A@>K
A@77JF7D@3>3EE3@6D3;@EF3@57#FI;>>F:7@47D7B>;53F76FAF:7AF:7D@A67E
 )@1;@6AIE)-3EE3@6D3H7DE;A@EAD:;9:7DD7B>357
$ cqlsh -u cassandra -p cassandra cassandra_host cassandra_port
I;F:
{path_to_cassandra}\bin>{path_to_python}\python.exe cqlsh cassandra_host -u cassandra -p
cassandra
 -7FF:7ABF;A@EA8 cqlsh 478AD7B3D3?7F7DEADE7FKAGDBKF:A@B3F:;@*."7@H;DA@?7@FH3D;34>7
>;=7F:;E
PATH={path_to_python};%PATH%
.:7D78AD7KAG53@>3G@5:F:7 cqlsh E5D;BFGE;@9F:7 cqlsh.bat 5A??3@6
cqlsh.bat -u cassandra –p cassandra cassandra_host
/E;@9F:76783G>F53EE3@6D3BADFA8 native_transport_port 6783G>F;E 9042)F:7DI;E7KAGI;>>@776
FA366F:7BADFB3D3?7F7DFAF:7 cqlsh E5D;BF
 :3@97F:75A@E;EF7@5K>7H7>A8F:7 system_auth F34>73@63BB>KF:7 CREATE 5A??3@634AH7
355AD6;@9FAF:73EE3@6D3H7DE;A@
$ cqlsh -u cassandra -p cassandra cassandra_host cassandra_port
> ALTER KEYSPACE system_auth WITH REPLICATION = { 'class' : 'NetworkTopologyStrategy',
'DC1' : 2, 'DC2' : 2 };
:3@97F:7,7B>;53F;A@ 35FADAD-FD3F79K
#8KAGGE73GF:7@F;53F;A@I;F:3EE3@6D3F:7 system_auth 3EE3@6D3EKEF7?F34>7:3E3D7B>;53F;A@
835FADA8#@F:;EE57@3D;AA@>KA@7@A67;E3I3D7A83GF:7@F;53F;A@
#8KAG5:3@97F:7EFD3F79K5>3EEADF:7D7B>;53F;A@835FADKAG?GEF3>EAD7BADFF:;E5:3@978AD3>>
@A67EA8F:75>GEF7D3E67E5D;476:7D7
M -F3DF3>>3EE3@6D3@A67E3@65:3@97F:7D7B>;53F;A@835FADFA
cqlsh -u cassandra -p cassandra
ALTER KEYSPACE "system_auth" WITH REPLICATION = {'class' : 'SimpleStrategy',
'replication_factor' : 3};</source>
M -F3DFD7B3;DF3E=A@3>>@A67E
nodetool repair
M -7>75F3@A67AF:7DF:3@F:7PDEFA@78ADF7EF;@9
cqlsh -u cassandra -p cassandra
A@P9GD73@JF7D@3>3EE3@6D3
!7@7EKE'A4;>7-7DH;57E7B>AK?7@F!G;67 
-7FA@P9GD3F;A@)BF;A@E
 #@A@P9GD3F;A@'3@397D>A53F73@6AB7@KAGD!'-BB>;53F;A@A4<75F
 )@F:7)BF;A@EF34 [cassandra-authentication-security] E75F;A@E7FF:78A>>AI;@9ABF;A@EI;F:F:7
E3?7GE7D@3?73@6B3EEIAD6F:3FKAG<GEF5D73F76A@F:77JF7D@3>3EE3@6D3
M username8AD7J3?B>7 genesys
M password8AD7J3?B>7 genesys
 Restart GMS.:7*7>ABE3@6"75FAD5>;7@FE5A@@75FFAF:77JF7D@3>3EE3@6D3GE;@9F:7>A9;@3@6
B3EEIAD6
Authorization on External Cassandra
/B63F76;@
#?BADF3@F
-GBBADFE3EE3@6D3H7DE;A@J3@6:;9:7DN
!'-
-F3DF;@9;@KAGA@>K@776FA9D3@FB7D?;EE;A@E;@ one A8F:7@A67E@AF3>>8ADF:7 genesys
GE7D
$ cqlsh -u cassandra -p cassandra cassandra_host cassandra_port
> LIST USERS; // or LIST ROLES; on cassandra 4.0 versions
name | super
-----------+-------
genesys | False
cassandra | True
> LIST ALL PERMISSIONS OF genesys;
(0 rows)
> CREATE KEYSPACE gsg WITH REPLICATION = { 'class' : 'NetworkTopologyStrategy', 'DC1' : 2,
'DC2' : 2 };
> CREATE KEYSPACE gsg_dd WITH REPLICATION = { 'class' : 'NetworkTopologyStrategy', 'DC1' : 2,
'DC2' : 2 };
> GRANT CREATE ON KEYSPACE gsg TO genesys;
> GRANT MODIFY ON KEYSPACE gsg TO genesys;
> GRANT SELECT ON KEYSPACE gsg TO genesys;
> LIST ALL PERMISSIONS OF genesys;
username | resource | permission
----------+----------------+------------
genesys | <keyspace gsg> | CREATE
genesys | <keyspace gsg> | SELECT
genesys | <keyspace gsg> | MODIFY
(3 rows)
A@P9GD73@JF7D@3>3EE3@6D3
!7@7EKE'A4;>7-7DH;57E7B>AK?7@F!G;67 
> GRANT CREATE ON KEYSPACE gsg_dd TO genesys;
> GRANT MODIFY ON KEYSPACE gsg_dd TO genesys;
> GRANT SELECT ON KEYSPACE gsg_dd TO genesys;
> LIST ALL PERMISSIONS OF genesys;
username | resource | permission
----------+-------------------+------------
genesys | <keyspace gsg> | CREATE
genesys | <keyspace gsg> | SELECT
genesys | <keyspace gsg> | MODIFY
genesys | <keyspace gsg_dd> | CREATE
genesys | <keyspace gsg_dd> | SELECT
genesys | <keyspace gsg_dd> | MODIFY
(6 rows)
07DE;A@E*D;ADFA
8F7D5D73F;@9F:73GF:7@F;53F;A@KAG?GEF7@34>73GF:AD;L3F;A@3@65D73F7=7KEB357E
A@P9GD7F:753EE3@6D3K3?> ;>7E
 6;FF:7 conf/cassandra.yaml P>78AD3>>@A67E&A53F7F:7 authorizer P7>6
 :3@97F:7H3>G78DA? AllowAllAuthorizer FA CassandraAuthorizer
authorizer: CassandraAuthorizer
Note: .:78G>>5>3EE@3?7;E org.apache.cassandra.auth.CassandraAuthorizer
 -3H7F:7P>7
 ,7B73FF:7E7EF7BEA@735:7JF7D@3>3EE3@6D3;@EF3@57
 -F3DF3>>F:753EE3@6D3@A67E
J75GF7+&A??3@6E
.A3GF:AD;L735F;A@EA@F:7=7KEB357KAG?GEFPDEF5D73F7F:7=7KEB357EF:7@9D3@FF:7?
B7D?;EE;A@E;@ one A8F:7@A67E@AF3>>
 )@F:77JF7D@3>3EE3@6D3GE;@9F:7 cqlsh GF;>;FK;@5>G676I;F:3EE3@6D35D73F7KAGD=7KEB357E;@
A@7A8F:7@A67E.:78A>>AI;@97J3?B>7E:AIEF:7 gsg 3@6 gsg_dd =7KEB357E
#?BADF3@F
.:;EEF7B;ED7CG;D76FA475A?B>7F76A@A@>KA@77JF7D@3>3EE3@6D3;@EF3@57#FI;>>F:7@47D7B>;53F76FAF:7
AF:7D@A67E
 -7FB7D?;EE;A@EFA!'-=7KEB357E;@3EE3@6D3GE;@9+&-"7J3?B>78AD53EE3@6D3:3@97F:7
5A@E;EF7@5K>7H7>A8!'-=7KEB357E3@63BB>KF:7+&5A??3@6EE:AI@47>AI355AD6;@9FAF:7
3EE3@6D3H7DE;A@
$ cqlsh -u cassandra -p cassandra cassandra_host cassandra_port
A@P9GD73@JF7D@3>3EE3@6D3
!7@7EKE'A4;>7-7DH;57E7B>AK?7@F!G;67 
> LIST USERS;
name | super
-----------+-------
genesys | False
cassandra | True
> LIST ALL PERMISSIONS OF genesys;
(0 rows)
> CREATE KEYSPACE gsg WITH REPLICATION = { 'class' : 'NetworkTopologyStrategy', 'DC1' :
2, 'DC2' : 2 };
> CREATE KEYSPACE gsg_dd WITH REPLICATION = { 'class' : 'NetworkTopologyStrategy', 'DC1'
: 2, 'DC2' : 2 };
> GRANT ALTER ON KEYSPACE gsg TO genesys;
> GRANT CREATE ON KEYSPACE gsg TO genesys;
> GRANT DROP ON KEYSPACE gsg TO genesys;
> GRANT MODIFY ON KEYSPACE gsg TO genesys;
> GRANT SELECT ON KEYSPACE gsg TO genesys;
> LIST ALL PERMISSIONS OF genesys;
username | resource | permission
----------+----------------+------------
genesys | <keyspace gsg> | CREATE
genesys | <keyspace gsg> | ALTER
genesys | <keyspace gsg> | DROP
genesys | <keyspace gsg> | SELECT
genesys | <keyspace gsg> | MODIFY
(5 rows)
> GRANT ALTER ON KEYSPACE gsg_dd TO genesys;
> GRANT CREATE ON KEYSPACE gsg_dd TO genesys;
> GRANT DROP ON KEYSPACE gsg_dd TO genesys;
> GRANT MODIFY ON KEYSPACE gsg_dd TO genesys;
> GRANT SELECT ON KEYSPACE gsg_dd TO genesys;
> LIST ALL PERMISSIONS OF genesys;
username | resource | permission
----------+-------------------+------------
genesys | <keyspace gsg> | CREATE
genesys | <keyspace gsg> | ALTER
genesys | <keyspace gsg> | DROP
genesys | <keyspace gsg> | SELECT
genesys | <keyspace gsg> | MODIFY
genesys | <keyspace gsg_dd> | CREATE
genesys | <keyspace gsg_dd> | ALTER
genesys | <keyspace gsg_dd> | DROP
genesys | <keyspace gsg_dd> | SELECT
genesys | <keyspace gsg_dd> | MODIFY
(10 rows)
 66F:7GE7DFA3EE3@6D34KGE;@9F:7E3?7+&-"5A??3@6EF:3@8ADGF:7@F;53F;A@
 ,7EF3DF!'-.:7*7>ABE3@6"75FAD5>;7@FE5A@@75FFAF:77JF7D@3>3EE3@6D33@63D73GF:AD;L76FA
?3@397F:7!'-=7KEB357Egsg 3@6 gsg_dd
;@3>-F7BE
M #@F:7!'-BB>;53F;A@-75GD;FKE75F;A@&A9)@E-2-.'55AG@F
M .:7F;?7LA@78AD3>>@A67E?GEF47;67@F;53>'3=7EGD7F:3FKAGEK@5:DA@;L7F:7F;?7478AD7F7EF;@9
A@P9GD73@JF7D@3>3EE3@6D3
!7@7EKE'A4;>7-7DH;57E7B>AK?7@F!G;67 
Repairing Cassandra Nodes
#?BADF3@F
AD67F3;>76BDA576GD7E34AGFD7B3;D;@9@A67ED787DFAF:7 )Q53>3F3-F3J
6A5G?7@F3F;A@
55AD6;@9FAF:73F3-F3J6A5G?7@F3F;A@D7B3;D;@9@A67E;EB3DFA8KAGD:AGE7=77B;@9-5:76G>7
F:;EAB7D3F;A@D79G>3D>K3E67F3;>76;@ 1:7@FADG@3@F;7@FDABKD7B3;D
AD67F3;>76;@8AD?3F;A@34AGF5A??3@6EE77 '3@G3>D7B3;D@F;7@FDABKD7B3;D
A@AFD7EF3DF3;@EF3@576AI@8AD387I:AGDE
#83;@EF3@57;E6AI@8AD387I:AGDE6A@AFD7EF3DF;FFA<A;@F:75>GEF7D#8KAG6AEAKAGI;>>
5D73F7EA?7;@5A@E;EF7@5;7E#8KAG6A@AF?;@65D73F;@9387I;@5A@E;EF7@5;7E3@6;8F:7@G?47DA8
;@HA>H76;@EF3@57E;E?3J38G>>5>GEF7DD7B3;DI;>>D7EA>H7F:7;@5A@E;EF7@5;7E#8KAG6A@F
B7D8AD?38G>>5>GEF7DD7B3;DEA?7;EEG7EI;>>D7?3;@
A@AFD7B3;D;@EF3@57EF:3F3D76AI@8ADFAA>A@9
#8F:7;@EF3@57E3D76AI@8ADFAA>A@93EEG?;@9F:3F7@AG9:;@EF3@57E3D7B3DFA8F:75>GEF7D
F:75>GEF7DE:AG>6EGDH;H7F:7673F:A8EA?7;@EF3@57E AD7J3?B>7;8F:7D7B>;53F;A@835FAD;E
ID;FF7@3E, F:7@:3H;@9;@EF3@57E3>>AIE;@EF3@57FA6;7ADFA47675A??;EE;A@76E387>K
I;F:AGF;?B35F;@9F:75>GEF7D63F3E7F.:;E3>>AIE;@F7D?;FF7@F;EEG7EA@3;@EF3@573E>A@93EF:7
+/),/';E3H3;>34>7I:;5:;E, ;@F:;E7J3?B>7
#8F:7CGADG?;E3H3;>34>7KAGE:AG>6D7?AH7F:76736@A67E8DA?F:75>GEF7D;@35>73@I3K478AD7
7H7@FG3>>KD7<A;@;@9
.AD7?AH7F:76736@A67E5>73@>KKAG53@FDKF:78A>>AI;@9BDA576GD7
# check if some removal in progress (removenode status)
$ nodetool removenode status
...
# check if there are dead nodes (describecluster)
$ nodetool describecluster
...
# check token id for dead nodes (status)
$ nodetool status
Datacenter: DC2
===============
Status=Up/Down |/ State=Normal/Leaving/Joining/Moving
-- Address Load Tokens Owns Host ID Rack
UN 192.168.XXX.XXX 155.97 KB 256 ? a5303996-e61d-4463-a5cd-bde36c8762f5 RAC2
UN 192.168.XXX.XXX 165.72 KB 256 ? 17c8c1d8-08bc-489b-85eb-92bc9bc0dedb RAC1
Datacenter: DC1
===============
Status=Up/Down |/ State=Normal/Leaving/Joining/Moving
-- Address Load Tokens Owns Host ID Rack
A@P9GD73@JF7D@3>3EE3@6D3
!7@7EKE'A4;>7-7DH;57E7B>AK?7@F!G;67 
UN 192.168.XXX.XXX 116.01 KB 256 ? 2c75bf48-66ea-47fb-a4f4-0664c82060cb RAC1
UN 192.168.XXX.XXX 101.8 KB 256 ? 3a61a518-b6e1-42f1-90f5-f8349f66fd3d RAC2
# remove the dead token (removenode) using the *Host ID* field of the down node to be removed
$ nodetool removenode <token>
...
# If this command hangs for more than a minute cancel it (for example press Ctrl-C) and run:
$ nodetool removenode force
DA?F:;EBA;@FF:7D7?AH76;@EF3@57;E@A>A@97DB3DFA85>GEF7D2AG53@@AI67>7F7;FE63F3
A@6;E=.A366F:7;@EF3@57435=;@FAF:75>GEF7D>;=73@7I@A67D7EF3DF;F
#?BADF3@F
K6783G>FF:763F38A>67D5A@F3;@E3>>63F3D7>3F76FAF:7;@EF3@57D7B>;5363F3
5A??;F>A93@6?AD7)F:7D8A>67DE?;9:F478AG@6G@67DF:7DAAF data 8A>67D2AG
53@67>7F73>>F:75A@F7@FA8F:763F38A>67D
Frequently Asked Questions
.:7D7>73E7;@FDA6G57E3@;?BADF3@F5:3@97A83EE3@6D36D;H7D
1:3F;EF:7E;9@;P53@57A8366;@93>>F:7@A67E#*366D7EE7E;@F:7@A67E75F;A@
A8F:73EE3@6D3ABF;A@
.:76D;H7DGE764K!'-FA5A@@75FFA3EE3@6D3EGBBADFEE7FF;@9?G>F;B>73EE3@6D3;@EF3@57E
M ADH7DE;A@EA>67DF:3@F:7E7;@EF3@57E3D7GE763E3EE3@6D35AAD6;@3FADE#8A@7;@EF3@57
6;7EF:76D;H7D3GFA?3F;53>>KEI;F5:7EFAF:7@7JF3EE3@6D3;@EF3@57F:3F;EGE763E5AAD6;@3FAD
M -F3DF;@9;@AF:7D3EE3@6D3;@EF3@57EF:3F47>A@9FAE3?73F37@F7D3D73GFA?3F;53>>K
67F75F76#8A@7A8F:7?6;7EF:76D;H7D5A@@75FEFA3>>F:767F75F763EE3@6D3;@EF3@57E;@5>G6;@9
F:AE7F:3F3D7@AF67P@76;@F:7!'-ABF;A@E
3@#366A@>KA@7E776@A67;@B>357A83>>F:7@A67E#*366D7EE7E;@F:7@A67
E75F;A@A8F:73EE3@6D3ABF;A@
27E"AI7H7D366;@9A@>KA@7E776@A67?73@EF:3F!'-I;>>@AF4734>7FAEF3DF;8F:;E;@EF3@57;E
6AI@
M ADH7DE;A@EA>67DF:3@F:;E3>EA?73@EF:3F38F7D35ADD75F!'-EF3DF;8KAGD3EE3@6D3@A67
6;7E!'-I;>>6;7FAA4753GE7;F53@D735:=@AI@3EE3@6D3;@EF3@57EA@>K
M -F3DF;@9;@!'-I;>>FDK5A@@75F;A@FAAF:7D67F75F763EE3@6D3;@EF3@57EF:3F47>A@9FAE3?7
3F37@F7D
A@P9GD73@JF7D@3>3EE3@6D3
!7@7EKE'A4;>7-7DH;57E7B>AK?7@F!G;67 
'K!'-BB>;53F;A@;E@AFEF3DF;@9GBI:7@A@7@A67:AEFE7DH7D;E;@:G@9AD
6AI@EF3F7I:3F53@473B7D?3@7@FPJ8ADF:;E;EEG7
!7@7EKED75A??7@6EF:3FKAGGB9D367FA.:;EE57@3D;A:3E477@F7EF763@6;F6A7E@AF
D7BDA6G57EF3DF;@9;@(AF7F:3FF:;ED7>73E73>EA366EAF:7D873FGD7E>;=73E75GD76
5A@@75F;A@8DA?!'-FA3EE3@6D3
A@P9GD73@JF7D@3>3EE3@6D3
!7@7EKE'A4;>7-7DH;57E7B>AK?7@F!G;67 