From 41af6fc0a2b662acf7b542ebc732a90036cac088 Mon Sep 17 00:00:00 2001 From: ulvii Date: Mon, 1 May 2017 11:20:53 -0700 Subject: [PATCH] Database setup (#367) * porting database setup files for functional tests * Updating yml files to setup test databases before running the tests * update spacing * Renaming env variables * Modifying cleanup_dbs.py and setup_dbs.py scripts so that they can execute database setup files * update env variables * Fix typo * Update .travis.yml * update env variables * update travis scripts * Checking sqlcmd setup on travis * Checking sqlcmd setup on travis * sqlcmd bcp fix * sqlcmd bcp fix * sqlcmd bcp fix * sqlcmd bcp fix * sqlcmd bcp fix * sqlcmd bcp fix * sqlcmd bcp fix * sqlcmd bcp fix * sqlcmd bcp fix * Adding a test to make sure the database is setup properly * update exec_sql_scripts.py * update sqlsrv_num_fields.phpt * update sqlsrv_num_fields.phpt * update * Fixing identation --- .travis.yml | 14 +++-- Dockerfile-msphpsql | 10 +++- appveyor.yml | 27 ++++++--- test/setup/168256.dat | Bin 0 -> 1050 bytes test/setup/168256.fmt | 13 +++++ test/setup/168256.sql | 24 ++++++++ test/setup/cd_info.dat | Bin 0 -> 84456 bytes test/setup/cd_info.fmt | 12 ++++ test/setup/cd_info.sql | 47 ++++++++++++++++ test/setup/cleanup_dbs.py | 29 ++++++++++ test/setup/create_db.sql | 13 +++++ test/setup/drop_db.sql | 8 +++ test/setup/exec_sql_scripts.py | 36 ++++++++++++ test/setup/setup_dbs.py | 79 +++++++++++++++++++++++++++ test/setup/test_password.sql | 31 +++++++++++ test/setup/test_streamable_types.dat | Bin 0 -> 8390488 bytes test/setup/test_streamable_types.fmt | 15 +++++ test/setup/test_types.sql | 67 +++++++++++++++++++++++ test/setup/tracks.dat | Bin 0 -> 1948 bytes test/setup/tracks.fmt | 4 ++ test/setup/tracks.sql | 32 +++++++++++ test/setup/xml.dat | Bin 0 -> 28302 bytes test/setup/xml.fmt | 3 + 23 files changed, 450 insertions(+), 14 deletions(-) create mode 100644 test/setup/168256.dat create mode 100644 test/setup/168256.fmt create mode 100644 test/setup/168256.sql create mode 100644 test/setup/cd_info.dat create mode 100644 test/setup/cd_info.fmt create mode 100644 test/setup/cd_info.sql create mode 100644 test/setup/cleanup_dbs.py create mode 100644 test/setup/create_db.sql create mode 100644 test/setup/drop_db.sql create mode 100644 test/setup/exec_sql_scripts.py create mode 100644 test/setup/setup_dbs.py create mode 100644 test/setup/test_password.sql create mode 100644 test/setup/test_streamable_types.dat create mode 100644 test/setup/test_streamable_types.fmt create mode 100644 test/setup/test_types.sql create mode 100644 test/setup/tracks.dat create mode 100644 test/setup/tracks.fmt create mode 100644 test/setup/tracks.sql create mode 100644 test/setup/xml.dat create mode 100644 test/setup/xml.fmt diff --git a/.travis.yml b/.travis.yml index 9051dc43..84f1bc8b 100644 --- a/.travis.yml +++ b/.travis.yml @@ -10,25 +10,31 @@ env: global: - REPORT_EXIT_STATUS=1 - ACCEPT_EULA=Y - - PHPSQLDIR=/REPO/msphpsql-PHP-7.0-Linux - - SQLSERVERHOSTNAME=sql + - PHPSQLDIR=/REPO/msphpsql-dev + - TEST_PHP_SQL_SERVER=sql + - SQLSRV_DBNAME=msphpsql_sqlsrv + - PDOSQLSRV_DBNAME=msphpsql_pdosqlsrv before_install: - docker pull microsoft/mssql-server-linux install: - docker build --build-arg PHPSQLDIR=$PHPSQLDIR -t msphpsql-dev -f Dockerfile-msphpsql . - - docker run -e 'ACCEPT_EULA=Y' -e 'SA_PASSWORD=' -p 1433:1433 --name=$SQLSERVERHOSTNAME -d microsoft/mssql-server-linux + - docker run -e 'ACCEPT_EULA=Y' -e 'SA_PASSWORD=Password12@' -p 1433:1433 --name=$TEST_PHP_SQL_SERVER -d microsoft/mssql-server-linux script: - - docker run -e TRAVIS_JOB_ID -t -d -w $PHPSQLDIR --link $SQLSERVERHOSTNAME --name=client msphpsql-dev + - docker run -e TRAVIS_JOB_ID -t -d -w $PHPSQLDIR --link $TEST_PHP_SQL_SERVER --name=client msphpsql-dev - docker ps -a + - docker exec client python ./test/setup/setup_dbs.py -dbname $SQLSRV_DBNAME + - docker exec client python ./test/setup/setup_dbs.py -dbname $PDOSQLSRV_DBNAME - docker exec client php ./source/pdo_sqlsrv/run-tests.php ./test/pdo_sqlsrv/*.phpt - docker exec client php ./source/sqlsrv/run-tests.php ./test/sqlsrv/*.phpt - docker exec client bash -c 'for f in ./test/sqlsrv/*.diff; do ls $f 2>/dev/null; cat $f 2>/dev/null; done || true' - docker exec client bash -c 'for f in ./test/sqlsrv/*.out; do ls $f 2>/dev/null; cat $f 2>/dev/null; done || true' - docker exec client bash -c 'for f in ./test/pdo_sqlsrv/*.diff; do ls $f 2>/dev/null; cat $f 2>/dev/null; done || true' - docker exec client bash -c 'for f in ./test/pdo_sqlsrv/*.out; do ls $f 2>/dev/null; cat $f 2>/dev/null; done || true' + - docker exec client python ./test/setup/cleanup_dbs.py -dbname $SQLSRV_DBNAME + - docker exec client python ./test/setup/cleanup_dbs.py -dbname $PDOSQLSRV_DBNAME - docker exec client coveralls -e ./source/shared/ --gcov-options '\-lp' - docker stop client - docker ps -a diff --git a/Dockerfile-msphpsql b/Dockerfile-msphpsql index 4c65931f..bd0e5d85 100644 --- a/Dockerfile-msphpsql +++ b/Dockerfile-msphpsql @@ -23,7 +23,10 @@ RUN export DEBIAN_FRONTEND=noninteractive && apt-get update && \ unixodbc-dev \ unzip && apt-get clean -ARG PHPSQLDIR=/REPO/msphpsql-PHP-7.0-Linux +ARG PHPSQLDIR=/REPO/msphpsql-dev +ENV TEST_PHP_SQL_SERVER sql +ENV TEST_PHP_SQL_UID sa +ENV TEST_PHP_SQL_PWD Password12@ # set locale to utf-8 RUN locale-gen en_US.UTF-8 @@ -37,6 +40,8 @@ RUN curl https://packages.microsoft.com/config/ubuntu/16.04/prod.list > /etc/apt #RUN apt-key adv --keyserver apt-mo.trafficmanager.net --recv-keys 417A0893 RUN export DEBIAN_FRONTEND=noninteractive && apt-get update && ACCEPT_EULA=Y apt-get install -y msodbcsql mssql-tools +ENV PATH="/opt/mssql-tools/bin:${PATH}" + #install coveralls RUN pip install --upgrade pip && pip install cpp-coveralls @@ -64,9 +69,12 @@ RUN phpize && ./configure LDFLAGS="-lgcov" CXXFLAGS="-O0 --coverage" && make && # set name of sql server host to use WORKDIR $PHPSQLDIR/test/pdo_sqlsrv RUN sed -i -e 's/localhost/sql/g' autonomous_setup.php +RUN sed -i -e 's//'"$TEST_PHP_SQL_PWD"'/g' autonomous_setup.php WORKDIR $PHPSQLDIR/test/sqlsrv RUN sed -i -e 's/localhost/sql/g' autonomous_setup.php +RUN sed -i -e 's//'"$TEST_PHP_SQL_PWD"'/g' autonomous_setup.php ENV REPORT_EXIT_STATUS 1 ENV TEST_PHP_EXECUTABLE /usr/bin/php + diff --git a/appveyor.yml b/appveyor.yml index e0571b83..5690bc5e 100644 --- a/appveyor.yml +++ b/appveyor.yml @@ -11,13 +11,15 @@ branches: environment: # MSSQL credentials from https://www.appveyor.com/docs/services-databases/ - MSSQL_PASSWORD: Password12! - MSSQL_USERNAME: sa + TEST_PHP_SQL_PWD: Password12! + TEST_PHP_SQL_UID: sa + SQLSRV_DBNAME: msphpsql_sqlsrv + PDOSQLSRV_DBNAME: msphpsql_pdosqlsrv PHP_DEPSVER: 7.0 PHP_SDK: c:\projects\php matrix: - BUILD_PLATFORM: x64 - MSSQL_SERVERNAME: (local)\SQL2012SP1 + TEST_PHP_SQL_SERVER: (local)\SQL2012SP1 SQL_INSTANCE: SQL2012SP1 PHP_VC: 14 PHP_MAJOR_VER: 7.0 @@ -27,7 +29,7 @@ environment: PHP_ZTS: --disable-zts platform: x64 - BUILD_PLATFORM: x86 - MSSQL_SERVERNAME: (local)\SQL2014 + TEST_PHP_SQL_SERVER: (local)\SQL2014 SQL_INSTANCE: SQL2014 PHP_VC: 14 PHP_MAJOR_VER: 7.0 @@ -36,7 +38,7 @@ environment: PHP_INSTALL_DIR: c:\projects\php\x86\bin platform: x86 - BUILD_PLATFORM: x64 - MSSQL_SERVERNAME: (local)\SQL2016 + TEST_PHP_SQL_SERVER: (local)\SQL2016 SQL_INSTANCE: SQL2016 PHP_VC: 14 PHP_MAJOR_VER: 7.1 @@ -45,7 +47,7 @@ environment: PHP_INSTALL_DIR: c:\projects\php\x64\bin platform: x64 - BUILD_PLATFORM: x86 - MSSQL_SERVERNAME: (local)\SQL2008R2SP2 + TEST_PHP_SQL_SERVER: (local)\SQL2008R2SP2 SQL_INSTANCE: SQL2008R2SP2 PHP_VC: 14 PHP_MAJOR_VER: 7.1 @@ -120,9 +122,9 @@ install: - 7z x -y php-sdk-binary-tools-20110915.zip -o%PHP_SDK% - 7z x -y php.zip -o%PHP_SDK_DIR% - echo update SQL connection string - - ps: (Get-Content ${env:APPVEYOR_BUILD_FOLDER}\test\pdo_sqlsrv\autonomous_setup.php) | ForEach-Object { $_ -replace "localhost", ${env:MSSQL_SERVERNAME} -replace "", ${env:MSSQL_PASSWORD} } | Set-Content ${env:APPVEYOR_BUILD_FOLDER}\test\pdo_sqlsrv\autonomous_setup.php + - ps: (Get-Content ${env:APPVEYOR_BUILD_FOLDER}\test\pdo_sqlsrv\autonomous_setup.php) | ForEach-Object { $_ -replace "localhost", ${env:TEST_PHP_SQL_SERVER} -replace "", ${env:TEST_PHP_SQL_PWD} } | Set-Content ${env:APPVEYOR_BUILD_FOLDER}\test\pdo_sqlsrv\autonomous_setup.php - ps: Get-Content ${env:APPVEYOR_BUILD_FOLDER}\test\pdo_sqlsrv\autonomous_setup.php - - ps: (Get-Content ${env:APPVEYOR_BUILD_FOLDER}\test\sqlsrv\autonomous_setup.php) | ForEach-Object { $_ -replace "localhost", ${env:MSSQL_SERVERNAME} -replace "", ${env:MSSQL_PASSWORD} } | Set-Content ${env:APPVEYOR_BUILD_FOLDER}\test\sqlsrv\autonomous_setup.php + - ps: (Get-Content ${env:APPVEYOR_BUILD_FOLDER}\test\sqlsrv\autonomous_setup.php) | ForEach-Object { $_ -replace "localhost", ${env:TEST_PHP_SQL_SERVER} -replace "", ${env:TEST_PHP_SQL_PWD} } | Set-Content ${env:APPVEYOR_BUILD_FOLDER}\test\sqlsrv\autonomous_setup.php - ps: Get-Content ${env:APPVEYOR_BUILD_FOLDER}\test\sqlsrv\autonomous_setup.php build_script: @@ -157,11 +159,18 @@ build_script: test_script: - cd %PHP_INSTALL_DIR% - php --ini - - php -i + - php -i + - python -V + - Echo setup test database for SQLSRV tests - %SQLSRV_DBNAME% + - python %APPVEYOR_BUILD_FOLDER%\test\setup\setup_dbs.py -dbname %SQLSRV_DBNAME% + - Echo setup test database for PDO_SQLSRV tests - %PDOSQLSRV_DBNAME% + - python %APPVEYOR_BUILD_FOLDER%\test\setup\setup_dbs.py -dbname %PDOSQLSRV_DBNAME% - php run-tests.php -p php.exe %APPVEYOR_BUILD_FOLDER%\test\sqlsrv\*.phpt > %APPVEYOR_BUILD_FOLDER%\test\sqlsrv.log 2>&1 - type %APPVEYOR_BUILD_FOLDER%\test\sqlsrv.log - php run-tests.php -p php.exe %APPVEYOR_BUILD_FOLDER%\test\pdo_sqlsrv\*.phpt > %APPVEYOR_BUILD_FOLDER%\test\pdo_sqlsrv.log 2>&1 - type %APPVEYOR_BUILD_FOLDER%\test\pdo_sqlsrv.log + - python %APPVEYOR_BUILD_FOLDER%\test\setup\cleanup_dbs.py -dbname %SQLSRV_DBNAME% + - python %APPVEYOR_BUILD_FOLDER%\test\setup\cleanup_dbs.py -dbname %PDOSQLSRV_DBNAME% after_test: - cd %APPVEYOR_BUILD_FOLDER%\test\ diff --git a/test/setup/168256.dat b/test/setup/168256.dat new file mode 100644 index 0000000000000000000000000000000000000000..03f3442b21d94eeac8d53733cb7399fa88c435c1 GIT binary patch literal 1050 zcmeBP#lXPGz`!8EV8UR@UELQQVs^fYHW-b zzHF+1@jH z5i^oSF7D=V4}gMh!nNs@K<#iKF!A0I7SV`nu5AThk_zYVd5mlkD^MBkpkriUA;qFg z$4jCdpY=H}Ut_*sS%aAo*&;T)7BMlf;;~3!t^Q}YcYq85BUSfv2bSz|ZOnW3*Zzjb zW@L-l@mj>lz=p>njG%LhwUv7V%>Dh3zY**%w6=uj5aRQa$i=#7mEV>}L1Lg*>Wda6jA*;^r zed^P>;NbqIl5$mKi@5Mw#Kv$G$)Xka;Erbi`RKq+PEa<40|Ao>Woz_pVmy~Fw=O)p JDb^2W5dhu;s{8-| literal 0 HcmV?d00001 diff --git a/test/setup/168256.fmt b/test/setup/168256.fmt new file mode 100644 index 00000000..f5b3f474 --- /dev/null +++ b/test/setup/168256.fmt @@ -0,0 +1,13 @@ +9.0 +11 +1 SQLINT 0 4 "" 1 SalesOrderID "" +2 SQLINT 0 4 "" 2 SalesOrderDetailID "" +3 SQLNCHAR 2 50 "" 3 CarrierTrackingNumber Latin1_General_CS_AS +4 SQLSMALLINT 0 2 "" 4 OrderQty "" +5 SQLINT 0 4 "" 5 ProductID "" +6 SQLINT 0 4 "" 6 SpecialOfferID "" +7 SQLMONEY 0 8 "" 7 UnitPrice "" +8 SQLMONEY 0 8 "" 8 UnitPriceDiscount "" +9 SQLNUMERIC 1 19 "" 9 LineTotal "" +10 SQLUNIQUEID 1 16 "" 10 rowguid "" +11 SQLDATETIME 0 8 "" 11 ModifiedDate "" diff --git a/test/setup/168256.sql b/test/setup/168256.sql new file mode 100644 index 00000000..0b2048c9 --- /dev/null +++ b/test/setup/168256.sql @@ -0,0 +1,24 @@ +USE $(dbname) +GO + +IF EXISTS (SELECT * FROM sys.objects +WHERE object_id = OBJECT_ID(N'[dbo].[168256]') AND type in (N'U')) + +BEGIN +DROP TABLE [168256] +END +GO + +CREATE TABLE [168256] ( + [SalesOrderID] [int] NOT NULL, + [SalesOrderDetailID] [int] IDENTITY(1,1) NOT NULL, + [CarrierTrackingNumber] [nvarchar](25) NULL, + [OrderQty] [smallint] NOT NULL, + [ProductID] [int] NOT NULL, + [SpecialOfferID] [int] NOT NULL, + [UnitPrice] [money] NOT NULL, + [UnitPriceDiscount] [money] NOT NULL DEFAULT ((0.0)), + [LineTotal] AS (isnull(([UnitPrice]*((1.0)-[UnitPriceDiscount]))*[OrderQty],(0.0))), + [rowguid] [uniqueidentifier] ROWGUIDCOL NOT NULL DEFAULT (newid()), + [ModifiedDate] [datetime] NOT NULL DEFAULT (getdate())); +GO diff --git a/test/setup/cd_info.dat b/test/setup/cd_info.dat new file mode 100644 index 0000000000000000000000000000000000000000..4d98e399fb92290df110b83a213e41e7f3e90d5e GIT binary patch literal 84456 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 VqtPx#%R + +import os +import sys +import subprocess +import platform +import argparse +from subprocess import Popen, PIPE +from exec_sql_scripts import * + +if __name__ == '__main__': + parser = argparse.ArgumentParser() + parser.add_argument('-dbname', '--DBNAME', required=True) + args = parser.parse_args() + + try: + server = os.environ['TEST_PHP_SQL_SERVER'] + uid = os.environ['TEST_PHP_SQL_UID'] + pwd = os.environ['TEST_PHP_SQL_PWD'] + except : + print("TEST_PHP_SQL_SERVER environment variable must be set to the name of the server to use") + print("TEST_PHP_SQL_UID environment variable must be set to the name of the user to authenticate with") + print("TEST_PHP_SQL_PWD environment variable must be set to the password of the use to authenticate with") + sys.exit(1) + + conn_options = ' -S ' + server + ' -U ' + uid + ' -P ' + pwd + ' ' + + executeSQLscript( os.path.join( os.path.dirname(os.path.realpath(__file__)), 'drop_db.sql'), conn_options, args.DBNAME) diff --git a/test/setup/create_db.sql b/test/setup/create_db.sql new file mode 100644 index 00000000..e82c21ad --- /dev/null +++ b/test/setup/create_db.sql @@ -0,0 +1,13 @@ +USE [master] +GO + +IF EXISTS (SELECT name FROM sys.databases WHERE name = '$(dbname)' ) + +BEGIN +DROP DATABASE $(dbname) +END + +CREATE DATABASE $(dbname) + +GO + diff --git a/test/setup/drop_db.sql b/test/setup/drop_db.sql new file mode 100644 index 00000000..465b25b7 --- /dev/null +++ b/test/setup/drop_db.sql @@ -0,0 +1,8 @@ +USE [master] +GO + +IF EXISTS (SELECT name FROM sys.databases WHERE name = '$(dbname)' ) + +BEGIN +DROP DATABASE $(dbname) +END diff --git a/test/setup/exec_sql_scripts.py b/test/setup/exec_sql_scripts.py new file mode 100644 index 00000000..64011b6d --- /dev/null +++ b/test/setup/exec_sql_scripts.py @@ -0,0 +1,36 @@ +#!/usr/bin/env python3 +# contains helper methods +import os +import sys +import subprocess +import platform +import argparse +from subprocess import Popen, PIPE + +def executeCommmand(inst_command): + proc = subprocess.Popen(inst_command , stdout=PIPE, stderr= PIPE, shell=True) + print ( inst_command ) + oo,ee = proc.communicate() + print (ee) + print (oo) + +def executeSQLscript(sqlfile, conn_options, dbname): + if platform.system() == 'Windows': + executeSQLscriptWindows(sqlfile, conn_options, dbname) + elif platform.system() == 'Linux' or platform.system() == 'Darwin': + executeSQLscriptUnix(sqlfile, conn_options, dbname) + +def executeSQLscriptWindows(sqlfile, conn_options, dbname): + inst_command = 'sqlcmd ' + conn_options + ' -i ' + sqlfile + ' -v dbname =' + dbname + executeCommmand(inst_command) + +def executeSQLscriptUnix(sqlfile, conn_options, dbname): + # This is a workaround because sqlcmd in Unix does not support -v option for variables. + # It inserts setvar dbname into the beginning of a temp .sql file + tmpFileName = sqlfile[0:-4] + '_tmp.sql' + redirect_string = '(echo :setvar dbname {0}) > {2}; cat {1} >> {2}; ' + sqlcmd = 'sqlcmd ' + conn_options + ' -i ' + tmpFileName + + inst_command = redirect_string.format(dbname, sqlfile, tmpFileName) + sqlcmd + executeCommmand(inst_command) + os.remove(tmpFileName) diff --git a/test/setup/setup_dbs.py b/test/setup/setup_dbs.py new file mode 100644 index 00000000..fb779d43 --- /dev/null +++ b/test/setup/setup_dbs.py @@ -0,0 +1,79 @@ +#!/usr/bin/env python3 +# py setup_dbs.py -dbname -azure +# OR +# py setup_dbs.py -dbname +import os +import sys +import subprocess +import platform +import argparse +from subprocess import Popen, PIPE +from exec_sql_scripts import * + +def createLoginUsers(conn_options, dbname, azure): + if (azure.lower() == 'yes'): + # can only create logins in the master database + createLoginUsersAzure('create_logins_azure.sql', conn_options, 'master') + # create users to use those logins to access the test database (dbname) + createLoginUsersAzure('create_users_azure.sql', conn_options, dbname) + else: + executeSQLscript('test_password.sql', conn_options, dbname) + +def createLoginUsersAzure(sqlfile, conn_options, dbname): + inst_command = 'sqlcmd ' + conn_options + ' -i ' + sqlfile + ' -d ' + dbname + executeCommmand(inst_command) + +def setupTestDatabase(conn_options, dbname, azure): + sqlFiles = ['test_types.sql', '168256.sql', 'cd_info.sql', 'tracks.sql'] + + # for Azure, must specify the database for the sql scripts to work + if (azure.lower() == 'yes'): + conn_options += ' -d ' + dbname + + for sqlFile in sqlFiles: + executeSQLscript(sqlFile, conn_options, dbname) + +def populateTables(conn_options, dbname): + executeBulkCopy(conn_options, dbname, 'cd_info', 'cd_info') + executeBulkCopy(conn_options, dbname, 'tracks', 'tracks') + executeBulkCopy(conn_options, dbname, 'test_streamable_types', 'test_streamable_types') + executeBulkCopy(conn_options, dbname, '159137', 'xml') + executeBulkCopy(conn_options, dbname, '168256', '168256') + +def executeBulkCopy(conn_options, dbname, tblname, datafile): + redirect_string = 'bcp {0}..[{1}] in {2}.dat -f {2}.fmt ' + inst_command = redirect_string.format(dbname, tblname, datafile) + conn_options + executeCommmand(inst_command) + +if __name__ == '__main__': + parser = argparse.ArgumentParser() + parser.add_argument('-dbname', '--DBNAME', required=True) + parser.add_argument('-azure', '--AZURE', required=False, default='no') + args = parser.parse_args() + + try: + server = os.environ['TEST_PHP_SQL_SERVER'] + uid = os.environ['TEST_PHP_SQL_UID'] + pwd = os.environ['TEST_PHP_SQL_PWD'] + except : + print("TEST_PHP_SQL_SERVER environment variable must be set to the name of the server to use") + print("TEST_PHP_SQL_UID environment variable must be set to the name of the user to authenticate with") + print("TEST_PHP_SQL_PWD environment variable must be set to the password of the use to authenticate with") + sys.exit(1) + + current_working_dir=os.getcwd() + os.chdir(os.path.dirname(os.path.realpath(__file__))) + conn_options = ' -S ' + server + ' -U ' + uid + ' -P ' + pwd + ' ' + + # In Azure, assume an empty test database has been created using Azure portal + if (args.AZURE.lower() == 'no'): + executeSQLscript('create_db.sql', conn_options, args.DBNAME) + + # create login users + createLoginUsers(conn_options, args.DBNAME, args.AZURE) + # create tables in the new database + setupTestDatabase(conn_options, args.DBNAME, args.AZURE) + # populate these tables + populateTables(conn_options, args.DBNAME) + os.chdir(current_working_dir) + diff --git a/test/setup/test_password.sql b/test/setup/test_password.sql new file mode 100644 index 00000000..da37f970 --- /dev/null +++ b/test/setup/test_password.sql @@ -0,0 +1,31 @@ +--first, create new logins (user id / password pair) if not yet created +USE master; +GO + +IF NOT EXISTS (SELECT name FROM master..syslogins WHERE name = 'test_password') +BEGIN + CREATE LOGIN test_password WITH PASSWORD='! ;4triou'; +END +GO + +IF NOT EXISTS (SELECT name FROM master..syslogins WHERE name = 'test_password2') +BEGIN + CREATE LOGIN test_password2 WITH PASSWORD='!} ;4triou'; +END +GO + +IF NOT EXISTS (SELECT name FROM master..syslogins WHERE name = 'test_password3') +BEGIN + CREATE LOGIN test_password3 WITH PASSWORD='! ;4triou}'; +END +GO + +--the following users will be granted access to the test database +USE $(dbname); +GO + +CREATE USER test_password FROM LOGIN test_password; +CREATE USER test_password2 FROM LOGIN test_password2; +CREATE USER test_password3 FROM LOGIN test_password3; +GO + diff --git a/test/setup/test_streamable_types.dat b/test/setup/test_streamable_types.dat new file mode 100644 index 0000000000000000000000000000000000000000..9e8d81918e4077b280416b2e4448d7e18fba7597 GIT binary patch literal 8390488 zcmeFtF%bYU32fB*pk1PBlyK!5-N0t5&UAV7cs z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N z0t5&UAV7cs0RjXF5FkK+009C72s{?3({x3E009C72oNAZfB*pk1PBlyK!5-N0t5&U zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk z1PBlyK!5-N0t5&UAV7cs0RjXF5LgP-X*uDY009C72oNAZfB*pk1PBlyK!5-N0t5&U zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7{&wov20$1F0^o-U7$K{8 zL&jn&XqX_8AVT+FC$g_F0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N z0t71QDJ4LF009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXFd@PXc zDIq|B009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXFObT32 n(k4Gz=6N5?nPpa(93)#sR}$!Xw?|uPd$Uyjb6+!<|J>Ib=bpC= literal 0 HcmV?d00001 diff --git a/test/setup/test_streamable_types.fmt b/test/setup/test_streamable_types.fmt new file mode 100644 index 00000000..6e34b824 --- /dev/null +++ b/test/setup/test_streamable_types.fmt @@ -0,0 +1,15 @@ +9.0 +13 +1 SQLCHAR 8 0 "" 1 varchar_type SQL_Latin1_General_CP1_CI_AS +2 SQLNCHAR 8 0 "" 2 nvarchar_type SQL_Latin1_General_CP1_CI_AS +3 SQLBINARY 8 0 "" 3 varbinary_type "" +4 SQLCHAR 4 0 "" 4 text_type SQL_Latin1_General_CP1_CI_AS +5 SQLNCHAR 4 0 "" 5 ntext_type SQL_Latin1_General_CP1_CI_AS +6 SQLIMAGE 4 0 "" 6 image_type "" +7 SQLNCHAR 8 0 "" 7 xml_type "" +8 SQLCHAR 2 256 "" 8 char_short_type SQL_Latin1_General_CP1_CI_AS +9 SQLCHAR 2 256 "" 9 varchar_short_type SQL_Latin1_General_CP1_CI_AS +10 SQLNCHAR 2 512 "" 10 nchar_short_type SQL_Latin1_General_CP1_CI_AS +11 SQLNCHAR 2 512 "" 11 nvarchar_short_type SQL_Latin1_General_CP1_CI_AS +12 SQLBINARY 2 256 "" 12 binary_short_type "" +13 SQLBINARY 2 256 "" 13 varbinary_short_type "" diff --git a/test/setup/test_types.sql b/test/setup/test_types.sql new file mode 100644 index 00000000..75e9c552 --- /dev/null +++ b/test/setup/test_types.sql @@ -0,0 +1,67 @@ +USE $(dbname) +GO + +CREATE TABLE [test_types] ([bigint_type] BIGINT null, + [int_type] INT null, + [smallint_type] SMALLINT null, + [tinyint_type] TINYINT null, + [bit_type] BIT null, + [decimal_type] DECIMAL(38,0) null, + [money_type] MONEY null, + [smallmoney_type] SMALLMONEY null, + [float_type] FLOAT(53) null, + [real_type] REAL null, + [datetime_type] DATETIME null, + [smalldatetime_type] SMALLDATETIME null ); +GO + +-- maximum test +INSERT INTO $(dbname)..[test_types] (bigint_type, int_type, smallint_type, tinyint_type, bit_type, decimal_type, datetime_type, money_type, smallmoney_type, float_type, real_type) + VALUES (9223372036854775807, 2147483647, 32767, 255, 1, 9999999999999999999999999999999999999, '12/12/1968 16:20', 922337203685477.5807, 214748.3647, 1.79E+308, 1.18E-38 ) +-- minimum test +INSERT INTO $(dbname)..[test_types] (bigint_type, int_type, smallint_type, tinyint_type, bit_type, decimal_type, datetime_type, money_type, smallmoney_type, float_type, real_type) + VALUES (-9223372036854775808, -2147483648, -32768, 0, 0, -10000000000000000000000000000000000001,'12/12/1968 16:20', -922337203685477.5808, -214748.3648, -1.79E+308, -1.18E-38 ) +-- zero test +INSERT INTO $(dbname)..[test_types] (bigint_type, int_type, smallint_type, tinyint_type, bit_type, decimal_type, datetime_type, money_type, smallmoney_type, float_type, real_type) + VALUES (0, 0, 0, 0, 0, 0, '12/12/1968 16:20', 0, 0, 0, 0) + +GO + +CREATE TABLE [test_streamable_types] ( + [varchar_type] VARCHAR(MAX) null, + [nvarchar_type] NVARCHAR(MAX) null, + [varbinary_type] VARBINARY(MAX) null, + [text_type] TEXT null, + [ntext_type] NTEXT null, + [image_type] IMAGE null, + [xml_type] XML null, + [char_short_type] CHAR(256) null, + [varchar_short_type] VARCHAR(256) null, + [nchar_short_type] NCHAR(256) null, + [nvarchar_short_type] NVARCHAR(256) null, + [binary_short_type] BINARY(256) null, + [varbinary_short_type] VARBINARY(256) null ); +GO + +CREATE TABLE [155671] ([cat_id] [int] IDENTITY (1,1) NOT NULL, [cat_title] [varchar](50) NOT NULL, [cat_order][int] NOT NULL) ON [PRIMARY]; +GO + +CREATE TABLE [159137] ([xml_type][xml] null) ON [PRIMARY]; +GO + +IF EXISTS ( SELECT * + FROM sys.objects + WHERE object_id = OBJECT_ID(N'test_out') + AND type IN ( N'P', N'PC' ) ) +BEGIN +DROP proc test_out +END +GO + +create proc test_out @p1 integer, @p2 integer, @p3 integer output +as +begin + select @p3 = @p1 + @p2 + print @p3 +end +go diff --git a/test/setup/tracks.dat b/test/setup/tracks.dat new file mode 100644 index 0000000000000000000000000000000000000000..adc99e5e0e463f72f76e80f5782cfa6fc393acb7 GIT binary patch literal 1948 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 literal 0 HcmV?d00001 diff --git a/test/setup/xml.fmt b/test/setup/xml.fmt new file mode 100644 index 00000000..12ce6baa --- /dev/null +++ b/test/setup/xml.fmt @@ -0,0 +1,3 @@ +9.0 +1 +1 SQLBINARY 8 0 "" 1 xml_type ""