Skip to content

v1.5.0-RC1

Pre-release
Pre-release
Compare
Choose a tag to compare
@jeroiraz jeroiraz released this 16 Jun 16:30
· 431 commits to master since this release
24cce79

Changelog

[v1.5.0-RC1] - 2023-06-16

Bug Fixes

  • build/Dockerfile.immuadmin to reduce vulnerabilities
  • build/Dockerfile.immuclient to reduce vulnerabilities
  • build/Dockerfile.immuadmin to reduce vulnerabilities
  • build/Dockerfile.rndpass to reduce vulnerabilities
  • build/Dockerfile.full to reduce vulnerabilities
  • modify tests for new object db initialisation
  • build/Dockerfile.full to reduce vulnerabilities
  • build/Dockerfile.rndpass to reduce vulnerabilities
  • table id generation
  • build/Dockerfile.immuclient to reduce vulnerabilities
  • docs: bump golang.org/x/net to 0.7.0 in docs and test pkg
  • embedded/ahtree: correct calculation of payload offset
  • embedded/appendable: proper closing of non-required chunks
  • embedded/document: support nil docs
  • embedded/document: proper column renaming
  • embedded/document: assign correct revision number
  • embedded/document: close readers before updating document
  • embedded/document: id field conversion
  • embedded/document: proper handling of deleted documents
  • embedded/document: validate doc is properly initialized
  • embedded/document: validate doc is properly initialized
  • embedded/sql: do not force columns to have max key length when unspecified
  • embedded/sql: include explicit close into sqlTx options
  • embedded/sql: multi-row conflict handling
  • embedded/sql: implicit conversion within expressions
  • embedded/sql: consider 0 as no limit
  • embedded/sql: parsing of exists stmt
  • embedded/sql: like operator supporting null values
  • embedded/sql: crash when RowReader.Read() returns error
  • embedded/sql: proper handling of parameters in row readers
  • embedded/store: force snapshot to include mandatory mvcc changes
  • embedded/store: ensure snapshot is closed for read-only txs
  • embedded/store: integrity checks covering empty values
  • embedded/store: avoid dead-lock when exporting tx with external commit allowance mode
  • embedded/tbtree: fix error comparison
  • embedded/tbtree: rollback to the most recent snapshot when insertion fails
  • embedded/tbtree: fix snapshot getKeyWithPrefix
  • embedded/tbtree: proper kv validation
  • embedded/tbtree: fix snapshot getKeyWithPrefix
  • go.mod: bump go version to 1.17 in go.mod
  • helm: set securityContext and podSecurityContext at correct location
  • pkg/api: create collection endpoint with path parameter
  • pkg/api: fix and implement LIKE and NOT_LIKE operator when querying documents
  • pkg/client: ensure ticker is properly stopped
  • pkg/client: return error when verifiedGet operation fails
  • pkg/database: read-only document API for replicas
  • pkg/database: skip eof error during scan
  • pkg/database: read from err channel
  • pkg/database: wrap propagated context
  • pkg/database: fix truncation and contemplate entry-less txs
  • pkg/replicator: check stream is properly initialized
  • pkg/server: do not set trailer metadata when replication is done with bidirectional streamming
  • pkg/server: ensure error propagation when sending headers
  • pkg/server: use grpc interceptors with grpc proxy
  • pkg/server: request explicit close when creating a rw sql tx
  • pkg/server: ensure tx is closed upon error
  • pkg/server: close document readers before cancelling txs
  • pkg/server: thread-safe doc reader during session handling
  • pkg/stream: handle the case when message fits in a single chunk
  • pkg/truncator: adjust plan logic and contemplate empty txs
  • pkg/verification: document comparison with proto equals
  • push.yml: update min go version

Changes

  • Add reformatting of protobuf file on build/codegen
  • rename DocumentBulkInsert to DocumentInsertMany
  • Update build/RELEASING.md file
  • allow multiple order by clauses
  • replace schemav2 with protomodel in truncator test
  • handle no more doc error inside response in search
  • use sys/unix package
  • remove docker test provider
  • update document with id if not nil
  • use gosec action
  • add updatecollection api
  • copy document catalogue when truncating db
  • add DocumentFindOneAndUpdate api
  • wait for immudb to get initialized
  • add test case for uncommitted tx not increasing table count
  • pass transaction to upsert function
  • check invalid search id in search request
  • add monotically increasing number to doc id generation
  • add document audit api
  • change DocumentFindOneAndUpdate to DocumentUpdate
  • return sql reader on document search
  • add order by clause in search
  • use sql statement for delete than raw query
  • add ReadN method to document reader
  • add documentReader iterator to read documents
  • remove initial swagger support
  • exclude generated code from coverage
  • exclude generated code from coverage
  • add unique search id for paginated readers
  • fix TestFloatSupport test case
  • simplified codegen
  • fix tests
  • change DeleteTableStmt to DropTableStmt
  • generate proto requests for DocumentDelete api
  • return ErrNoMoreDocuments instead of sql.ErrNoMoreRows
  • add DocumentDelete api
  • add default size for document reader lru cache
  • add lru cache for paginated readers
  • fix merge issues
  • add pagination support when fetching documents
  • fix failing verification test
  • increase test coverage for document engine
  • add bulk insert api
  • TruncateDatabase endpoint should use the same ongoing Truncator if present
  • address review comment
  • add go-acc and goveralls to ext-tools folder
  • delete columns on table deletion
  • check for column before adding index on collection update
  • add option for non unique indexes on collection
  • ci: improve notifications
  • cmd/immuadmin: flag to specify the usage of embedded values
  • cmd/immuadmin: add truncate cmd to immuadmin
  • cmd/immuadmin: modify truncation settings schema
  • deps: bump golang.org/x/crypto
  • deps: bump github.com/jaswdr/faker from 1.4.3 to 1.16.0
  • deps: bump securego/gosec from 2.14.0 to 2.15.0
  • deps: bump github.com/codenotary/immudb
  • deps: bump github.com/influxdata/influxdb-client-go/v2
  • deps: bump github.com/golang/protobuf from 1.5.2 to 1.5.3
  • deps: bump github.com/rogpeppe/go-internal from 1.8.0 to 1.9.0
  • deps: bump github.com/lib/pq from 1.10.7 to 1.10.9
  • deps: bump github.com/lib/pq from 1.10.2 to 1.10.7
  • deps: bump golang.org/x/net from 0.8.0 to 0.9.0
  • deps: bump github.com/rs/xid from 1.3.0 to 1.5.0
  • deps: bump github.com/stretchr/testify from 1.8.0 to 1.8.2
  • deps: bump aws-actions/configure-aws-credentials from 1 to 2
  • deps: bump github.com/spf13/cobra from 1.2.1 to 1.6.1
  • deps: bump github.com/grpc-ecosystem/grpc-gateway/v2
  • deps: bump google.golang.org/grpc from 1.46.2 to 1.54.0
  • deps: bump github.com/spf13/viper from 1.12.0 to 1.15.0
  • embedded/ahtree: add inline comments
  • embedded/appendable: fsync freebsd
  • embedded/appendable: automatic file creation only when appending
  • embedded/appendable: use fdatasync when file is preallocated
  • embedded/appendable: file syncing per os
  • embedded/appendable: support file preallocation
  • embedded/appendable: file syncing using fdatasync when available
  • embedded/appendable: minor improvements reading files
  • embedded/appendable: metadats with putBool
  • embedded/document: remove dead-code
  • embedded/document: add float support for doc engine
  • embedded/document: raw document validation
  • embedded/document: improve error handling
  • embedded/document: transactional collection update
  • embedded/document: support null values in indexed attributes
  • embedded/document: retrieval of raw document
  • embedded/document: move source code into dedicated files
  • embedded/document: use onclose callback to close the tx
  • embedded/document: return struct when auditing document history
  • embedded/document: add test to ensure key ordering in document during serialization
  • embedded/document: blob type not yet supported
  • embedded/document: catch key alredy exists error
  • embedded/document: catch tx read conflict error
  • embedded/document: translate table already exists error
  • embedded/document: minor var renaming
  • embedded/document: fix query stmt generator and add tests
  • embedded/document: leverage sqlengine lazy index contraint evaluation
  • embedded/document: binary serialization of doc payload
  • embedded/document: use query limit when searching
  • embedded/document: wip continue with improvements
  • embedded/document: wip continue with improvements
  • embedded/document: wip continue with improvements
  • embedded/document: wip improvements
  • embedded/document: add collection deletion api support
  • embedded/document: minor code simplification
  • embedded/document: add variable length support for multiple types
  • embedded/document: ensure order by clauses are used when deleting and updating
  • embedded/document: improve error messages
  • embedded/document: minor code adjustments
  • embedded/document: transactional collection and document creation
  • embedded/document: improve error messages
  • embedded/document: possibility to specify desc order when querying document history
  • embedded/document: add tests for blob type
  • embedded/document: avoid public dependency on sql
  • embedded/document: add test cases for collection on doc engine
  • embedded/document: change querier from BinBoolExp to CmpBoolExp
  • embedded/document: transactional document creation
  • embedded/document: add document id generation
  • embedded/document: typo in error message
  • embedded/htree: allow creation of empty hash trees
  • embedded/object: add document abstraction
  • embedded/object: add collection/database statements
  • embedded/sql: use read-only txs whenever possible
  • embedded/sql: make sql engine generic for object store
  • embedded/sql: limit and offset boundary validation
  • embedded/sql: minor numeric type adjustments
  • embedded/sql: implicit conversion support in limit and offset clauses
  • embedded/sql: simplified sql tx
  • embedded/sql: return closed sql txs
  • embedded/sql: implicit conversion from varchar to int and float types
  • embedded/sql: upgraded row reader
  • embedded/sql: ddl stmts register catalog mutation
  • embedded/sql: snapshot reuse improvements
  • embedded/sql: lazy index contraint validation
  • embedded/sql: WIP singledb sql engine
  • embedded/sql: transient context
  • embedded/sql: validate total key length at index creation time
  • embedded/sql: extend max key length to 512
  • embedded/sql: cancellable row reader
  • embedded/store: add in-line documentation for store options
  • embedded/store: validate Eh only when integrity checks are not disabled
  • embedded/store: addition of a cache for values
  • embedded/store: consume all tx content even if integrity checks are disabled
  • embedded/store: optional integrity checking when reading values
  • embedded/store: validate Eh only when integrity checks are not disabled
  • embedded/store: inline comments
  • embedded/store: fix typo in inline comment
  • embedded/store: validate gets using filters
  • embedded/store: MVCC read-set with boundaries
  • embedded/store: context propagation
  • embedded/store: mvcc validation only if another tx was processed
  • embedded/store: minor changes after rebasing from master
  • embedded/store: simplified dualproof implementation
  • embedded/store: skipIntegrityCheck parameter when reading data
  • embedded/store: minor code improvement
  • embedded/store: add min limit for truncation frequency
  • embedded/store: use syncSnapshot to validate ongoing txs
  • embedded/store: unify Read and ReadBetween
  • embedded/store: transient context
  • embedded/store: tx header is returned when fully committed
  • embedded/store: api upgrade
  • embedded/store: set ctx as first argument
  • embedded/store: readValueAt and exportTx improvements
  • embedded/store: update ReadBetween
  • embedded/store: contextualized transactions
  • embedded/store: inline comments
  • embedded/store: snapshot reuse improvements
  • embedded/store: set smaller default value for indexing bulk size
  • embedded/store: wip mvcc validations
  • embedded/store: simplified indexer initialization
  • embedded/store: multi-tx unsafe mvcc
  • embedded/store: set tx as closed upon cancellation
  • embedded/store: wip mvcc validations
  • embedded/store: set ctx as first argument
  • embedded/store: embedded meta attribute required if version is greater than 1
  • embedded/store: set embedded values mode as default one
  • embedded/store: backward compatible embedded value mode
  • embedded/store: optional integrity checking when reading values
  • embedded/store: preallocate tx header log files
  • embedded/store: wip mvcc validations
  • embedded/store: handle eof when reading last committed tx
  • embedded/store: support preallocated files when reading tx data
  • embedded/store: wip preallocated clog
  • embedded/store: option to prealloc files
  • embedded/store: optional integrity checking
  • embedded/store: further in-line documentation
  • embedded/store: make truncation validation tolerate entryless txs
  • embedded/store: allow tx without entries as long as it contains metadata
  • embedded/store: add hashValue as fixed 32 byte size
  • embedded/store: add test for TxOptions
  • embedded/store: add min limit for truncation frequency
  • embedded/store: multi-tx bulk indexing
  • embedded/store: fix default vlog cache size and add validation for hash when reading from cache
  • embedded/store: safe key copy for mvcc validation
  • embedded/store: improve log messages when discarding precommitted transactions
  • embedded/store: mvcc validations
  • embedded/store: fix rebase issue with readValueAt for vlogcache
  • embedded/store: multi-timed bulk insertions
  • embedded/store: clog file size adjustment only when preallocation is disabled
  • embedded/store: added more in-line comments
  • embedded/store: file preallocation not enabled by default
  • embedded/store: propagate context usage
  • embedded/tbtree: parametrize snapshot creation specs
  • embedded/tbtree: in-line documentation
  • embedded/tbtree: initialize tbtree with a non-mutated leaf
  • embedded/tbtree: getWithPrefix
  • embedded/tbtree: remove unnecessary kv sorting
  • embedded/tbtree: add in-line documentation
  • embedded/tbtree: minor code improvements
  • embedded/tbtree: rollback not needed as updates are made in a copy
  • embedded/tbtree: add in-line comments
  • embedded/tbtree: wip reduce allocs while updating inner node
  • embedded/tbtree: optimized bulk insertion
  • embedded/tbtree: optimize snapshot renewal
  • embedded/tbtree: wip optimized insertion
  • embedded/tbtree: variable renaming after rebasing
  • embedded/tools: upgrade embedded tools with transient context
  • embedded/watchers: return context error upon cancellation
  • embedded/watchers: set ctx as first arg
  • embedded/watchers: use context instead of cancellation channel
  • package/database: bunch of fixes and improvements in document engine
  • pkg: add more tests admin truncate command
  • pkg/api: expose db setting to enable file preallocation
  • pkg/api: use ErrrIs/ErrorContains in error checks
  • pkg/api: rename idFieldName to documentIdFieldName
  • pkg/api: annotate required fields
  • pkg/api: use of path parameters for document-related endpoints
  • pkg/api: expose new store indexing options
  • pkg/api: document update with path parameter
  • pkg/api: document api improvements
  • pkg/api: remove bool from tx metadata conversion
  • pkg/api: document api improvements
  • pkg/api: snapshot reuse attributes
  • pkg/api: search api improvements
  • pkg/api: return txID when inserting or updating documents
  • pkg/api: expose MVCC read-set settings
  • pkg/api: remove unsupported attribute from response messages
  • pkg/api: revert changes in swagger spec
  • pkg/api: re-generated httpclient with DeleteDocument endpoint
  • pkg/api: singular document path for audit and proof endpoints
  • pkg/api: manual adjustments post-code generation
  • pkg/api: expose replication settings for skipping integrity checks and indexing
  • pkg/api: swagger gen
  • pkg/api: value cache settings exposed
  • pkg/api: annotate primitive types as required
  • pkg/api: endpoint renaming
  • pkg/api: cleaner session id header
  • pkg/api: minor proof request renaming
  • pkg/api: authorization in swagger spec
  • pkg/api: re-generated httpclient
  • pkg/api: expose support for unsafe mvcc transactions
  • pkg/api: expose embeddedValue database setting
  • pkg/api: remove generated httpclient
  • pkg/api: buch of implementation improvements
  • pkg/api: revised document and authentication apis
  • pkg/api: annotated required message fields
  • pkg/api: add tx metadata conversion
  • pkg/api: re-generated httpclient
  • pkg/api: change retention period in TruncateDatabase message to int64
  • pkg/auth: add document update permissions
  • pkg/client: minor renaming in tx options
  • pkg/client: move heartbeater.go to pkg/client
  • pkg/client/cache: improve test coverage
  • pkg/database: upgrade after rebasing
  • pkg/database: remove object store db initialisation
  • pkg/database: upgraded reader specs
  • pkg/database: add document query struct to abstract request query
  • pkg/database: change objectEngine to documentEngine
  • pkg/database: add mvcc test for truncation, parse retention period using duration
  • pkg/database: add more tests for truncation
  • pkg/database: add document store db initialisation
  • pkg/database: updated APIs with schema updates
  • pkg/database: implement GetCollection API
  • pkg/database: remove search through first query
  • pkg/database: add query parser for object to generate sql expression
  • pkg/database: fix truncation deletion point checks in test
  • pkg/database: add search document api implementation for object store
  • pkg/database: create document/collection from schemav2 requests
  • pkg/database: context propagation
  • pkg/database: minor document renaming
  • pkg/database: add and implement object db interface
  • pkg/database: add DocumentUpdate api
  • pkg/database: minor code aligments
  • pkg/database: add object store
  • pkg/database: context propagation from server to embedded layer
  • pkg/database: proper calculation of source tx
  • pkg/database: create txs with default options
  • pkg/database: hard limit on page size
  • pkg/database: check encoded value is consistent with raw document
  • pkg/database: document verfication
  • pkg/database: use _obj to hold raw document payload
  • pkg/database: snapshot reuse changes
  • pkg/database: add document engine abstraction
  • pkg/integration: exportTx benchmarking
  • pkg/replication: replicator using bidirectional streaming
  • pkg/replication: improve options validation
  • pkg/replication: skip integrity check when exporting transactions
  • pkg/replication: context propagation
  • pkg/replication: wip stream replication - only async replication working
  • pkg/server: multi-grpc request context propagation
  • pkg/server: added inline comments
  • pkg/server: set default replication settings
  • pkg/server: context propagation from grpc api to embedded package
  • pkg/server: upgrades after rebasing from master
  • pkg/server: upgrade to new insecure credentials api
  • pkg/server: log error when closing document reader
  • pkg/server: support snapshot reuse
  • pkg/server: close all paginated readers on close of session
  • pkg/server: integrate document functions with server apis
  • pkg/server: add pagination test for document search
  • pkg/server: ensure document reader is closed when swithing pages
  • pkg/server: minor code reuse
  • pkg/server: add test successful load/unload of db with truncator
  • pkg/store: skipIntegrityChecks parameter when reading data
  • pkg/stream: handle eof when sending data
  • pkg/truncator: return error if expiration time hasn't been met
  • pkg/truncator: add context to Truncate method
  • pkg/truncator: refactor truncator process
  • pkg/verfication: document verification methods
  • pkg/verification: strengthen proof validations
  • pkg/verification: minor renaming
  • pkg/verification: document verification using embedded identifier
  • pkg/verification: use proto serialization
  • test/objects: add tests to create collections
  • test/objects: use httpexpect
  • test/objects: add more tests to create collection
  • test/perf: fix version value for flag
  • test/perf: add immudb version to influxdb data
  • test/perf: add runner to results for influxdb
  • test/perf-tests: remove runner check
  • test/perf-tests: use proxy on benchmark runner
  • test/performance: call cleanup method
  • test/performance-test-suite: fix replica directory path
  • test/performance-test-suite: add sync benchmarks
  • test/performance-test-suite: changed server concrete implementation
  • test/performance-test-suite: replicas are able to communicate with primary
  • test/performance-test-suite: send results to influxdb
  • test/performance-test-suite: extract json from results
  • test/performance-test-suite: add influxdb host and toke arguments
  • test/performance-test-suite: use temp folders for primary, replicas and clients
  • truncator: add more coverage for truncator

Features

  • add vlog truncation functionality
  • ci: change notification
  • embedded/document: count documents
  • embedded/object: add object store to embedded pkg
  • embedded/sql: Initial float support
  • embedded/sql: limit and offset as expressions
  • embedded/sql: sql transaction creation with options
  • embedded/sql: short casting syntax
  • embedded/sql: wip unsafe and optimized mvcc
  • embedded/sql: implicit type conversion of numeric types
  • embedded/store: tx creation with options
  • embedded/store: expose GetWithPrefixAndFilters
  • embedded/store: embeddable values
  • embedded/store: unsafe mvcc mode
  • embedded/store: embedded values option
  • embedded/store: read-only transactions
  • embedded/store: GetWithPrefixAndFilters
  • embedded/tbtree: multi-timed bulk insertions
  • pkg/api: document proof endpoint
  • pkg/api: improved replace documents endpoint
  • pkg/api: keepOpen parameter to instruct server to maintain a document reader in memory
  • pkg/api: count documents endpoint
  • pkg/client: optional tx options are now available during the creation process

Downloads

Docker image
https://hub.docker.com/r/codenotary/immudb

immudb Binaries

File SHA256
immudb-v1.5.0-RC1-darwin-amd64 adc27c7af5cea449c6066968ec142c3e2de9c4ed1cd4507b023874e6ac86f07b
immudb-v1.5.0-RC1-darwin-arm64 3395f8921ebdf4a57a4b63a488cd27bcfb05b4f3d7d104eb298bcffb7d30ce21
immudb-v1.5.0-RC1-freebsd-amd64 ee96402296490af7de3a90f6b44e681ba69f6f90ef5f727a90241219f1d6272e
immudb-v1.5.0-RC1-linux-amd64 d925e86463366f68c952b050cafa5475ca4be2c1f61432d91301c537c7387b76
immudb-v1.5.0-RC1-linux-amd64-fips 774cd076faa29708ffafaf249e8e37aab126c474736f2b8a933fd04214190ae2
immudb-v1.5.0-RC1-linux-amd64-static e3c63a8fd2ff32a1a97a96ed44b10e72e48901bf8ed7c5211e69e985b79bb2d2
immudb-v1.5.0-RC1-linux-arm64 0eed077d9a4492a968dd167c390ada2a2b1a299b5e0241bbccbe87ceb275a427
immudb-v1.5.0-RC1-linux-s390x 8dbfe322d21cef912b06040d0cf32a49106b9f6b7d486293fc787effe14d7b15
immudb-v1.5.0-RC1-windows-amd64.exe 3b5fb2e85039599524d72ef8750e5561c2227c706c994edfff3e9cda2bd1bca6

immuclient Binaries

File SHA256
immuclient-v1.5.0-RC1-darwin-amd64 23be535a67846b2d3701edfce14eb47b90dc2bbf16420133d7abcaf3a31bfa95
immuclient-v1.5.0-RC1-darwin-arm64 acc9496f541c3c109e6b42b253c427617f057a8a36577ab84fd7509a0da3e08f
immuclient-v1.5.0-RC1-freebsd-amd64 d6f001fd361290787b9a81481c358c307df66e11ddf8b9925a5de1162df8db7b
immuclient-v1.5.0-RC1-linux-amd64 121bab9fe5fe7851011048e71007724594167695b12a606381c330ed5258c2f9
immuclient-v1.5.0-RC1-linux-amd64-fips 28432d3b86234767a731aed96302285e0d1b94edf6947582a67b611fbbc7ec05
immuclient-v1.5.0-RC1-linux-amd64-static bdacddd65fb6e5c8052c8a0a11849c19de69ed52a5958085733c3dc68195e9f2
immuclient-v1.5.0-RC1-linux-arm64 f665821ec60244f6ce522e1c6fe3d18c6e43c06d90448765988cfc3877157e8a
immuclient-v1.5.0-RC1-linux-s390x bcc0af4ad11071e1cf668ed9f042df20ad44bc83ee424595e7aa9b1c6da3ba4b
immuclient-v1.5.0-RC1-windows-amd64.exe a61ce4e021b89b921975640dc519384b787c384c8560465d21387642f74ae121

immuadmin Binaries

File SHA256
immuadmin-v1.5.0-RC1-darwin-amd64 d0d055a5fb43dcbd4afc663ad84a8b5c39a832c6c223d02687809ada2aa11965
immuadmin-v1.5.0-RC1-darwin-arm64 3c88a2c178d96d7ebf6cfb2437f42cda4e88f10924f51c7c0344dc46aae451f9
immuadmin-v1.5.0-RC1-freebsd-amd64 763e2c0d2763220ed5205717a30872d4ed5d3c7699a28028c63ebeda44aadf9d
immuadmin-v1.5.0-RC1-linux-amd64 3c6f277dbb286399c6a44c99ac94d44c42f1424e7173e67931adc0d2a821056d
immuadmin-v1.5.0-RC1-linux-amd64-fips 6ff96208437539c723afe61825c13b38021b963dc5e9ea6195996a0eeb1467ff
immuadmin-v1.5.0-RC1-linux-amd64-static aba650e13e76f495999159f1ec4d18d5f6fab37b3c9652afbf2d2a0c5999b02d
immuadmin-v1.5.0-RC1-linux-arm64 649534fc458b1b3a7f06898aceedf111d37085a958f86fd45994d1bcdac738fa
immuadmin-v1.5.0-RC1-linux-s390x 0f947b5957f03514dc1761c81ec345f5135d43f926861c2c52e001ee4b11364f
immuadmin-v1.5.0-RC1-windows-amd64.exe d81f4e90af6fd7226d833e254164b51b787f517a35d5c01b572ed26e9beca474