### Question:
ShardInfo { @Override public int hashCode() { return new HashCodeBuilder() .append(concurrencyToken).append(parentShardIds).append(shardId).append(streamIdentifierSerOpt.orElse("")).toHashCode(); } ShardInfo(@NonNull final String shardId,
            final String concurrencyToken,
            final Collection<String> parentShardIds,
            final ExtendedSequenceNumber checkpoint);  ShardInfo(@NonNull final String shardId,
            final String concurrencyToken,
            final Collection<String> parentShardIds,
            final ExtendedSequenceNumber checkpoint,
            final String streamIdentifierSer); List<String> parentShardIds(); boolean isCompleted(); @Override int hashCode(); @Override boolean equals(Object obj); static String getLeaseKey(ShardInfo shardInfo); static String getLeaseKey(ShardInfo shardInfo, String shardIdOverride);  }### Answer:
@Test public void testPacboyShardInfoSameHashCode() { ShardInfo equalShardInfo = new ShardInfo(SHARD_ID, CONCURRENCY_TOKEN, parentShardIds, ExtendedSequenceNumber.LATEST); assertTrue("Shard info objects should have same hashCode for the same arguments", equalShardInfo.hashCode() == testShardInfo.hashCode()); }