From c404c239dcfa38d8ce4a6504f90fd70067e811dd Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fran=C3=A7ois=20Grisez?= Date: Fri, 18 May 2018 15:50:09 +0200 Subject: [PATCH 01/33] Update linphone submodule (Fix multi-jobs compilation) --- submodules/linphone | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/submodules/linphone b/submodules/linphone index 64fc28497..0adccd72d 160000 --- a/submodules/linphone +++ b/submodules/linphone @@ -1 +1 @@ -Subproject commit 64fc28497ffb0cf93ec851f2f2f6cfd72f116c3a +Subproject commit 0adccd72de6d7883e3a8378c62a3458ff183850b From 1f9f9b965d42647572102a48598712192be3a8c3 Mon Sep 17 00:00:00 2001 From: Ghislain MARY Date: Mon, 21 May 2018 11:00:13 +0200 Subject: [PATCH 02/33] Correct handling of onConferenceJoined() and onConferenceLeft() listeners. --- .../org/linphone/chat/GroupChatFragment.java | 43 +++++++++---------- .../org/linphone/chat/GroupInfoFragment.java | 18 ++++---- 2 files changed, 28 insertions(+), 33 deletions(-) diff --git a/src/android/org/linphone/chat/GroupChatFragment.java b/src/android/org/linphone/chat/GroupChatFragment.java index 0a8297be1..52a332243 100644 --- a/src/android/org/linphone/chat/GroupChatFragment.java +++ b/src/android/org/linphone/chat/GroupChatFragment.java @@ -751,19 +751,6 @@ public class GroupChatFragment extends Fragment implements ChatRoomListener, Con } } - /*@Override - public void onAllInformationReceived(ChatRoom cr) { - // Currently flexisip doesn't send the participants list in the INVITE - // So we have to refresh the display when information is available - // In the meantime header will be chatroom-xxxxxxx - if (mChatRoom == null) mChatRoom = cr; - if (mChatRoom.hasCapability(ChatRoomCapabilities.OneToOne.toInt()) && mChatRoom.getParticipants().length > 0) { - mRemoteParticipantAddress = mChatRoom.getParticipants()[0].getAddress(); - } - getContactsForParticipants(); - displayChatRoomHeader(); - }*/ - @Override public void onChatMessageReceived(ChatRoom cr, EventLog event) { cr.markAsRead(); @@ -842,6 +829,26 @@ public class GroupChatFragment extends Fragment implements ChatRoomListener, Con } + @Override + public void onConferenceJoined(ChatRoom cr, EventLog event) { + // Currently flexisip doesn't send the participants list in the INVITE + // So we have to refresh the display when information is available + // In the meantime header will be chatroom-xxxxxxx + if (mChatRoom == null) mChatRoom = cr; + if (mChatRoom.hasCapability(ChatRoomCapabilities.OneToOne.toInt()) && mChatRoom.getParticipants().length > 0) { + mRemoteParticipantAddress = mChatRoom.getParticipants()[0].getAddress(); + } + getContactsForParticipants(); + displayChatRoomHeader(); + + mEventsAdapter.addToHistory(event); + } + + @Override + public void onConferenceLeft(ChatRoom cr, EventLog event) { + mEventsAdapter.addToHistory(event); + } + @Override public void onParticipantAdminStatusChanged(ChatRoom cr, EventLog event) { mEventsAdapter.addToHistory(event); @@ -852,16 +859,6 @@ public class GroupChatFragment extends Fragment implements ChatRoomListener, Con } - @Override - public void onConferenceJoined(ChatRoom cr, EventLog eventLog) { - - } - - @Override - public void onConferenceLeft(ChatRoom cr, EventLog eventLog) { - - } - @Override public void onParticipantRemoved(ChatRoom cr, EventLog event) { getContactsForParticipants(); diff --git a/src/android/org/linphone/chat/GroupInfoFragment.java b/src/android/org/linphone/chat/GroupInfoFragment.java index 1b58b4dee..6828c823e 100644 --- a/src/android/org/linphone/chat/GroupInfoFragment.java +++ b/src/android/org/linphone/chat/GroupInfoFragment.java @@ -382,6 +382,14 @@ public class GroupInfoFragment extends Fragment implements ChatRoomListener { mAdminStateChangedDialog.show(); } + @Override + public void onConferenceJoined(ChatRoom cr, EventLog event_log) { + } + + @Override + public void onConferenceLeft(ChatRoom cr, EventLog event_log) { + } + @Override public void onParticipantAdded(ChatRoom cr, EventLog event_log) { refreshParticipantsList(); @@ -448,16 +456,6 @@ public class GroupInfoFragment extends Fragment implements ChatRoomListener { } - @Override - public void onConferenceJoined(ChatRoom cr, EventLog eventLog) { - - } - - @Override - public void onConferenceLeft(ChatRoom cr, EventLog eventLog) { - - } - @Override public void onParticipantDeviceAdded(ChatRoom cr, EventLog event_log) { From 4555cb7314e9ebc54809a791888036eee68f5e81 Mon Sep 17 00:00:00 2001 From: Ghislain MARY Date: Mon, 21 May 2018 11:00:48 +0200 Subject: [PATCH 03/33] Fix remote provisioning. --- .../org/linphone/assistant/RemoteProvisioningFragment.java | 1 + 1 file changed, 1 insertion(+) diff --git a/src/android/org/linphone/assistant/RemoteProvisioningFragment.java b/src/android/org/linphone/assistant/RemoteProvisioningFragment.java index c02587003..f05aeb7e2 100644 --- a/src/android/org/linphone/assistant/RemoteProvisioningFragment.java +++ b/src/android/org/linphone/assistant/RemoteProvisioningFragment.java @@ -60,6 +60,7 @@ public class RemoteProvisioningFragment extends Fragment implements OnClickListe String url = remoteProvisioningUrl.getText().toString(); AssistantActivity.instance().displayRemoteProvisioningInProgressDialog(); LinphonePreferences.instance().setRemoteProvisioningUrl(url); + LinphoneManager.getLc().getConfig().sync(); LinphoneManager.getInstance().restartCore(); AssistantActivity.instance().setCoreListener(); } From e045cc59f957431b0c2bd44894c5547087175254 Mon Sep 17 00:00:00 2001 From: Ghislain MARY Date: Mon, 21 May 2018 11:01:44 +0200 Subject: [PATCH 04/33] Update bctoolbox and linphone submodules. --- submodules/bctoolbox | 2 +- submodules/linphone | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/submodules/bctoolbox b/submodules/bctoolbox index acf772700..165b04cfe 160000 --- a/submodules/bctoolbox +++ b/submodules/bctoolbox @@ -1 +1 @@ -Subproject commit acf7727002fa4837a25582b5c798516b6b288fac +Subproject commit 165b04cfe93bdc35d247ff4c5d4ac91d6e180e46 diff --git a/submodules/linphone b/submodules/linphone index 0adccd72d..5b9c76ff3 160000 --- a/submodules/linphone +++ b/submodules/linphone @@ -1 +1 @@ -Subproject commit 0adccd72de6d7883e3a8378c62a3458ff183850b +Subproject commit 5b9c76ff31125786f80922acf7074aff5b7f220c From ffbe398ce80566772ab30a75c207a385d450981c Mon Sep 17 00:00:00 2001 From: Erwan Croze Date: Mon, 21 May 2018 14:38:47 +0200 Subject: [PATCH 05/33] Update submodule linphone, bctoolbox --- submodules/bctoolbox | 2 +- submodules/linphone | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/submodules/bctoolbox b/submodules/bctoolbox index 165b04cfe..bc7a47598 160000 --- a/submodules/bctoolbox +++ b/submodules/bctoolbox @@ -1 +1 @@ -Subproject commit 165b04cfe93bdc35d247ff4c5d4ac91d6e180e46 +Subproject commit bc7a47598455d62a73a80f5df70f972b31be5fb8 diff --git a/submodules/linphone b/submodules/linphone index 5b9c76ff3..fc3ac05c5 160000 --- a/submodules/linphone +++ b/submodules/linphone @@ -1 +1 @@ -Subproject commit 5b9c76ff31125786f80922acf7074aff5b7f220c +Subproject commit fc3ac05c5547a56759977268e0a71eab8726e138 From bfc115a539175c74c307dc465072352ace6204cd Mon Sep 17 00:00:00 2001 From: Simon Morlat Date: Tue, 22 May 2018 17:11:33 +0200 Subject: [PATCH 06/33] Fix issue with file transfer from app. --- src/android/org/linphone/chat/GroupChatFragment.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/android/org/linphone/chat/GroupChatFragment.java b/src/android/org/linphone/chat/GroupChatFragment.java index 52a332243..efd54fa38 100644 --- a/src/android/org/linphone/chat/GroupChatFragment.java +++ b/src/android/org/linphone/chat/GroupChatFragment.java @@ -289,7 +289,7 @@ public class GroupChatFragment extends Fragment implements ChatRoomListener, Con if (LinphoneUtils.isExtensionImage(fileToUploadPath)) { addImageToPendingList(fileToUploadPath); } else { - if (fileToUploadPath.startsWith("content://")) { + if (fileToUploadPath.startsWith("content://") || fileToUploadPath.startsWith("file://")) { fileToUploadPath = LinphoneUtils.getFilePath(this.getActivity().getApplicationContext(), Uri.parse(fileToUploadPath)); } else if (fileToUploadPath.contains("com.android.contacts/contacts/")) { fileToUploadPath = LinphoneUtils.getCVSPathFromLookupUri(fileToUploadPath).toString(); From e08180361f69aabfd432bf42abc24930a14a27b4 Mon Sep 17 00:00:00 2001 From: Jehan Monnier Date: Tue, 22 May 2018 18:20:05 +0200 Subject: [PATCH 07/33] update both belle-sip & linphone --- submodules/belle-sip | 2 +- submodules/linphone | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/submodules/belle-sip b/submodules/belle-sip index cbb4ab4c2..5e518b0a9 160000 --- a/submodules/belle-sip +++ b/submodules/belle-sip @@ -1 +1 @@ -Subproject commit cbb4ab4c2a58e4fa1954043f6b17266e1685c887 +Subproject commit 5e518b0a9447dd0ddb49a56c5ba78888810bf401 diff --git a/submodules/linphone b/submodules/linphone index fc3ac05c5..836cbdf97 160000 --- a/submodules/linphone +++ b/submodules/linphone @@ -1 +1 @@ -Subproject commit fc3ac05c5547a56759977268e0a71eab8726e138 +Subproject commit 836cbdf97f28539b80200ac62d9faeb01d4387e9 From aa0169d2ddebb1ec3860bba816ca7a65954590df Mon Sep 17 00:00:00 2001 From: Jehan Monnier Date: Wed, 23 May 2018 08:32:53 +0200 Subject: [PATCH 08/33] [Switch submodule branch] update libxsd submodule --- submodules/externals/libxsd | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/submodules/externals/libxsd b/submodules/externals/libxsd index 97dfa5b7a..34af5de2e 160000 --- a/submodules/externals/libxsd +++ b/submodules/externals/libxsd @@ -1 +1 @@ -Subproject commit 97dfa5b7af486a2730aa66ef4b2b04259c9ab21b +Subproject commit 34af5de2ee71dde72a010fde336d2efa9c386abd From 3b2d86e11e06283a1ccf6293e1e038d0850a7964 Mon Sep 17 00:00:00 2001 From: Jehan Monnier Date: Wed, 23 May 2018 12:33:50 +0200 Subject: [PATCH 09/33] fix vcard grammar loading --- .gitignore | 1 + gradle.properties | 4 ++-- prepare.py | 8 ++++---- res/raw/vcard_grammar | Bin 18454 -> 0 bytes submodules/belcard | 2 +- submodules/linphone | 2 +- 6 files changed, 9 insertions(+), 8 deletions(-) delete mode 100644 res/raw/vcard_grammar diff --git a/.gitignore b/.gitignore index afccd0b7b..7e8c7a41b 100644 --- a/.gitignore +++ b/.gitignore @@ -30,6 +30,7 @@ project.properties res/.DS_Store res/raw/lpconfig.xsd res/raw/rootca.pem +res/raw/*_grammar submodules/externals/build/cunit/CUnit/ submodules/externals/build/ffmpeg/arm/ submodules/externals/build/ffmpeg/x86 diff --git a/gradle.properties b/gradle.properties index 4aca4f094..818481447 100644 --- a/gradle.properties +++ b/gradle.properties @@ -4,5 +4,5 @@ RELEASE_STORE_PASSWORD= RELEASE_KEY_ALIAS= RELEASE_KEY_PASSWORD= -org.gradle.jvmargs=-XX\:MaxHeapSize\=2048M -Xmx2048M -#org.gradle.jvmargs=-Xmx1536M +#org.gradle.jvmargs=-XX\:MaxHeapSize\=2048M -Xmx2048M +org.gradle.jvmargs=-Xmx1536M diff --git a/prepare.py b/prepare.py index ffad5392d..d42cf4b03 100755 --- a/prepare.py +++ b/prepare.py @@ -333,16 +333,16 @@ copy-libs: \t\tcp -R liblinphone-sdk/android-x86/share/linphonej/java/* src/linphone-wrapper; \\ \tfi \tif test -d "liblinphone-sdk/android-arm/share/belr/grammars"; then \\ -\t\tcp liblinphone-sdk/android-arm/share/belr/grammars/cpim_grammar res/raw/; \\ +\t\tcp liblinphone-sdk/android-arm/share/belr/grammars/*_grammar res/raw/; \\ \tfi \tif test -d "liblinphone-sdk/android-armv7/share/belr/grammars"; then \\ -\t\tcp liblinphone-sdk/android-armv7/share/belr/grammars/cpim_grammar res/raw/; \\ +\t\tcp liblinphone-sdk/android-armv7/share/belr/grammars/*_grammar res/raw/; \\ \tfi \tif test -d "liblinphone-sdk/android-arm64/share/belr/grammars"; then \\ -\t\tcp liblinphone-sdk/android-arm64/share/belr/grammars/cpim_grammar res/raw/; \\ +\t\tcp liblinphone-sdk/android-arm64/share/belr/grammars/*_grammar res/raw/; \\ \tfi \tif test -d "liblinphone-sdk/android-x86/share/belr/grammars"; then \\ -\t\tcp liblinphone-sdk/android-x86/share/belr/grammars/cpim_grammar res/raw/; \\ +\t\tcp liblinphone-sdk/android-x86/share/belr/grammars/*_grammar res/raw/; \\ \tfi copy-libs-mediastreamer: diff --git a/res/raw/vcard_grammar b/res/raw/vcard_grammar deleted file mode 100644 index 48ceb8e37075aff072b445bf6973ec1f3eb78fec..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 18454 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 Date: Wed, 23 May 2018 13:58:11 +0200 Subject: [PATCH 10/33] update grade.properties --- gradle.properties | 5 ++--- submodules/bcmatroska2 | 2 +- 2 files changed, 3 insertions(+), 4 deletions(-) diff --git a/gradle.properties b/gradle.properties index 818481447..a4996c82d 100644 --- a/gradle.properties +++ b/gradle.properties @@ -3,6 +3,5 @@ RELEASE_STORE_FILE="" RELEASE_STORE_PASSWORD= RELEASE_KEY_ALIAS= RELEASE_KEY_PASSWORD= - -#org.gradle.jvmargs=-XX\:MaxHeapSize\=2048M -Xmx2048M -org.gradle.jvmargs=-Xmx1536M +#source:https://docs.gradle.org/current/userguide/build_environment.html#sec:configuring_jvm_memory +org.gradle.jvmargs=-Xmx2g -XX:MaxPermSize=256m -XX:+HeapDumpOnOutOfMemoryError -Dfile.encoding=UTF-8 diff --git a/submodules/bcmatroska2 b/submodules/bcmatroska2 index f4b87c521..ca4a89930 160000 --- a/submodules/bcmatroska2 +++ b/submodules/bcmatroska2 @@ -1 +1 @@ -Subproject commit f4b87c521a513b540f34a72ef82a52364929d0be +Subproject commit ca4a89930dd8db94a60ae4a1dbf44a3710497429 From f3ed6853d18f303fb39af5335b50d4e74147c6f3 Mon Sep 17 00:00:00 2001 From: Erwan Croze Date: Sun, 15 Apr 2018 17:32:07 +0200 Subject: [PATCH 11/33] Fixing android tester --- liblinphone_tester/res/raw/cpim_grammar | Bin 0 -> 5239 bytes liblinphone_tester/res/raw/vcard_grammar | Bin 0 -> 18454 bytes .../src/org/linphone/tester/SuitesActivity.java | 7 +++++++ .../src/org/linphone/tester/Tester.java | 3 +++ prepare.py | 1 + 5 files changed, 11 insertions(+) create mode 100644 liblinphone_tester/res/raw/cpim_grammar create mode 100644 liblinphone_tester/res/raw/vcard_grammar diff --git a/liblinphone_tester/res/raw/cpim_grammar b/liblinphone_tester/res/raw/cpim_grammar new file mode 100644 index 0000000000000000000000000000000000000000..6f8b36d954a126b6509342fa2bd3096c72aa2c24 GIT binary patch literal 5239 zcmbtY+m0l~5zVZws@X~7Z}1Mc#S68&mXHMl%SBot`2jz8{bX*gsm|^$sIKa%%P@=3 z!k@vPz#qVykpS5zBJxr_J%fb^EKD+asX+IAF%u9-$V^)>M<%usFY)+((|b%MXxW;V6$A*COc>2~G$WM#4_ zo86`qo?Mk*7&i6>$hbi z2Ws`EHgtEb-qLxsDSM^A(p9hih?DzfMLQCMxxx2EH8%db>Q7pIrL$!@+F~^|%@d2Q z_>h9ByRWQnmnGjfVNqfUx6-xFGqa_XMUFMBfzQH_@PcSK84lnnuQDTjJFw3!tscQX zCB}$hG5(2BV{CaYb|ay){mxj&*ON_DE0;Swcs*Hm+p=z(5@AQm!cxKg?5IVYi~awL zkB_Rrs#T#Qqh6j*9d7%qPVG>YJ2nGC_d^$sw|odpie-wyH}(=*!9-_lCaqfhhu54i zt?uCBA9|5XQg)%$3);Ai{(ovOM~d!p%PhzieD$I7kg|v75@*SNAmRF~kfuwDl4k5a zv#m124rA==cCE5iUvln|d_}Ajew9jBeYZXEWUAGBP`tZeRkN z*N(Oy#AuEz_C^{a37s6-3x&n#_@cBkIw481>+Pz(L=fE5hM^@pJc2ewXKD3@^Dil& zJinanS)HN`6p2XW@3fwnsTzv5D+nfx3tlH?AO>-_>>~M>uM&~qF7@%Z2!X8Bk%JLr zGMFf^D~u%uVZln_{7bSo2?0=GHrR6ppg2ROpGuw(6Nh_XN^V+olCS~TPg=(06%$i& zkd-vn24eTQ-CD{bfSU;gNMw)_UdG$npqBJcaFK2Zx4>8Sm#KFbua?VYZwCYeCV%yl zl-QXE(iT^BGjmX4_mAC9AS$XrbQZJg#D2Ia=@2=*lDH`I=*?K3sbiha)x!BlyoG$Y z2=2P4{|_P^5UvWb>;iW4waU%a;jJ$4Ss@=FRQQ8RiPMw0ktMdbZDqkvi1>ltGqqM9 z>9i@^b;LwO4G|uqBI4gvu5B@vYsFk)#(MAidRz8SieWk<4pD!eZ-9Nbrjgi2XU*q8 zO8OAj0zppKCz{J_1^^}`ko*}l91|jG^$Es3j1!Ef7MyvO69M#*w4XVLwM5w9#wtdX zW1@Q)69`L)Bs~iBJ7%Lm-iglDb9Zue_hnBhK>7IJe)gr@1e{M@okd;bhAa(v3VDko zb^ksRHuPxG5;2R@b~v~;iu2zg{IR=M;P9pCDgkHB3X^l~-fiLWy~ZpA951O*f(MBv9pwxvg7tES;nI;DW+>hZelZav(e;ka)B={Nd0+ZMM`h_0QSc7Nix>|v zUdDJH;}xBGoRtzN?#r$K1SyYkOL{?-NpS#0HgTJjg{J~>6HG|SF*m3r$5Uy)PQA3Z zjnpYfOYjV7{L5%=>tIM69vSw}zsV$Y?)4_2v&*r*@Gmb{I~OM8WXw9&jGY{FQu0Qt zP(>l|e5(7y=fIIx|9~0vx^ZUVA2s+<^grM`!EgWo literal 0 HcmV?d00001 diff --git a/liblinphone_tester/res/raw/vcard_grammar b/liblinphone_tester/res/raw/vcard_grammar new file mode 100644 index 0000000000000000000000000000000000000000..48ceb8e37075aff072b445bf6973ec1f3eb78fec GIT binary patch literal 18454 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 Date: Wed, 23 May 2018 15:30:22 +0200 Subject: [PATCH 12/33] Fixing liblinphone tester --- .gitignore | 1 + liblinphone_tester/Makefile | 12 ++++++++++++ liblinphone_tester/res/raw/cpim_grammar | Bin 5239 -> 0 bytes liblinphone_tester/res/raw/vcard_grammar | Bin 18454 -> 0 bytes submodules/linphone | 2 +- 5 files changed, 14 insertions(+), 1 deletion(-) delete mode 100644 liblinphone_tester/res/raw/cpim_grammar delete mode 100644 liblinphone_tester/res/raw/vcard_grammar diff --git a/.gitignore b/.gitignore index 7e8c7a41b..13a14ee3e 100644 --- a/.gitignore +++ b/.gitignore @@ -53,3 +53,4 @@ gradle.properties .*clang* linphone.iml src/linphone-wrapper +liblinphone_tester/res/raw/ diff --git a/liblinphone_tester/Makefile b/liblinphone_tester/Makefile index 7f7ce7d6a..673f7afe0 100644 --- a/liblinphone_tester/Makefile +++ b/liblinphone_tester/Makefile @@ -57,3 +57,15 @@ copy-files: ../submodules/linphone/tester/tester_hosts cp -rf ../submodules/linphone/tester/rcfiles assets/config_files cp -rf ../submodules/linphone/tester/sounds assets/config_files cp -rf ../submodules/linphone/tester/vcards assets/config_files + if test -d "../liblinphone-sdk/android-arm/share/belr/grammars"; then \ + cp ../liblinphone-sdk/android-arm/share/belr/grammars/*_grammar res/raw/; \ + fi + if test -d "../liblinphone-sdk/android-armv7/share/belr/grammars"; then \ + cp ../liblinphone-sdk/android-armv7/share/belr/grammars/*_grammar res/raw/; \ + fi + if test -d "../liblinphone-sdk/android-arm64/share/belr/grammars"; then \ + cp ../liblinphone-sdk/android-arm64/share/belr/grammars/*_grammar res/raw/; \ + fi + if test -d "../liblinphone-sdk/android-x86/share/belr/grammars"; then \ + cp ../liblinphone-sdk/android-x86/share/belr/grammars/*_grammar res/raw/; \ + fi diff --git a/liblinphone_tester/res/raw/cpim_grammar b/liblinphone_tester/res/raw/cpim_grammar deleted file mode 100644 index 6f8b36d954a126b6509342fa2bd3096c72aa2c24..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 5239 zcmbtY+m0l~5zVZws@X~7Z}1Mc#S68&mXHMl%SBot`2jz8{bX*gsm|^$sIKa%%P@=3 z!k@vPz#qVykpS5zBJxr_J%fb^EKD+asX+IAF%u9-$V^)>M<%usFY)+((|b%MXxW;V6$A*COc>2~G$WM#4_ zo86`qo?Mk*7&i6>$hbi z2Ws`EHgtEb-qLxsDSM^A(p9hih?DzfMLQCMxxx2EH8%db>Q7pIrL$!@+F~^|%@d2Q z_>h9ByRWQnmnGjfVNqfUx6-xFGqa_XMUFMBfzQH_@PcSK84lnnuQDTjJFw3!tscQX zCB}$hG5(2BV{CaYb|ay){mxj&*ON_DE0;Swcs*Hm+p=z(5@AQm!cxKg?5IVYi~awL zkB_Rrs#T#Qqh6j*9d7%qPVG>YJ2nGC_d^$sw|odpie-wyH}(=*!9-_lCaqfhhu54i zt?uCBA9|5XQg)%$3);Ai{(ovOM~d!p%PhzieD$I7kg|v75@*SNAmRF~kfuwDl4k5a zv#m124rA==cCE5iUvln|d_}Ajew9jBeYZXEWUAGBP`tZeRkN z*N(Oy#AuEz_C^{a37s6-3x&n#_@cBkIw481>+Pz(L=fE5hM^@pJc2ewXKD3@^Dil& zJinanS)HN`6p2XW@3fwnsTzv5D+nfx3tlH?AO>-_>>~M>uM&~qF7@%Z2!X8Bk%JLr zGMFf^D~u%uVZln_{7bSo2?0=GHrR6ppg2ROpGuw(6Nh_XN^V+olCS~TPg=(06%$i& zkd-vn24eTQ-CD{bfSU;gNMw)_UdG$npqBJcaFK2Zx4>8Sm#KFbua?VYZwCYeCV%yl zl-QXE(iT^BGjmX4_mAC9AS$XrbQZJg#D2Ia=@2=*lDH`I=*?K3sbiha)x!BlyoG$Y z2=2P4{|_P^5UvWb>;iW4waU%a;jJ$4Ss@=FRQQ8RiPMw0ktMdbZDqkvi1>ltGqqM9 z>9i@^b;LwO4G|uqBI4gvu5B@vYsFk)#(MAidRz8SieWk<4pD!eZ-9Nbrjgi2XU*q8 zO8OAj0zppKCz{J_1^^}`ko*}l91|jG^$Es3j1!Ef7MyvO69M#*w4XVLwM5w9#wtdX zW1@Q)69`L)Bs~iBJ7%Lm-iglDb9Zue_hnBhK>7IJe)gr@1e{M@okd;bhAa(v3VDko zb^ksRHuPxG5;2R@b~v~;iu2zg{IR=M;P9pCDgkHB3X^l~-fiLWy~ZpA951O*f(MBv9pwxvg7tES;nI;DW+>hZelZav(e;ka)B={Nd0+ZMM`h_0QSc7Nix>|v zUdDJH;}xBGoRtzN?#r$K1SyYkOL{?-NpS#0HgTJjg{J~>6HG|SF*m3r$5Uy)PQA3Z zjnpYfOYjV7{L5%=>tIM69vSw}zsV$Y?)4_2v&*r*@Gmb{I~OM8WXw9&jGY{FQu0Qt zP(>l|e5(7y=fIIx|9~0vx^ZUVA2s+<^grM`!EgWo diff --git a/liblinphone_tester/res/raw/vcard_grammar b/liblinphone_tester/res/raw/vcard_grammar deleted file mode 100644 index 48ceb8e37075aff072b445bf6973ec1f3eb78fec..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 18454 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 Date: Wed, 23 May 2018 15:30:34 +0200 Subject: [PATCH 13/33] Updating version number --- AndroidManifest.xml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/AndroidManifest.xml b/AndroidManifest.xml index eb5f9c082..3583d1d66 100755 --- a/AndroidManifest.xml +++ b/AndroidManifest.xml @@ -2,8 +2,8 @@ + android:versionCode="3996" + android:versionName="3.99.5"> Date: Wed, 23 May 2018 16:59:42 +0200 Subject: [PATCH 14/33] Update submodule linphone --- submodules/linphone | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/submodules/linphone b/submodules/linphone index 9986a5e9d..c6e2ef105 160000 --- a/submodules/linphone +++ b/submodules/linphone @@ -1 +1 @@ -Subproject commit 9986a5e9d5a6b63510128c6704a9a0f803d917ee +Subproject commit c6e2ef105c31ce7a630338816469817458d0b17b From ab8995ba63e330e0ad58eb605b75820c9a04646d Mon Sep 17 00:00:00 2001 From: Jehan Monnier Date: Wed, 23 May 2018 18:22:55 +0200 Subject: [PATCH 15/33] fix liblinphone tester --- liblinphone_tester/AndroidManifest.xml | 5 ++++- liblinphone_tester/gradlew | 6 +++--- submodules/linphone | 2 +- 3 files changed, 8 insertions(+), 5 deletions(-) diff --git a/liblinphone_tester/AndroidManifest.xml b/liblinphone_tester/AndroidManifest.xml index eef56e227..c733b0e01 100644 --- a/liblinphone_tester/AndroidManifest.xml +++ b/liblinphone_tester/AndroidManifest.xml @@ -17,7 +17,10 @@ - + + + + Date: Wed, 23 May 2018 18:51:04 +0200 Subject: [PATCH 16/33] Updated sqlite3 to support NDK 17 --- prepare.py | 2 +- submodules/externals/sqlite3/shell.c | 9050 ++++++++++++-- submodules/externals/sqlite3/sqlite3.c | 12299 ++++++++++++++------ submodules/externals/sqlite3/sqlite3.h | 658 +- submodules/externals/sqlite3/sqlite3ext.h | 7 + 5 files changed, 17405 insertions(+), 4611 deletions(-) diff --git a/prepare.py b/prepare.py index b32646701..97699c103 100755 --- a/prepare.py +++ b/prepare.py @@ -104,7 +104,7 @@ class AndroidPreparator(prepare.Preparator): def __init__(self, targets=android_targets): prepare.Preparator.__init__(self, targets, default_targets=['armv7', 'arm64'], virtual_targets=android_virtual_targets) self.min_supported_ndk = 16 - self.max_supported_ndk = 16 + self.max_supported_ndk = 17 self.unsupported_ndk_version = None self.min_cmake_version = "3.10" self.release_with_debug_info = True diff --git a/submodules/externals/sqlite3/shell.c b/submodules/externals/sqlite3/shell.c index f922c818b..3ab3472e6 100644 --- a/submodules/externals/sqlite3/shell.c +++ b/submodules/externals/sqlite3/shell.c @@ -79,6 +79,9 @@ #include #include #include "sqlite3.h" +typedef sqlite3_int64 i64; +typedef sqlite3_uint64 u64; +typedef unsigned char u8; #if SQLITE_USER_AUTHENTICATION # include "sqlite3userauth.h" #endif @@ -90,9 +93,19 @@ # if !defined(__RTP__) && !defined(_WRS_KERNEL) # include # endif -# include -# include #endif +#if (!defined(_WIN32) && !defined(WIN32)) || defined(__MINGW32__) +# include +# include +# if defined(__MINGW32__) +# define DIRENT dirent +# ifndef S_ISLNK +# define S_ISLNK(mode) (0) +# endif +# endif +#endif +#include +#include #if HAVE_READLINE # include @@ -137,6 +150,9 @@ # ifndef access # define access(f,m) _access((f),(m)) # endif +# ifndef unlink +# define unlink _unlink +# endif # undef popen # define popen _popen # undef pclose @@ -357,6 +373,11 @@ static void endTimer(void){ */ #define UNUSED_PARAMETER(x) (void)(x) +/* +** Number of elements in an array +*/ +#define ArraySize(X) (int)(sizeof(X)/sizeof(X[0])) + /* ** If the following flag is set, then command execution stops ** at an error if we are not interactive. @@ -629,6 +650,65 @@ static char *one_input_line(FILE *in, char *zPrior, int isContinuation){ } return zResult; } + + +/* +** Return the value of a hexadecimal digit. Return -1 if the input +** is not a hex digit. +*/ +static int hexDigitValue(char c){ + if( c>='0' && c<='9' ) return c - '0'; + if( c>='a' && c<='f' ) return c - 'a' + 10; + if( c>='A' && c<='F' ) return c - 'A' + 10; + return -1; +} + +/* +** Interpret zArg as an integer value, possibly with suffixes. +*/ +static sqlite3_int64 integerValue(const char *zArg){ + sqlite3_int64 v = 0; + static const struct { char *zSuffix; int iMult; } aMult[] = { + { "KiB", 1024 }, + { "MiB", 1024*1024 }, + { "GiB", 1024*1024*1024 }, + { "KB", 1000 }, + { "MB", 1000000 }, + { "GB", 1000000000 }, + { "K", 1000 }, + { "M", 1000000 }, + { "G", 1000000000 }, + }; + int i; + int isNeg = 0; + if( zArg[0]=='-' ){ + isNeg = 1; + zArg++; + }else if( zArg[0]=='+' ){ + zArg++; + } + if( zArg[0]=='0' && zArg[1]=='x' ){ + int x; + zArg += 2; + while( (x = hexDigitValue(zArg[0]))>=0 ){ + v = (v<<4) + x; + zArg++; + } + }else{ + while( IsDigit(zArg[0]) ){ + v = v*10 + zArg[0] - '0'; + zArg++; + } + } + for(i=0; i +#include +#include +#include +#include +#include +#include + +/* +** We may need several defines that should have been in "sys/stat.h". +*/ + +#ifndef S_ISREG +#define S_ISREG(mode) (((mode) & S_IFMT) == S_IFREG) +#endif + +#ifndef S_ISDIR +#define S_ISDIR(mode) (((mode) & S_IFMT) == S_IFDIR) +#endif + +#ifndef S_ISLNK +#define S_ISLNK(mode) (0) +#endif + +/* +** We may need to provide the "mode_t" type. +*/ + +#ifndef MODE_T_DEFINED + #define MODE_T_DEFINED + typedef unsigned short mode_t; +#endif + +/* +** We may need to provide the "ino_t" type. +*/ + +#ifndef INO_T_DEFINED + #define INO_T_DEFINED + typedef unsigned short ino_t; +#endif + +/* +** We need to define "NAME_MAX" if it was not present in "limits.h". +*/ + +#ifndef NAME_MAX +# ifdef FILENAME_MAX +# define NAME_MAX (FILENAME_MAX) +# else +# define NAME_MAX (260) +# endif +#endif + +/* +** We need to define "NULL_INTPTR_T" and "BAD_INTPTR_T". +*/ + +#ifndef NULL_INTPTR_T +# define NULL_INTPTR_T ((intptr_t)(0)) +#endif + +#ifndef BAD_INTPTR_T +# define BAD_INTPTR_T ((intptr_t)(-1)) +#endif + +/* +** We need to provide the necessary structures and related types. +*/ + +#ifndef DIRENT_DEFINED +#define DIRENT_DEFINED +typedef struct DIRENT DIRENT; +typedef DIRENT *LPDIRENT; +struct DIRENT { + ino_t d_ino; /* Sequence number, do not use. */ + unsigned d_attributes; /* Win32 file attributes. */ + char d_name[NAME_MAX + 1]; /* Name within the directory. */ +}; +#endif + +#ifndef DIR_DEFINED +#define DIR_DEFINED +typedef struct DIR DIR; +typedef DIR *LPDIR; +struct DIR { + intptr_t d_handle; /* Value returned by "_findfirst". */ + DIRENT d_first; /* DIRENT constructed based on "_findfirst". */ + DIRENT d_next; /* DIRENT constructed based on "_findnext". */ +}; +#endif + +/* +** Provide a macro, for use by the implementation, to determine if a +** particular directory entry should be skipped over when searching for +** the next directory entry that should be returned by the readdir() or +** readdir_r() functions. +*/ + +#ifndef is_filtered +# define is_filtered(a) ((((a).attrib)&_A_HIDDEN) || (((a).attrib)&_A_SYSTEM)) +#endif + +/* +** Provide the function prototype for the POSIX compatiable getenv() +** function. This function is not thread-safe. +*/ + +extern const char *windirent_getenv(const char *name); + +/* +** Finally, we can provide the function prototypes for the opendir(), +** readdir(), readdir_r(), and closedir() POSIX functions. +*/ + +extern LPDIR opendir(const char *dirname); +extern LPDIRENT readdir(LPDIR dirp); +extern INT readdir_r(LPDIR dirp, LPDIRENT entry, LPDIRENT *result); +extern INT closedir(LPDIR dirp); + +#endif /* defined(WIN32) && defined(_MSC_VER) */ + +/************************* End test_windirent.h ********************/ +/************************* Begin test_windirent.c ******************/ +/* +** 2015 November 30 +** +** The author disclaims copyright to this source code. In place of +** a legal notice, here is a blessing: +** +** May you do good and not evil. +** May you find forgiveness for yourself and forgive others. +** May you share freely, never taking more than you give. +** +************************************************************************* +** This file contains code to implement most of the opendir() family of +** POSIX functions on Win32 using the MSVCRT. +*/ + +#if defined(_WIN32) && defined(_MSC_VER) +/* #include "test_windirent.h" */ + +/* +** Implementation of the POSIX getenv() function using the Win32 API. +** This function is not thread-safe. +*/ +const char *windirent_getenv( + const char *name +){ + static char value[32768]; /* Maximum length, per MSDN */ + DWORD dwSize = sizeof(value) / sizeof(char); /* Size in chars */ + DWORD dwRet; /* Value returned by GetEnvironmentVariableA() */ + + memset(value, 0, sizeof(value)); + dwRet = GetEnvironmentVariableA(name, value, dwSize); + if( dwRet==0 || dwRet>dwSize ){ + /* + ** The function call to GetEnvironmentVariableA() failed -OR- + ** the buffer is not large enough. Either way, return NULL. + */ + return 0; + }else{ + /* + ** The function call to GetEnvironmentVariableA() succeeded + ** -AND- the buffer contains the entire value. + */ + return value; + } +} + +/* +** Implementation of the POSIX opendir() function using the MSVCRT. +*/ +LPDIR opendir( + const char *dirname +){ + struct _finddata_t data; + LPDIR dirp = (LPDIR)sqlite3_malloc(sizeof(DIR)); + SIZE_T namesize = sizeof(data.name) / sizeof(data.name[0]); + + if( dirp==NULL ) return NULL; + memset(dirp, 0, sizeof(DIR)); + + /* TODO: Remove this if Unix-style root paths are not used. */ + if( sqlite3_stricmp(dirname, "/")==0 ){ + dirname = windirent_getenv("SystemDrive"); + } + + memset(&data, 0, sizeof(struct _finddata_t)); + _snprintf(data.name, namesize, "%s\\*", dirname); + dirp->d_handle = _findfirst(data.name, &data); + + if( dirp->d_handle==BAD_INTPTR_T ){ + closedir(dirp); + return NULL; + } + + /* TODO: Remove this block to allow hidden and/or system files. */ + if( is_filtered(data) ){ +next: + + memset(&data, 0, sizeof(struct _finddata_t)); + if( _findnext(dirp->d_handle, &data)==-1 ){ + closedir(dirp); + return NULL; + } + + /* TODO: Remove this block to allow hidden and/or system files. */ + if( is_filtered(data) ) goto next; + } + + dirp->d_first.d_attributes = data.attrib; + strncpy(dirp->d_first.d_name, data.name, NAME_MAX); + dirp->d_first.d_name[NAME_MAX] = '\0'; + + return dirp; +} + +/* +** Implementation of the POSIX readdir() function using the MSVCRT. +*/ +LPDIRENT readdir( + LPDIR dirp +){ + struct _finddata_t data; + + if( dirp==NULL ) return NULL; + + if( dirp->d_first.d_ino==0 ){ + dirp->d_first.d_ino++; + dirp->d_next.d_ino++; + + return &dirp->d_first; + } + +next: + + memset(&data, 0, sizeof(struct _finddata_t)); + if( _findnext(dirp->d_handle, &data)==-1 ) return NULL; + + /* TODO: Remove this block to allow hidden and/or system files. */ + if( is_filtered(data) ) goto next; + + dirp->d_next.d_ino++; + dirp->d_next.d_attributes = data.attrib; + strncpy(dirp->d_next.d_name, data.name, NAME_MAX); + dirp->d_next.d_name[NAME_MAX] = '\0'; + + return &dirp->d_next; +} + +/* +** Implementation of the POSIX readdir_r() function using the MSVCRT. +*/ +INT readdir_r( + LPDIR dirp, + LPDIRENT entry, + LPDIRENT *result +){ + struct _finddata_t data; + + if( dirp==NULL ) return EBADF; + + if( dirp->d_first.d_ino==0 ){ + dirp->d_first.d_ino++; + dirp->d_next.d_ino++; + + entry->d_ino = dirp->d_first.d_ino; + entry->d_attributes = dirp->d_first.d_attributes; + strncpy(entry->d_name, dirp->d_first.d_name, NAME_MAX); + entry->d_name[NAME_MAX] = '\0'; + + *result = entry; + return 0; + } + +next: + + memset(&data, 0, sizeof(struct _finddata_t)); + if( _findnext(dirp->d_handle, &data)==-1 ){ + *result = NULL; + return ENOENT; + } + + /* TODO: Remove this block to allow hidden and/or system files. */ + if( is_filtered(data) ) goto next; + + entry->d_ino = (ino_t)-1; /* not available */ + entry->d_attributes = data.attrib; + strncpy(entry->d_name, data.name, NAME_MAX); + entry->d_name[NAME_MAX] = '\0'; + + *result = entry; + return 0; +} + +/* +** Implementation of the POSIX closedir() function using the MSVCRT. +*/ +INT closedir( + LPDIR dirp +){ + INT result = 0; + + if( dirp==NULL ) return EINVAL; + + if( dirp->d_handle!=NULL_INTPTR_T && dirp->d_handle!=BAD_INTPTR_T ){ + result = _findclose(dirp->d_handle); + } + + sqlite3_free(dirp); + return result; +} + +#endif /* defined(WIN32) && defined(_MSC_VER) */ + +/************************* End test_windirent.c ********************/ +#define dirent DIRENT +#endif /************************* Begin ../ext/misc/shathree.c ******************/ /* ** 2017-03-08 @@ -844,7 +1367,7 @@ SQLITE_EXTENSION_INIT1 #include #include #include -typedef sqlite3_uint64 u64; +/* typedef sqlite3_uint64 u64; */ /****************************************************************************** ** The Hash Engine @@ -891,9 +1414,9 @@ struct SHA3Context { */ static void KeccakF1600Step(SHA3Context *p){ int i; - u64 B0, B1, B2, B3, B4; - u64 C0, C1, C2, C3, C4; - u64 D0, D1, D2, D3, D4; + u64 b0, b1, b2, b3, b4; + u64 c0, c1, c2, c3, c4; + u64 d0, d1, d2, d3, d4; static const u64 RC[] = { 0x0000000000000001ULL, 0x0000000000008082ULL, 0x800000000000808aULL, 0x8000000080008000ULL, @@ -908,301 +1431,301 @@ static void KeccakF1600Step(SHA3Context *p){ 0x8000000080008081ULL, 0x8000000000008080ULL, 0x0000000080000001ULL, 0x8000000080008008ULL }; -# define A00 (p->u.s[0]) -# define A01 (p->u.s[1]) -# define A02 (p->u.s[2]) -# define A03 (p->u.s[3]) -# define A04 (p->u.s[4]) -# define A10 (p->u.s[5]) -# define A11 (p->u.s[6]) -# define A12 (p->u.s[7]) -# define A13 (p->u.s[8]) -# define A14 (p->u.s[9]) -# define A20 (p->u.s[10]) -# define A21 (p->u.s[11]) -# define A22 (p->u.s[12]) -# define A23 (p->u.s[13]) -# define A24 (p->u.s[14]) -# define A30 (p->u.s[15]) -# define A31 (p->u.s[16]) -# define A32 (p->u.s[17]) -# define A33 (p->u.s[18]) -# define A34 (p->u.s[19]) -# define A40 (p->u.s[20]) -# define A41 (p->u.s[21]) -# define A42 (p->u.s[22]) -# define A43 (p->u.s[23]) -# define A44 (p->u.s[24]) +# define a00 (p->u.s[0]) +# define a01 (p->u.s[1]) +# define a02 (p->u.s[2]) +# define a03 (p->u.s[3]) +# define a04 (p->u.s[4]) +# define a10 (p->u.s[5]) +# define a11 (p->u.s[6]) +# define a12 (p->u.s[7]) +# define a13 (p->u.s[8]) +# define a14 (p->u.s[9]) +# define a20 (p->u.s[10]) +# define a21 (p->u.s[11]) +# define a22 (p->u.s[12]) +# define a23 (p->u.s[13]) +# define a24 (p->u.s[14]) +# define a30 (p->u.s[15]) +# define a31 (p->u.s[16]) +# define a32 (p->u.s[17]) +# define a33 (p->u.s[18]) +# define a34 (p->u.s[19]) +# define a40 (p->u.s[20]) +# define a41 (p->u.s[21]) +# define a42 (p->u.s[22]) +# define a43 (p->u.s[23]) +# define a44 (p->u.s[24]) # define ROL64(a,x) ((a<>(64-x))) for(i=0; i<24; i+=4){ - C0 = A00^A10^A20^A30^A40; - C1 = A01^A11^A21^A31^A41; - C2 = A02^A12^A22^A32^A42; - C3 = A03^A13^A23^A33^A43; - C4 = A04^A14^A24^A34^A44; - D0 = C4^ROL64(C1, 1); - D1 = C0^ROL64(C2, 1); - D2 = C1^ROL64(C3, 1); - D3 = C2^ROL64(C4, 1); - D4 = C3^ROL64(C0, 1); + c0 = a00^a10^a20^a30^a40; + c1 = a01^a11^a21^a31^a41; + c2 = a02^a12^a22^a32^a42; + c3 = a03^a13^a23^a33^a43; + c4 = a04^a14^a24^a34^a44; + d0 = c4^ROL64(c1, 1); + d1 = c0^ROL64(c2, 1); + d2 = c1^ROL64(c3, 1); + d3 = c2^ROL64(c4, 1); + d4 = c3^ROL64(c0, 1); - B0 = (A00^D0); - B1 = ROL64((A11^D1), 44); - B2 = ROL64((A22^D2), 43); - B3 = ROL64((A33^D3), 21); - B4 = ROL64((A44^D4), 14); - A00 = B0 ^((~B1)& B2 ); - A00 ^= RC[i]; - A11 = B1 ^((~B2)& B3 ); - A22 = B2 ^((~B3)& B4 ); - A33 = B3 ^((~B4)& B0 ); - A44 = B4 ^((~B0)& B1 ); + b0 = (a00^d0); + b1 = ROL64((a11^d1), 44); + b2 = ROL64((a22^d2), 43); + b3 = ROL64((a33^d3), 21); + b4 = ROL64((a44^d4), 14); + a00 = b0 ^((~b1)& b2 ); + a00 ^= RC[i]; + a11 = b1 ^((~b2)& b3 ); + a22 = b2 ^((~b3)& b4 ); + a33 = b3 ^((~b4)& b0 ); + a44 = b4 ^((~b0)& b1 ); - B2 = ROL64((A20^D0), 3); - B3 = ROL64((A31^D1), 45); - B4 = ROL64((A42^D2), 61); - B0 = ROL64((A03^D3), 28); - B1 = ROL64((A14^D4), 20); - A20 = B0 ^((~B1)& B2 ); - A31 = B1 ^((~B2)& B3 ); - A42 = B2 ^((~B3)& B4 ); - A03 = B3 ^((~B4)& B0 ); - A14 = B4 ^((~B0)& B1 ); + b2 = ROL64((a20^d0), 3); + b3 = ROL64((a31^d1), 45); + b4 = ROL64((a42^d2), 61); + b0 = ROL64((a03^d3), 28); + b1 = ROL64((a14^d4), 20); + a20 = b0 ^((~b1)& b2 ); + a31 = b1 ^((~b2)& b3 ); + a42 = b2 ^((~b3)& b4 ); + a03 = b3 ^((~b4)& b0 ); + a14 = b4 ^((~b0)& b1 ); - B4 = ROL64((A40^D0), 18); - B0 = ROL64((A01^D1), 1); - B1 = ROL64((A12^D2), 6); - B2 = ROL64((A23^D3), 25); - B3 = ROL64((A34^D4), 8); - A40 = B0 ^((~B1)& B2 ); - A01 = B1 ^((~B2)& B3 ); - A12 = B2 ^((~B3)& B4 ); - A23 = B3 ^((~B4)& B0 ); - A34 = B4 ^((~B0)& B1 ); + b4 = ROL64((a40^d0), 18); + b0 = ROL64((a01^d1), 1); + b1 = ROL64((a12^d2), 6); + b2 = ROL64((a23^d3), 25); + b3 = ROL64((a34^d4), 8); + a40 = b0 ^((~b1)& b2 ); + a01 = b1 ^((~b2)& b3 ); + a12 = b2 ^((~b3)& b4 ); + a23 = b3 ^((~b4)& b0 ); + a34 = b4 ^((~b0)& b1 ); - B1 = ROL64((A10^D0), 36); - B2 = ROL64((A21^D1), 10); - B3 = ROL64((A32^D2), 15); - B4 = ROL64((A43^D3), 56); - B0 = ROL64((A04^D4), 27); - A10 = B0 ^((~B1)& B2 ); - A21 = B1 ^((~B2)& B3 ); - A32 = B2 ^((~B3)& B4 ); - A43 = B3 ^((~B4)& B0 ); - A04 = B4 ^((~B0)& B1 ); + b1 = ROL64((a10^d0), 36); + b2 = ROL64((a21^d1), 10); + b3 = ROL64((a32^d2), 15); + b4 = ROL64((a43^d3), 56); + b0 = ROL64((a04^d4), 27); + a10 = b0 ^((~b1)& b2 ); + a21 = b1 ^((~b2)& b3 ); + a32 = b2 ^((~b3)& b4 ); + a43 = b3 ^((~b4)& b0 ); + a04 = b4 ^((~b0)& b1 ); - B3 = ROL64((A30^D0), 41); - B4 = ROL64((A41^D1), 2); - B0 = ROL64((A02^D2), 62); - B1 = ROL64((A13^D3), 55); - B2 = ROL64((A24^D4), 39); - A30 = B0 ^((~B1)& B2 ); - A41 = B1 ^((~B2)& B3 ); - A02 = B2 ^((~B3)& B4 ); - A13 = B3 ^((~B4)& B0 ); - A24 = B4 ^((~B0)& B1 ); + b3 = ROL64((a30^d0), 41); + b4 = ROL64((a41^d1), 2); + b0 = ROL64((a02^d2), 62); + b1 = ROL64((a13^d3), 55); + b2 = ROL64((a24^d4), 39); + a30 = b0 ^((~b1)& b2 ); + a41 = b1 ^((~b2)& b3 ); + a02 = b2 ^((~b3)& b4 ); + a13 = b3 ^((~b4)& b0 ); + a24 = b4 ^((~b0)& b1 ); - C0 = A00^A20^A40^A10^A30; - C1 = A11^A31^A01^A21^A41; - C2 = A22^A42^A12^A32^A02; - C3 = A33^A03^A23^A43^A13; - C4 = A44^A14^A34^A04^A24; - D0 = C4^ROL64(C1, 1); - D1 = C0^ROL64(C2, 1); - D2 = C1^ROL64(C3, 1); - D3 = C2^ROL64(C4, 1); - D4 = C3^ROL64(C0, 1); + c0 = a00^a20^a40^a10^a30; + c1 = a11^a31^a01^a21^a41; + c2 = a22^a42^a12^a32^a02; + c3 = a33^a03^a23^a43^a13; + c4 = a44^a14^a34^a04^a24; + d0 = c4^ROL64(c1, 1); + d1 = c0^ROL64(c2, 1); + d2 = c1^ROL64(c3, 1); + d3 = c2^ROL64(c4, 1); + d4 = c3^ROL64(c0, 1); - B0 = (A00^D0); - B1 = ROL64((A31^D1), 44); - B2 = ROL64((A12^D2), 43); - B3 = ROL64((A43^D3), 21); - B4 = ROL64((A24^D4), 14); - A00 = B0 ^((~B1)& B2 ); - A00 ^= RC[i+1]; - A31 = B1 ^((~B2)& B3 ); - A12 = B2 ^((~B3)& B4 ); - A43 = B3 ^((~B4)& B0 ); - A24 = B4 ^((~B0)& B1 ); + b0 = (a00^d0); + b1 = ROL64((a31^d1), 44); + b2 = ROL64((a12^d2), 43); + b3 = ROL64((a43^d3), 21); + b4 = ROL64((a24^d4), 14); + a00 = b0 ^((~b1)& b2 ); + a00 ^= RC[i+1]; + a31 = b1 ^((~b2)& b3 ); + a12 = b2 ^((~b3)& b4 ); + a43 = b3 ^((~b4)& b0 ); + a24 = b4 ^((~b0)& b1 ); - B2 = ROL64((A40^D0), 3); - B3 = ROL64((A21^D1), 45); - B4 = ROL64((A02^D2), 61); - B0 = ROL64((A33^D3), 28); - B1 = ROL64((A14^D4), 20); - A40 = B0 ^((~B1)& B2 ); - A21 = B1 ^((~B2)& B3 ); - A02 = B2 ^((~B3)& B4 ); - A33 = B3 ^((~B4)& B0 ); - A14 = B4 ^((~B0)& B1 ); + b2 = ROL64((a40^d0), 3); + b3 = ROL64((a21^d1), 45); + b4 = ROL64((a02^d2), 61); + b0 = ROL64((a33^d3), 28); + b1 = ROL64((a14^d4), 20); + a40 = b0 ^((~b1)& b2 ); + a21 = b1 ^((~b2)& b3 ); + a02 = b2 ^((~b3)& b4 ); + a33 = b3 ^((~b4)& b0 ); + a14 = b4 ^((~b0)& b1 ); - B4 = ROL64((A30^D0), 18); - B0 = ROL64((A11^D1), 1); - B1 = ROL64((A42^D2), 6); - B2 = ROL64((A23^D3), 25); - B3 = ROL64((A04^D4), 8); - A30 = B0 ^((~B1)& B2 ); - A11 = B1 ^((~B2)& B3 ); - A42 = B2 ^((~B3)& B4 ); - A23 = B3 ^((~B4)& B0 ); - A04 = B4 ^((~B0)& B1 ); + b4 = ROL64((a30^d0), 18); + b0 = ROL64((a11^d1), 1); + b1 = ROL64((a42^d2), 6); + b2 = ROL64((a23^d3), 25); + b3 = ROL64((a04^d4), 8); + a30 = b0 ^((~b1)& b2 ); + a11 = b1 ^((~b2)& b3 ); + a42 = b2 ^((~b3)& b4 ); + a23 = b3 ^((~b4)& b0 ); + a04 = b4 ^((~b0)& b1 ); - B1 = ROL64((A20^D0), 36); - B2 = ROL64((A01^D1), 10); - B3 = ROL64((A32^D2), 15); - B4 = ROL64((A13^D3), 56); - B0 = ROL64((A44^D4), 27); - A20 = B0 ^((~B1)& B2 ); - A01 = B1 ^((~B2)& B3 ); - A32 = B2 ^((~B3)& B4 ); - A13 = B3 ^((~B4)& B0 ); - A44 = B4 ^((~B0)& B1 ); + b1 = ROL64((a20^d0), 36); + b2 = ROL64((a01^d1), 10); + b3 = ROL64((a32^d2), 15); + b4 = ROL64((a13^d3), 56); + b0 = ROL64((a44^d4), 27); + a20 = b0 ^((~b1)& b2 ); + a01 = b1 ^((~b2)& b3 ); + a32 = b2 ^((~b3)& b4 ); + a13 = b3 ^((~b4)& b0 ); + a44 = b4 ^((~b0)& b1 ); - B3 = ROL64((A10^D0), 41); - B4 = ROL64((A41^D1), 2); - B0 = ROL64((A22^D2), 62); - B1 = ROL64((A03^D3), 55); - B2 = ROL64((A34^D4), 39); - A10 = B0 ^((~B1)& B2 ); - A41 = B1 ^((~B2)& B3 ); - A22 = B2 ^((~B3)& B4 ); - A03 = B3 ^((~B4)& B0 ); - A34 = B4 ^((~B0)& B1 ); + b3 = ROL64((a10^d0), 41); + b4 = ROL64((a41^d1), 2); + b0 = ROL64((a22^d2), 62); + b1 = ROL64((a03^d3), 55); + b2 = ROL64((a34^d4), 39); + a10 = b0 ^((~b1)& b2 ); + a41 = b1 ^((~b2)& b3 ); + a22 = b2 ^((~b3)& b4 ); + a03 = b3 ^((~b4)& b0 ); + a34 = b4 ^((~b0)& b1 ); - C0 = A00^A40^A30^A20^A10; - C1 = A31^A21^A11^A01^A41; - C2 = A12^A02^A42^A32^A22; - C3 = A43^A33^A23^A13^A03; - C4 = A24^A14^A04^A44^A34; - D0 = C4^ROL64(C1, 1); - D1 = C0^ROL64(C2, 1); - D2 = C1^ROL64(C3, 1); - D3 = C2^ROL64(C4, 1); - D4 = C3^ROL64(C0, 1); + c0 = a00^a40^a30^a20^a10; + c1 = a31^a21^a11^a01^a41; + c2 = a12^a02^a42^a32^a22; + c3 = a43^a33^a23^a13^a03; + c4 = a24^a14^a04^a44^a34; + d0 = c4^ROL64(c1, 1); + d1 = c0^ROL64(c2, 1); + d2 = c1^ROL64(c3, 1); + d3 = c2^ROL64(c4, 1); + d4 = c3^ROL64(c0, 1); - B0 = (A00^D0); - B1 = ROL64((A21^D1), 44); - B2 = ROL64((A42^D2), 43); - B3 = ROL64((A13^D3), 21); - B4 = ROL64((A34^D4), 14); - A00 = B0 ^((~B1)& B2 ); - A00 ^= RC[i+2]; - A21 = B1 ^((~B2)& B3 ); - A42 = B2 ^((~B3)& B4 ); - A13 = B3 ^((~B4)& B0 ); - A34 = B4 ^((~B0)& B1 ); + b0 = (a00^d0); + b1 = ROL64((a21^d1), 44); + b2 = ROL64((a42^d2), 43); + b3 = ROL64((a13^d3), 21); + b4 = ROL64((a34^d4), 14); + a00 = b0 ^((~b1)& b2 ); + a00 ^= RC[i+2]; + a21 = b1 ^((~b2)& b3 ); + a42 = b2 ^((~b3)& b4 ); + a13 = b3 ^((~b4)& b0 ); + a34 = b4 ^((~b0)& b1 ); - B2 = ROL64((A30^D0), 3); - B3 = ROL64((A01^D1), 45); - B4 = ROL64((A22^D2), 61); - B0 = ROL64((A43^D3), 28); - B1 = ROL64((A14^D4), 20); - A30 = B0 ^((~B1)& B2 ); - A01 = B1 ^((~B2)& B3 ); - A22 = B2 ^((~B3)& B4 ); - A43 = B3 ^((~B4)& B0 ); - A14 = B4 ^((~B0)& B1 ); + b2 = ROL64((a30^d0), 3); + b3 = ROL64((a01^d1), 45); + b4 = ROL64((a22^d2), 61); + b0 = ROL64((a43^d3), 28); + b1 = ROL64((a14^d4), 20); + a30 = b0 ^((~b1)& b2 ); + a01 = b1 ^((~b2)& b3 ); + a22 = b2 ^((~b3)& b4 ); + a43 = b3 ^((~b4)& b0 ); + a14 = b4 ^((~b0)& b1 ); - B4 = ROL64((A10^D0), 18); - B0 = ROL64((A31^D1), 1); - B1 = ROL64((A02^D2), 6); - B2 = ROL64((A23^D3), 25); - B3 = ROL64((A44^D4), 8); - A10 = B0 ^((~B1)& B2 ); - A31 = B1 ^((~B2)& B3 ); - A02 = B2 ^((~B3)& B4 ); - A23 = B3 ^((~B4)& B0 ); - A44 = B4 ^((~B0)& B1 ); + b4 = ROL64((a10^d0), 18); + b0 = ROL64((a31^d1), 1); + b1 = ROL64((a02^d2), 6); + b2 = ROL64((a23^d3), 25); + b3 = ROL64((a44^d4), 8); + a10 = b0 ^((~b1)& b2 ); + a31 = b1 ^((~b2)& b3 ); + a02 = b2 ^((~b3)& b4 ); + a23 = b3 ^((~b4)& b0 ); + a44 = b4 ^((~b0)& b1 ); - B1 = ROL64((A40^D0), 36); - B2 = ROL64((A11^D1), 10); - B3 = ROL64((A32^D2), 15); - B4 = ROL64((A03^D3), 56); - B0 = ROL64((A24^D4), 27); - A40 = B0 ^((~B1)& B2 ); - A11 = B1 ^((~B2)& B3 ); - A32 = B2 ^((~B3)& B4 ); - A03 = B3 ^((~B4)& B0 ); - A24 = B4 ^((~B0)& B1 ); + b1 = ROL64((a40^d0), 36); + b2 = ROL64((a11^d1), 10); + b3 = ROL64((a32^d2), 15); + b4 = ROL64((a03^d3), 56); + b0 = ROL64((a24^d4), 27); + a40 = b0 ^((~b1)& b2 ); + a11 = b1 ^((~b2)& b3 ); + a32 = b2 ^((~b3)& b4 ); + a03 = b3 ^((~b4)& b0 ); + a24 = b4 ^((~b0)& b1 ); - B3 = ROL64((A20^D0), 41); - B4 = ROL64((A41^D1), 2); - B0 = ROL64((A12^D2), 62); - B1 = ROL64((A33^D3), 55); - B2 = ROL64((A04^D4), 39); - A20 = B0 ^((~B1)& B2 ); - A41 = B1 ^((~B2)& B3 ); - A12 = B2 ^((~B3)& B4 ); - A33 = B3 ^((~B4)& B0 ); - A04 = B4 ^((~B0)& B1 ); + b3 = ROL64((a20^d0), 41); + b4 = ROL64((a41^d1), 2); + b0 = ROL64((a12^d2), 62); + b1 = ROL64((a33^d3), 55); + b2 = ROL64((a04^d4), 39); + a20 = b0 ^((~b1)& b2 ); + a41 = b1 ^((~b2)& b3 ); + a12 = b2 ^((~b3)& b4 ); + a33 = b3 ^((~b4)& b0 ); + a04 = b4 ^((~b0)& b1 ); - C0 = A00^A30^A10^A40^A20; - C1 = A21^A01^A31^A11^A41; - C2 = A42^A22^A02^A32^A12; - C3 = A13^A43^A23^A03^A33; - C4 = A34^A14^A44^A24^A04; - D0 = C4^ROL64(C1, 1); - D1 = C0^ROL64(C2, 1); - D2 = C1^ROL64(C3, 1); - D3 = C2^ROL64(C4, 1); - D4 = C3^ROL64(C0, 1); + c0 = a00^a30^a10^a40^a20; + c1 = a21^a01^a31^a11^a41; + c2 = a42^a22^a02^a32^a12; + c3 = a13^a43^a23^a03^a33; + c4 = a34^a14^a44^a24^a04; + d0 = c4^ROL64(c1, 1); + d1 = c0^ROL64(c2, 1); + d2 = c1^ROL64(c3, 1); + d3 = c2^ROL64(c4, 1); + d4 = c3^ROL64(c0, 1); - B0 = (A00^D0); - B1 = ROL64((A01^D1), 44); - B2 = ROL64((A02^D2), 43); - B3 = ROL64((A03^D3), 21); - B4 = ROL64((A04^D4), 14); - A00 = B0 ^((~B1)& B2 ); - A00 ^= RC[i+3]; - A01 = B1 ^((~B2)& B3 ); - A02 = B2 ^((~B3)& B4 ); - A03 = B3 ^((~B4)& B0 ); - A04 = B4 ^((~B0)& B1 ); + b0 = (a00^d0); + b1 = ROL64((a01^d1), 44); + b2 = ROL64((a02^d2), 43); + b3 = ROL64((a03^d3), 21); + b4 = ROL64((a04^d4), 14); + a00 = b0 ^((~b1)& b2 ); + a00 ^= RC[i+3]; + a01 = b1 ^((~b2)& b3 ); + a02 = b2 ^((~b3)& b4 ); + a03 = b3 ^((~b4)& b0 ); + a04 = b4 ^((~b0)& b1 ); - B2 = ROL64((A10^D0), 3); - B3 = ROL64((A11^D1), 45); - B4 = ROL64((A12^D2), 61); - B0 = ROL64((A13^D3), 28); - B1 = ROL64((A14^D4), 20); - A10 = B0 ^((~B1)& B2 ); - A11 = B1 ^((~B2)& B3 ); - A12 = B2 ^((~B3)& B4 ); - A13 = B3 ^((~B4)& B0 ); - A14 = B4 ^((~B0)& B1 ); + b2 = ROL64((a10^d0), 3); + b3 = ROL64((a11^d1), 45); + b4 = ROL64((a12^d2), 61); + b0 = ROL64((a13^d3), 28); + b1 = ROL64((a14^d4), 20); + a10 = b0 ^((~b1)& b2 ); + a11 = b1 ^((~b2)& b3 ); + a12 = b2 ^((~b3)& b4 ); + a13 = b3 ^((~b4)& b0 ); + a14 = b4 ^((~b0)& b1 ); - B4 = ROL64((A20^D0), 18); - B0 = ROL64((A21^D1), 1); - B1 = ROL64((A22^D2), 6); - B2 = ROL64((A23^D3), 25); - B3 = ROL64((A24^D4), 8); - A20 = B0 ^((~B1)& B2 ); - A21 = B1 ^((~B2)& B3 ); - A22 = B2 ^((~B3)& B4 ); - A23 = B3 ^((~B4)& B0 ); - A24 = B4 ^((~B0)& B1 ); + b4 = ROL64((a20^d0), 18); + b0 = ROL64((a21^d1), 1); + b1 = ROL64((a22^d2), 6); + b2 = ROL64((a23^d3), 25); + b3 = ROL64((a24^d4), 8); + a20 = b0 ^((~b1)& b2 ); + a21 = b1 ^((~b2)& b3 ); + a22 = b2 ^((~b3)& b4 ); + a23 = b3 ^((~b4)& b0 ); + a24 = b4 ^((~b0)& b1 ); - B1 = ROL64((A30^D0), 36); - B2 = ROL64((A31^D1), 10); - B3 = ROL64((A32^D2), 15); - B4 = ROL64((A33^D3), 56); - B0 = ROL64((A34^D4), 27); - A30 = B0 ^((~B1)& B2 ); - A31 = B1 ^((~B2)& B3 ); - A32 = B2 ^((~B3)& B4 ); - A33 = B3 ^((~B4)& B0 ); - A34 = B4 ^((~B0)& B1 ); + b1 = ROL64((a30^d0), 36); + b2 = ROL64((a31^d1), 10); + b3 = ROL64((a32^d2), 15); + b4 = ROL64((a33^d3), 56); + b0 = ROL64((a34^d4), 27); + a30 = b0 ^((~b1)& b2 ); + a31 = b1 ^((~b2)& b3 ); + a32 = b2 ^((~b3)& b4 ); + a33 = b3 ^((~b4)& b0 ); + a34 = b4 ^((~b0)& b1 ); - B3 = ROL64((A40^D0), 41); - B4 = ROL64((A41^D1), 2); - B0 = ROL64((A42^D2), 62); - B1 = ROL64((A43^D3), 55); - B2 = ROL64((A44^D4), 39); - A40 = B0 ^((~B1)& B2 ); - A41 = B1 ^((~B2)& B3 ); - A42 = B2 ^((~B3)& B4 ); - A43 = B3 ^((~B4)& B0 ); - A44 = B4 ^((~B0)& B1 ); + b3 = ROL64((a40^d0), 41); + b4 = ROL64((a41^d1), 2); + b0 = ROL64((a42^d2), 62); + b1 = ROL64((a43^d3), 55); + b2 = ROL64((a44^d4), 39); + a40 = b0 ^((~b1)& b2 ); + a41 = b1 ^((~b2)& b3 ); + a42 = b2 ^((~b3)& b4 ); + a43 = b3 ^((~b4)& b0 ); + a44 = b4 ^((~b0)& b1 ); } } @@ -1541,10 +2064,124 @@ int sqlite3_shathree_init( ****************************************************************************** ** ** This SQLite extension implements SQL functions readfile() and -** writefile(). +** writefile(), and eponymous virtual type "fsdir". +** +** WRITEFILE(FILE, DATA [, MODE [, MTIME]]): +** +** If neither of the optional arguments is present, then this UDF +** function writes blob DATA to file FILE. If successful, the number +** of bytes written is returned. If an error occurs, NULL is returned. +** +** If the first option argument - MODE - is present, then it must +** be passed an integer value that corresponds to a POSIX mode +** value (file type + permissions, as returned in the stat.st_mode +** field by the stat() system call). Three types of files may +** be written/created: +** +** regular files: (mode & 0170000)==0100000 +** symbolic links: (mode & 0170000)==0120000 +** directories: (mode & 0170000)==0040000 +** +** For a directory, the DATA is ignored. For a symbolic link, it is +** interpreted as text and used as the target of the link. For a +** regular file, it is interpreted as a blob and written into the +** named file. Regardless of the type of file, its permissions are +** set to (mode & 0777) before returning. +** +** If the optional MTIME argument is present, then it is interpreted +** as an integer - the number of seconds since the unix epoch. The +** modification-time of the target file is set to this value before +** returning. +** +** If three or more arguments are passed to this function and an +** error is encountered, an exception is raised. +** +** READFILE(FILE): +** +** Read and return the contents of file FILE (type blob) from disk. +** +** FSDIR: +** +** Used as follows: +** +** SELECT * FROM fsdir($path [, $dir]); +** +** Parameter $path is an absolute or relative pathname. If the file that it +** refers to does not exist, it is an error. If the path refers to a regular +** file or symbolic link, it returns a single row. Or, if the path refers +** to a directory, it returns one row for the directory, and one row for each +** file within the hierarchy rooted at $path. +** +** Each row has the following columns: +** +** name: Path to file or directory (text value). +** mode: Value of stat.st_mode for directory entry (an integer). +** mtime: Value of stat.st_mtime for directory entry (an integer). +** data: For a regular file, a blob containing the file data. For a +** symlink, a text value containing the text of the link. For a +** directory, NULL. +** +** If a non-NULL value is specified for the optional $dir parameter and +** $path is a relative path, then $path is interpreted relative to $dir. +** And the paths returned in the "name" column of the table are also +** relative to directory $dir. */ SQLITE_EXTENSION_INIT1 #include +#include +#include + +#include +#include +#include +#if !defined(_WIN32) && !defined(WIN32) +# include +# include +# include +# include +#else +# include "windows.h" +# include +# include +/* # include "test_windirent.h" */ +# define dirent DIRENT +# ifndef chmod +# define chmod _chmod +# endif +# ifndef stat +# define stat _stat +# endif +# define mkdir(path,mode) _mkdir(path) +# define lstat(path,buf) stat(path,buf) +#endif +#include +#include + + +#define FSDIR_SCHEMA "(name,mode,mtime,data,path HIDDEN,dir HIDDEN)" + +/* +** Set the result stored by context ctx to a blob containing the +** contents of file zName. +*/ +static void readFileContents(sqlite3_context *ctx, const char *zName){ + FILE *in; + long nIn; + void *pBuf; + + in = fopen(zName, "rb"); + if( in==0 ) return; + fseek(in, 0, SEEK_END); + nIn = ftell(in); + rewind(in); + pBuf = sqlite3_malloc( nIn ); + if( pBuf && 1==fread(pBuf, nIn, 1, in) ){ + sqlite3_result_blob(ctx, pBuf, nIn, sqlite3_free); + }else{ + sqlite3_free(pBuf); + } + fclose(in); +} /* ** Implementation of the "readfile(X)" SQL function. The entire content @@ -1557,58 +2194,761 @@ static void readfileFunc( sqlite3_value **argv ){ const char *zName; - FILE *in; - long nIn; - void *pBuf; - (void)(argc); /* Unused parameter */ zName = (const char*)sqlite3_value_text(argv[0]); if( zName==0 ) return; - in = fopen(zName, "rb"); - if( in==0 ) return; - fseek(in, 0, SEEK_END); - nIn = ftell(in); - rewind(in); - pBuf = sqlite3_malloc( nIn ); - if( pBuf && 1==fread(pBuf, nIn, 1, in) ){ - sqlite3_result_blob(context, pBuf, nIn, sqlite3_free); - }else{ - sqlite3_free(pBuf); - } - fclose(in); + readFileContents(context, zName); } /* -** Implementation of the "writefile(X,Y)" SQL function. The argument Y -** is written into file X. The number of bytes written is returned. Or -** NULL is returned if something goes wrong, such as being unable to open -** file X for writing. +** Set the error message contained in context ctx to the results of +** vprintf(zFmt, ...). +*/ +static void ctxErrorMsg(sqlite3_context *ctx, const char *zFmt, ...){ + char *zMsg = 0; + va_list ap; + va_start(ap, zFmt); + zMsg = sqlite3_vmprintf(zFmt, ap); + sqlite3_result_error(ctx, zMsg, -1); + sqlite3_free(zMsg); + va_end(ap); +} + +#if defined(_WIN32) +/* +** This function is designed to convert a Win32 FILETIME structure into the +** number of seconds since the Unix Epoch (1970-01-01 00:00:00 UTC). +*/ +static sqlite3_uint64 fileTimeToUnixTime( + LPFILETIME pFileTime +){ + SYSTEMTIME epochSystemTime; + ULARGE_INTEGER epochIntervals; + FILETIME epochFileTime; + ULARGE_INTEGER fileIntervals; + + memset(&epochSystemTime, 0, sizeof(SYSTEMTIME)); + epochSystemTime.wYear = 1970; + epochSystemTime.wMonth = 1; + epochSystemTime.wDay = 1; + SystemTimeToFileTime(&epochSystemTime, &epochFileTime); + epochIntervals.LowPart = epochFileTime.dwLowDateTime; + epochIntervals.HighPart = epochFileTime.dwHighDateTime; + + fileIntervals.LowPart = pFileTime->dwLowDateTime; + fileIntervals.HighPart = pFileTime->dwHighDateTime; + + return (fileIntervals.QuadPart - epochIntervals.QuadPart) / 10000000; +} + +/* +** This function attempts to normalize the time values found in the stat() +** buffer to UTC. This is necessary on Win32, where the runtime library +** appears to return these values as local times. +*/ +static void statTimesToUtc( + const char *zPath, + struct stat *pStatBuf +){ + HANDLE hFindFile; + WIN32_FIND_DATAW fd; + LPWSTR zUnicodeName; + extern LPWSTR sqlite3_win32_utf8_to_unicode(const char*); + zUnicodeName = sqlite3_win32_utf8_to_unicode(zPath); + if( zUnicodeName ){ + memset(&fd, 0, sizeof(WIN32_FIND_DATA)); + hFindFile = FindFirstFileW(zUnicodeName, &fd); + if( hFindFile!=NULL ){ + pStatBuf->st_ctime = (time_t)fileTimeToUnixTime(&fd.ftCreationTime); + pStatBuf->st_atime = (time_t)fileTimeToUnixTime(&fd.ftLastAccessTime); + pStatBuf->st_mtime = (time_t)fileTimeToUnixTime(&fd.ftLastWriteTime); + FindClose(hFindFile); + } + sqlite3_free(zUnicodeName); + } +} +#endif + +/* +** This function is used in place of stat(). On Windows, special handling +** is required in order for the included time to be returned as UTC. On all +** other systems, this function simply calls stat(). +*/ +static int fileStat( + const char *zPath, + struct stat *pStatBuf +){ +#if defined(_WIN32) + int rc = stat(zPath, pStatBuf); + if( rc==0 ) statTimesToUtc(zPath, pStatBuf); + return rc; +#else + return stat(zPath, pStatBuf); +#endif +} + +/* +** This function is used in place of lstat(). On Windows, special handling +** is required in order for the included time to be returned as UTC. On all +** other systems, this function simply calls lstat(). +*/ +static int fileLinkStat( + const char *zPath, + struct stat *pStatBuf +){ +#if defined(_WIN32) + int rc = lstat(zPath, pStatBuf); + if( rc==0 ) statTimesToUtc(zPath, pStatBuf); + return rc; +#else + return lstat(zPath, pStatBuf); +#endif +} + +/* +** Argument zFile is the name of a file that will be created and/or written +** by SQL function writefile(). This function ensures that the directory +** zFile will be written to exists, creating it if required. The permissions +** for any path components created by this function are set to (mode&0777). +** +** If an OOM condition is encountered, SQLITE_NOMEM is returned. Otherwise, +** SQLITE_OK is returned if the directory is successfully created, or +** SQLITE_ERROR otherwise. +*/ +static int makeDirectory( + const char *zFile, + mode_t mode +){ + char *zCopy = sqlite3_mprintf("%s", zFile); + int rc = SQLITE_OK; + + if( zCopy==0 ){ + rc = SQLITE_NOMEM; + }else{ + int nCopy = (int)strlen(zCopy); + int i = 1; + + while( rc==SQLITE_OK ){ + struct stat sStat; + int rc2; + + for(; zCopy[i]!='/' && i=0 ){ +#if defined(_WIN32) + /* Windows */ + FILETIME lastAccess; + FILETIME lastWrite; + SYSTEMTIME currentTime; + LONGLONG intervals; + HANDLE hFile; + LPWSTR zUnicodeName; + extern LPWSTR sqlite3_win32_utf8_to_unicode(const char*); + + GetSystemTime(¤tTime); + SystemTimeToFileTime(¤tTime, &lastAccess); + intervals = Int32x32To64(mtime, 10000000) + 116444736000000000; + lastWrite.dwLowDateTime = (DWORD)intervals; + lastWrite.dwHighDateTime = intervals >> 32; + zUnicodeName = sqlite3_win32_utf8_to_unicode(zFile); + if( zUnicodeName==0 ){ + return 1; + } + hFile = CreateFileW( + zUnicodeName, FILE_WRITE_ATTRIBUTES, 0, NULL, OPEN_EXISTING, + FILE_FLAG_BACKUP_SEMANTICS, NULL + ); + sqlite3_free(zUnicodeName); + if( hFile!=INVALID_HANDLE_VALUE ){ + BOOL bResult = SetFileTime(hFile, NULL, &lastAccess, &lastWrite); + CloseHandle(hFile); + return !bResult; + }else{ + return 1; + } +#elif defined(AT_FDCWD) && 0 /* utimensat() is not universally available */ + /* Recent unix */ + struct timespec times[2]; + times[0].tv_nsec = times[1].tv_nsec = 0; + times[0].tv_sec = time(0); + times[1].tv_sec = mtime; + if( utimensat(AT_FDCWD, zFile, times, AT_SYMLINK_NOFOLLOW) ){ + return 1; + } +#else + /* Legacy unix */ + struct timeval times[2]; + times[0].tv_usec = times[1].tv_usec = 0; + times[0].tv_sec = time(0); + times[1].tv_sec = mtime; + if( utimes(zFile, times) ){ + return 1; + } +#endif + } + + return 0; +} + +/* +** Implementation of the "writefile(W,X[,Y[,Z]]])" SQL function. +** Refer to header comments at the top of this file for details. */ static void writefileFunc( sqlite3_context *context, int argc, sqlite3_value **argv ){ - FILE *out; - const char *z; - sqlite3_int64 rc; const char *zFile; + mode_t mode = 0; + int res; + sqlite3_int64 mtime = -1; + + if( argc<2 || argc>4 ){ + sqlite3_result_error(context, + "wrong number of arguments to function writefile()", -1 + ); + return; + } - (void)(argc); /* Unused parameter */ zFile = (const char*)sqlite3_value_text(argv[0]); if( zFile==0 ) return; - out = fopen(zFile, "wb"); - if( out==0 ) return; - z = (const char*)sqlite3_value_blob(argv[1]); - if( z==0 ){ - rc = 0; - }else{ - rc = fwrite(z, 1, sqlite3_value_bytes(argv[1]), out); + if( argc>=3 ){ + mode = (mode_t)sqlite3_value_int(argv[2]); + } + if( argc==4 ){ + mtime = sqlite3_value_int64(argv[3]); + } + + res = writeFile(context, zFile, argv[1], mode, mtime); + if( res==1 && errno==ENOENT ){ + if( makeDirectory(zFile, mode)==SQLITE_OK ){ + res = writeFile(context, zFile, argv[1], mode, mtime); + } + } + + if( argc>2 && res!=0 ){ + if( S_ISLNK(mode) ){ + ctxErrorMsg(context, "failed to create symlink: %s", zFile); + }else if( S_ISDIR(mode) ){ + ctxErrorMsg(context, "failed to create directory: %s", zFile); + }else{ + ctxErrorMsg(context, "failed to write file: %s", zFile); + } } - fclose(out); - sqlite3_result_int64(context, rc); } +/* +** SQL function: lsmode(MODE) +** +** Given a numberic st_mode from stat(), convert it into a human-readable +** text string in the style of "ls -l". +*/ +static void lsModeFunc( + sqlite3_context *context, + int argc, + sqlite3_value **argv +){ + int i; + int iMode = sqlite3_value_int(argv[0]); + char z[16]; + (void)argc; + if( S_ISLNK(iMode) ){ + z[0] = 'l'; + }else if( S_ISREG(iMode) ){ + z[0] = '-'; + }else if( S_ISDIR(iMode) ){ + z[0] = 'd'; + }else{ + z[0] = '?'; + } + for(i=0; i<3; i++){ + int m = (iMode >> ((2-i)*3)); + char *a = &z[1 + i*3]; + a[0] = (m & 0x4) ? 'r' : '-'; + a[1] = (m & 0x2) ? 'w' : '-'; + a[2] = (m & 0x1) ? 'x' : '-'; + } + z[10] = '\0'; + sqlite3_result_text(context, z, -1, SQLITE_TRANSIENT); +} + +#ifndef SQLITE_OMIT_VIRTUALTABLE + +/* +** Cursor type for recursively iterating through a directory structure. +*/ +typedef struct fsdir_cursor fsdir_cursor; +typedef struct FsdirLevel FsdirLevel; + +struct FsdirLevel { + DIR *pDir; /* From opendir() */ + char *zDir; /* Name of directory (nul-terminated) */ +}; + +struct fsdir_cursor { + sqlite3_vtab_cursor base; /* Base class - must be first */ + + int nLvl; /* Number of entries in aLvl[] array */ + int iLvl; /* Index of current entry */ + FsdirLevel *aLvl; /* Hierarchy of directories being traversed */ + + const char *zBase; + int nBase; + + struct stat sStat; /* Current lstat() results */ + char *zPath; /* Path to current entry */ + sqlite3_int64 iRowid; /* Current rowid */ +}; + +typedef struct fsdir_tab fsdir_tab; +struct fsdir_tab { + sqlite3_vtab base; /* Base class - must be first */ +}; + +/* +** Construct a new fsdir virtual table object. +*/ +static int fsdirConnect( + sqlite3 *db, + void *pAux, + int argc, const char *const*argv, + sqlite3_vtab **ppVtab, + char **pzErr +){ + fsdir_tab *pNew = 0; + int rc; + (void)pAux; + (void)argc; + (void)argv; + (void)pzErr; + rc = sqlite3_declare_vtab(db, "CREATE TABLE x" FSDIR_SCHEMA); + if( rc==SQLITE_OK ){ + pNew = (fsdir_tab*)sqlite3_malloc( sizeof(*pNew) ); + if( pNew==0 ) return SQLITE_NOMEM; + memset(pNew, 0, sizeof(*pNew)); + } + *ppVtab = (sqlite3_vtab*)pNew; + return rc; +} + +/* +** This method is the destructor for fsdir vtab objects. +*/ +static int fsdirDisconnect(sqlite3_vtab *pVtab){ + sqlite3_free(pVtab); + return SQLITE_OK; +} + +/* +** Constructor for a new fsdir_cursor object. +*/ +static int fsdirOpen(sqlite3_vtab *p, sqlite3_vtab_cursor **ppCursor){ + fsdir_cursor *pCur; + (void)p; + pCur = sqlite3_malloc( sizeof(*pCur) ); + if( pCur==0 ) return SQLITE_NOMEM; + memset(pCur, 0, sizeof(*pCur)); + pCur->iLvl = -1; + *ppCursor = &pCur->base; + return SQLITE_OK; +} + +/* +** Reset a cursor back to the state it was in when first returned +** by fsdirOpen(). +*/ +static void fsdirResetCursor(fsdir_cursor *pCur){ + int i; + for(i=0; i<=pCur->iLvl; i++){ + FsdirLevel *pLvl = &pCur->aLvl[i]; + if( pLvl->pDir ) closedir(pLvl->pDir); + sqlite3_free(pLvl->zDir); + } + sqlite3_free(pCur->zPath); + sqlite3_free(pCur->aLvl); + pCur->aLvl = 0; + pCur->zPath = 0; + pCur->zBase = 0; + pCur->nBase = 0; + pCur->nLvl = 0; + pCur->iLvl = -1; + pCur->iRowid = 1; +} + +/* +** Destructor for an fsdir_cursor. +*/ +static int fsdirClose(sqlite3_vtab_cursor *cur){ + fsdir_cursor *pCur = (fsdir_cursor*)cur; + + fsdirResetCursor(pCur); + sqlite3_free(pCur); + return SQLITE_OK; +} + +/* +** Set the error message for the virtual table associated with cursor +** pCur to the results of vprintf(zFmt, ...). +*/ +static void fsdirSetErrmsg(fsdir_cursor *pCur, const char *zFmt, ...){ + va_list ap; + va_start(ap, zFmt); + pCur->base.pVtab->zErrMsg = sqlite3_vmprintf(zFmt, ap); + va_end(ap); +} + + +/* +** Advance an fsdir_cursor to its next row of output. +*/ +static int fsdirNext(sqlite3_vtab_cursor *cur){ + fsdir_cursor *pCur = (fsdir_cursor*)cur; + mode_t m = pCur->sStat.st_mode; + + pCur->iRowid++; + if( S_ISDIR(m) ){ + /* Descend into this directory */ + int iNew = pCur->iLvl + 1; + FsdirLevel *pLvl; + if( iNew>=pCur->nLvl ){ + int nNew = iNew+1; + int nByte = nNew*sizeof(FsdirLevel); + FsdirLevel *aNew = (FsdirLevel*)sqlite3_realloc(pCur->aLvl, nByte); + if( aNew==0 ) return SQLITE_NOMEM; + memset(&aNew[pCur->nLvl], 0, sizeof(FsdirLevel)*(nNew-pCur->nLvl)); + pCur->aLvl = aNew; + pCur->nLvl = nNew; + } + pCur->iLvl = iNew; + pLvl = &pCur->aLvl[iNew]; + + pLvl->zDir = pCur->zPath; + pCur->zPath = 0; + pLvl->pDir = opendir(pLvl->zDir); + if( pLvl->pDir==0 ){ + fsdirSetErrmsg(pCur, "cannot read directory: %s", pCur->zPath); + return SQLITE_ERROR; + } + } + + while( pCur->iLvl>=0 ){ + FsdirLevel *pLvl = &pCur->aLvl[pCur->iLvl]; + struct dirent *pEntry = readdir(pLvl->pDir); + if( pEntry ){ + if( pEntry->d_name[0]=='.' ){ + if( pEntry->d_name[1]=='.' && pEntry->d_name[2]=='\0' ) continue; + if( pEntry->d_name[1]=='\0' ) continue; + } + sqlite3_free(pCur->zPath); + pCur->zPath = sqlite3_mprintf("%s/%s", pLvl->zDir, pEntry->d_name); + if( pCur->zPath==0 ) return SQLITE_NOMEM; + if( fileLinkStat(pCur->zPath, &pCur->sStat) ){ + fsdirSetErrmsg(pCur, "cannot stat file: %s", pCur->zPath); + return SQLITE_ERROR; + } + return SQLITE_OK; + } + closedir(pLvl->pDir); + sqlite3_free(pLvl->zDir); + pLvl->pDir = 0; + pLvl->zDir = 0; + pCur->iLvl--; + } + + /* EOF */ + sqlite3_free(pCur->zPath); + pCur->zPath = 0; + return SQLITE_OK; +} + +/* +** Return values of columns for the row at which the series_cursor +** is currently pointing. +*/ +static int fsdirColumn( + sqlite3_vtab_cursor *cur, /* The cursor */ + sqlite3_context *ctx, /* First argument to sqlite3_result_...() */ + int i /* Which column to return */ +){ + fsdir_cursor *pCur = (fsdir_cursor*)cur; + switch( i ){ + case 0: { /* name */ + sqlite3_result_text(ctx, &pCur->zPath[pCur->nBase], -1, SQLITE_TRANSIENT); + break; + } + + case 1: /* mode */ + sqlite3_result_int64(ctx, pCur->sStat.st_mode); + break; + + case 2: /* mtime */ + sqlite3_result_int64(ctx, pCur->sStat.st_mtime); + break; + + case 3: { /* data */ + mode_t m = pCur->sStat.st_mode; + if( S_ISDIR(m) ){ + sqlite3_result_null(ctx); +#if !defined(_WIN32) && !defined(WIN32) + }else if( S_ISLNK(m) ){ + char aStatic[64]; + char *aBuf = aStatic; + int nBuf = 64; + int n; + + while( 1 ){ + n = readlink(pCur->zPath, aBuf, nBuf); + if( nzPath); + } + } + } + return SQLITE_OK; +} + +/* +** Return the rowid for the current row. In this implementation, the +** first row returned is assigned rowid value 1, and each subsequent +** row a value 1 more than that of the previous. +*/ +static int fsdirRowid(sqlite3_vtab_cursor *cur, sqlite_int64 *pRowid){ + fsdir_cursor *pCur = (fsdir_cursor*)cur; + *pRowid = pCur->iRowid; + return SQLITE_OK; +} + +/* +** Return TRUE if the cursor has been moved off of the last +** row of output. +*/ +static int fsdirEof(sqlite3_vtab_cursor *cur){ + fsdir_cursor *pCur = (fsdir_cursor*)cur; + return (pCur->zPath==0); +} + +/* +** xFilter callback. +*/ +static int fsdirFilter( + sqlite3_vtab_cursor *cur, + int idxNum, const char *idxStr, + int argc, sqlite3_value **argv +){ + const char *zDir = 0; + fsdir_cursor *pCur = (fsdir_cursor*)cur; + (void)idxStr; + fsdirResetCursor(pCur); + + if( idxNum==0 ){ + fsdirSetErrmsg(pCur, "table function fsdir requires an argument"); + return SQLITE_ERROR; + } + + assert( argc==idxNum && (argc==1 || argc==2) ); + zDir = (const char*)sqlite3_value_text(argv[0]); + if( zDir==0 ){ + fsdirSetErrmsg(pCur, "table function fsdir requires a non-NULL argument"); + return SQLITE_ERROR; + } + if( argc==2 ){ + pCur->zBase = (const char*)sqlite3_value_text(argv[1]); + } + if( pCur->zBase ){ + pCur->nBase = (int)strlen(pCur->zBase)+1; + pCur->zPath = sqlite3_mprintf("%s/%s", pCur->zBase, zDir); + }else{ + pCur->zPath = sqlite3_mprintf("%s", zDir); + } + + if( pCur->zPath==0 ){ + return SQLITE_NOMEM; + } + if( fileLinkStat(pCur->zPath, &pCur->sStat) ){ + fsdirSetErrmsg(pCur, "cannot stat file: %s", pCur->zPath); + return SQLITE_ERROR; + } + + return SQLITE_OK; +} + +/* +** SQLite will invoke this method one or more times while planning a query +** that uses the generate_series virtual table. This routine needs to create +** a query plan for each invocation and compute an estimated cost for that +** plan. +** +** In this implementation idxNum is used to represent the +** query plan. idxStr is unused. +** +** The query plan is represented by bits in idxNum: +** +** (1) start = $value -- constraint exists +** (2) stop = $value -- constraint exists +** (4) step = $value -- constraint exists +** (8) output in descending order +*/ +static int fsdirBestIndex( + sqlite3_vtab *tab, + sqlite3_index_info *pIdxInfo +){ + int i; /* Loop over constraints */ + int idx4 = -1; + int idx5 = -1; + const struct sqlite3_index_constraint *pConstraint; + + (void)tab; + pConstraint = pIdxInfo->aConstraint; + for(i=0; inConstraint; i++, pConstraint++){ + if( pConstraint->usable==0 ) continue; + if( pConstraint->op!=SQLITE_INDEX_CONSTRAINT_EQ ) continue; + if( pConstraint->iColumn==4 ) idx4 = i; + if( pConstraint->iColumn==5 ) idx5 = i; + } + + if( idx4<0 ){ + pIdxInfo->idxNum = 0; + pIdxInfo->estimatedCost = (double)(((sqlite3_int64)1) << 50); + }else{ + pIdxInfo->aConstraintUsage[idx4].omit = 1; + pIdxInfo->aConstraintUsage[idx4].argvIndex = 1; + if( idx5>=0 ){ + pIdxInfo->aConstraintUsage[idx5].omit = 1; + pIdxInfo->aConstraintUsage[idx5].argvIndex = 2; + pIdxInfo->idxNum = 2; + pIdxInfo->estimatedCost = 10.0; + }else{ + pIdxInfo->idxNum = 1; + pIdxInfo->estimatedCost = 100.0; + } + } + + return SQLITE_OK; +} + +/* +** Register the "fsdir" virtual table. +*/ +static int fsdirRegister(sqlite3 *db){ + static sqlite3_module fsdirModule = { + 0, /* iVersion */ + 0, /* xCreate */ + fsdirConnect, /* xConnect */ + fsdirBestIndex, /* xBestIndex */ + fsdirDisconnect, /* xDisconnect */ + 0, /* xDestroy */ + fsdirOpen, /* xOpen - open a cursor */ + fsdirClose, /* xClose - close a cursor */ + fsdirFilter, /* xFilter - configure scan constraints */ + fsdirNext, /* xNext - advance a cursor */ + fsdirEof, /* xEof - check for end of scan */ + fsdirColumn, /* xColumn - read data */ + fsdirRowid, /* xRowid - read data */ + 0, /* xUpdate */ + 0, /* xBegin */ + 0, /* xSync */ + 0, /* xCommit */ + 0, /* xRollback */ + 0, /* xFindMethod */ + 0, /* xRename */ + 0, /* xSavepoint */ + 0, /* xRelease */ + 0 /* xRollbackTo */ + }; + + int rc = sqlite3_create_module(db, "fsdir", &fsdirModule, 0); + return rc; +} +#else /* SQLITE_OMIT_VIRTUALTABLE */ +# define fsdirRegister(x) SQLITE_OK +#endif #ifdef _WIN32 @@ -1624,9 +2964,16 @@ int sqlite3_fileio_init( rc = sqlite3_create_function(db, "readfile", 1, SQLITE_UTF8, 0, readfileFunc, 0, 0); if( rc==SQLITE_OK ){ - rc = sqlite3_create_function(db, "writefile", 2, SQLITE_UTF8, 0, + rc = sqlite3_create_function(db, "writefile", -1, SQLITE_UTF8, 0, writefileFunc, 0, 0); } + if( rc==SQLITE_OK ){ + rc = sqlite3_create_function(db, "lsmode", 1, SQLITE_UTF8, 0, + lsModeFunc, 0, 0); + } + if( rc==SQLITE_OK ){ + rc = fsdirRegister(db); + } return rc; } @@ -1711,7 +3058,7 @@ struct completion_cursor { #define COMPLETION_INDEXES 5 #define COMPLETION_TRIGGERS 6 #define COMPLETION_DATABASES 7 -#define COMPLETION_TABLES 8 +#define COMPLETION_TABLES 8 /* Also VIEWs and TRIGGERs */ #define COMPLETION_COLUMNS 9 #define COMPLETION_MODULES 10 #define COMPLETION_EOF 11 @@ -1883,8 +3230,7 @@ static int completionNext(sqlite3_vtab_cursor *cur){ const char *zDb = (const char*)sqlite3_column_text(pS2, 1); zSql = sqlite3_mprintf( "%z%s" - "SELECT name FROM \"%w\".sqlite_master" - " WHERE type='table'", + "SELECT name FROM \"%w\".sqlite_master", zSql, zSep, zDb ); if( zSql==0 ) return SQLITE_NOMEM; @@ -2156,6 +3502,5001 @@ int sqlite3_completion_init( } /************************* End ../ext/misc/completion.c ********************/ +/************************* Begin ../ext/misc/appendvfs.c ******************/ +/* +** 2017-10-20 +** +** The author disclaims copyright to this source code. In place of +** a legal notice, here is a blessing: +** +** May you do good and not evil. +** May you find forgiveness for yourself and forgive others. +** May you share freely, never taking more than you give. +** +****************************************************************************** +** +** This file implements a VFS shim that allows an SQLite database to be +** appended onto the end of some other file, such as an executable. +** +** A special record must appear at the end of the file that identifies the +** file as an appended database and provides an offset to page 1. For +** best performance page 1 should be located at a disk page boundary, though +** that is not required. +** +** When opening a database using this VFS, the connection might treat +** the file as an ordinary SQLite database, or it might treat is as a +** database appended onto some other file. Here are the rules: +** +** (1) When opening a new empty file, that file is treated as an ordinary +** database. +** +** (2) When opening a file that begins with the standard SQLite prefix +** string "SQLite format 3", that file is treated as an ordinary +** database. +** +** (3) When opening a file that ends with the appendvfs trailer string +** "Start-Of-SQLite3-NNNNNNNN" that file is treated as an appended +** database. +** +** (4) If none of the above apply and the SQLITE_OPEN_CREATE flag is +** set, then a new database is appended to the already existing file. +** +** (5) Otherwise, SQLITE_CANTOPEN is returned. +** +** To avoid unnecessary complications with the PENDING_BYTE, the size of +** the file containing the database is limited to 1GB. This VFS will refuse +** to read or write past the 1GB mark. This restriction might be lifted in +** future versions. For now, if you need a large database, then keep the +** database in a separate file. +** +** If the file being opened is not an appended database, then this shim is +** a pass-through into the default underlying VFS. +**/ +SQLITE_EXTENSION_INIT1 +#include +#include + +/* The append mark at the end of the database is: +** +** Start-Of-SQLite3-NNNNNNNN +** 123456789 123456789 12345 +** +** The NNNNNNNN represents a 64-bit big-endian unsigned integer which is +** the offset to page 1. +*/ +#define APND_MARK_PREFIX "Start-Of-SQLite3-" +#define APND_MARK_PREFIX_SZ 17 +#define APND_MARK_SIZE 25 + +/* +** Maximum size of the combined prefix + database + append-mark. This +** must be less than 0x40000000 to avoid locking issues on Windows. +*/ +#define APND_MAX_SIZE (65536*15259) + +/* +** Forward declaration of objects used by this utility +*/ +typedef struct sqlite3_vfs ApndVfs; +typedef struct ApndFile ApndFile; + +/* Access to a lower-level VFS that (might) implement dynamic loading, +** access to randomness, etc. +*/ +#define ORIGVFS(p) ((sqlite3_vfs*)((p)->pAppData)) +#define ORIGFILE(p) ((sqlite3_file*)(((ApndFile*)(p))+1)) + +/* An open file */ +struct ApndFile { + sqlite3_file base; /* IO methods */ + sqlite3_int64 iPgOne; /* File offset to page 1 */ + sqlite3_int64 iMark; /* Start of the append-mark */ +}; + +/* +** Methods for ApndFile +*/ +static int apndClose(sqlite3_file*); +static int apndRead(sqlite3_file*, void*, int iAmt, sqlite3_int64 iOfst); +static int apndWrite(sqlite3_file*,const void*,int iAmt, sqlite3_int64 iOfst); +static int apndTruncate(sqlite3_file*, sqlite3_int64 size); +static int apndSync(sqlite3_file*, int flags); +static int apndFileSize(sqlite3_file*, sqlite3_int64 *pSize); +static int apndLock(sqlite3_file*, int); +static int apndUnlock(sqlite3_file*, int); +static int apndCheckReservedLock(sqlite3_file*, int *pResOut); +static int apndFileControl(sqlite3_file*, int op, void *pArg); +static int apndSectorSize(sqlite3_file*); +static int apndDeviceCharacteristics(sqlite3_file*); +static int apndShmMap(sqlite3_file*, int iPg, int pgsz, int, void volatile**); +static int apndShmLock(sqlite3_file*, int offset, int n, int flags); +static void apndShmBarrier(sqlite3_file*); +static int apndShmUnmap(sqlite3_file*, int deleteFlag); +static int apndFetch(sqlite3_file*, sqlite3_int64 iOfst, int iAmt, void **pp); +static int apndUnfetch(sqlite3_file*, sqlite3_int64 iOfst, void *p); + +/* +** Methods for ApndVfs +*/ +static int apndOpen(sqlite3_vfs*, const char *, sqlite3_file*, int , int *); +static int apndDelete(sqlite3_vfs*, const char *zName, int syncDir); +static int apndAccess(sqlite3_vfs*, const char *zName, int flags, int *); +static int apndFullPathname(sqlite3_vfs*, const char *zName, int, char *zOut); +static void *apndDlOpen(sqlite3_vfs*, const char *zFilename); +static void apndDlError(sqlite3_vfs*, int nByte, char *zErrMsg); +static void (*apndDlSym(sqlite3_vfs *pVfs, void *p, const char*zSym))(void); +static void apndDlClose(sqlite3_vfs*, void*); +static int apndRandomness(sqlite3_vfs*, int nByte, char *zOut); +static int apndSleep(sqlite3_vfs*, int microseconds); +static int apndCurrentTime(sqlite3_vfs*, double*); +static int apndGetLastError(sqlite3_vfs*, int, char *); +static int apndCurrentTimeInt64(sqlite3_vfs*, sqlite3_int64*); +static int apndSetSystemCall(sqlite3_vfs*, const char*,sqlite3_syscall_ptr); +static sqlite3_syscall_ptr apndGetSystemCall(sqlite3_vfs*, const char *z); +static const char *apndNextSystemCall(sqlite3_vfs*, const char *zName); + +static sqlite3_vfs apnd_vfs = { + 3, /* iVersion (set when registered) */ + 0, /* szOsFile (set when registered) */ + 1024, /* mxPathname */ + 0, /* pNext */ + "apndvfs", /* zName */ + 0, /* pAppData (set when registered) */ + apndOpen, /* xOpen */ + apndDelete, /* xDelete */ + apndAccess, /* xAccess */ + apndFullPathname, /* xFullPathname */ + apndDlOpen, /* xDlOpen */ + apndDlError, /* xDlError */ + apndDlSym, /* xDlSym */ + apndDlClose, /* xDlClose */ + apndRandomness, /* xRandomness */ + apndSleep, /* xSleep */ + apndCurrentTime, /* xCurrentTime */ + apndGetLastError, /* xGetLastError */ + apndCurrentTimeInt64, /* xCurrentTimeInt64 */ + apndSetSystemCall, /* xSetSystemCall */ + apndGetSystemCall, /* xGetSystemCall */ + apndNextSystemCall /* xNextSystemCall */ +}; + +static const sqlite3_io_methods apnd_io_methods = { + 3, /* iVersion */ + apndClose, /* xClose */ + apndRead, /* xRead */ + apndWrite, /* xWrite */ + apndTruncate, /* xTruncate */ + apndSync, /* xSync */ + apndFileSize, /* xFileSize */ + apndLock, /* xLock */ + apndUnlock, /* xUnlock */ + apndCheckReservedLock, /* xCheckReservedLock */ + apndFileControl, /* xFileControl */ + apndSectorSize, /* xSectorSize */ + apndDeviceCharacteristics, /* xDeviceCharacteristics */ + apndShmMap, /* xShmMap */ + apndShmLock, /* xShmLock */ + apndShmBarrier, /* xShmBarrier */ + apndShmUnmap, /* xShmUnmap */ + apndFetch, /* xFetch */ + apndUnfetch /* xUnfetch */ +}; + + + +/* +** Close an apnd-file. +*/ +static int apndClose(sqlite3_file *pFile){ + pFile = ORIGFILE(pFile); + return pFile->pMethods->xClose(pFile); +} + +/* +** Read data from an apnd-file. +*/ +static int apndRead( + sqlite3_file *pFile, + void *zBuf, + int iAmt, + sqlite_int64 iOfst +){ + ApndFile *p = (ApndFile *)pFile; + pFile = ORIGFILE(pFile); + return pFile->pMethods->xRead(pFile, zBuf, iAmt, iOfst+p->iPgOne); +} + +/* +** Add the append-mark onto the end of the file. +*/ +static int apndWriteMark(ApndFile *p, sqlite3_file *pFile){ + int i; + unsigned char a[APND_MARK_SIZE]; + memcpy(a, APND_MARK_PREFIX, APND_MARK_PREFIX_SZ); + for(i=0; i<8; i++){ + a[APND_MARK_PREFIX_SZ+i] = (p->iPgOne >> (56 - i*8)) & 0xff; + } + return pFile->pMethods->xWrite(pFile, a, APND_MARK_SIZE, p->iMark); +} + +/* +** Write data to an apnd-file. +*/ +static int apndWrite( + sqlite3_file *pFile, + const void *zBuf, + int iAmt, + sqlite_int64 iOfst +){ + int rc; + ApndFile *p = (ApndFile *)pFile; + pFile = ORIGFILE(pFile); + if( iOfst+iAmt>=APND_MAX_SIZE ) return SQLITE_FULL; + rc = pFile->pMethods->xWrite(pFile, zBuf, iAmt, iOfst+p->iPgOne); + if( rc==SQLITE_OK && iOfst + iAmt + p->iPgOne > p->iMark ){ + sqlite3_int64 sz = 0; + rc = pFile->pMethods->xFileSize(pFile, &sz); + if( rc==SQLITE_OK ){ + p->iMark = sz - APND_MARK_SIZE; + if( iOfst + iAmt + p->iPgOne > p->iMark ){ + p->iMark = p->iPgOne + iOfst + iAmt; + rc = apndWriteMark(p, pFile); + } + } + } + return rc; +} + +/* +** Truncate an apnd-file. +*/ +static int apndTruncate(sqlite3_file *pFile, sqlite_int64 size){ + int rc; + ApndFile *p = (ApndFile *)pFile; + pFile = ORIGFILE(pFile); + rc = pFile->pMethods->xTruncate(pFile, size+p->iPgOne+APND_MARK_SIZE); + if( rc==SQLITE_OK ){ + p->iMark = p->iPgOne+size; + rc = apndWriteMark(p, pFile); + } + return rc; +} + +/* +** Sync an apnd-file. +*/ +static int apndSync(sqlite3_file *pFile, int flags){ + pFile = ORIGFILE(pFile); + return pFile->pMethods->xSync(pFile, flags); +} + +/* +** Return the current file-size of an apnd-file. +*/ +static int apndFileSize(sqlite3_file *pFile, sqlite_int64 *pSize){ + ApndFile *p = (ApndFile *)pFile; + int rc; + pFile = ORIGFILE(p); + rc = pFile->pMethods->xFileSize(pFile, pSize); + if( rc==SQLITE_OK && p->iPgOne ){ + *pSize -= p->iPgOne + APND_MARK_SIZE; + } + return rc; +} + +/* +** Lock an apnd-file. +*/ +static int apndLock(sqlite3_file *pFile, int eLock){ + pFile = ORIGFILE(pFile); + return pFile->pMethods->xLock(pFile, eLock); +} + +/* +** Unlock an apnd-file. +*/ +static int apndUnlock(sqlite3_file *pFile, int eLock){ + pFile = ORIGFILE(pFile); + return pFile->pMethods->xUnlock(pFile, eLock); +} + +/* +** Check if another file-handle holds a RESERVED lock on an apnd-file. +*/ +static int apndCheckReservedLock(sqlite3_file *pFile, int *pResOut){ + pFile = ORIGFILE(pFile); + return pFile->pMethods->xCheckReservedLock(pFile, pResOut); +} + +/* +** File control method. For custom operations on an apnd-file. +*/ +static int apndFileControl(sqlite3_file *pFile, int op, void *pArg){ + ApndFile *p = (ApndFile *)pFile; + int rc; + pFile = ORIGFILE(pFile); + rc = pFile->pMethods->xFileControl(pFile, op, pArg); + if( rc==SQLITE_OK && op==SQLITE_FCNTL_VFSNAME ){ + *(char**)pArg = sqlite3_mprintf("apnd(%lld)/%z", p->iPgOne, *(char**)pArg); + } + return rc; +} + +/* +** Return the sector-size in bytes for an apnd-file. +*/ +static int apndSectorSize(sqlite3_file *pFile){ + pFile = ORIGFILE(pFile); + return pFile->pMethods->xSectorSize(pFile); +} + +/* +** Return the device characteristic flags supported by an apnd-file. +*/ +static int apndDeviceCharacteristics(sqlite3_file *pFile){ + pFile = ORIGFILE(pFile); + return pFile->pMethods->xDeviceCharacteristics(pFile); +} + +/* Create a shared memory file mapping */ +static int apndShmMap( + sqlite3_file *pFile, + int iPg, + int pgsz, + int bExtend, + void volatile **pp +){ + pFile = ORIGFILE(pFile); + return pFile->pMethods->xShmMap(pFile,iPg,pgsz,bExtend,pp); +} + +/* Perform locking on a shared-memory segment */ +static int apndShmLock(sqlite3_file *pFile, int offset, int n, int flags){ + pFile = ORIGFILE(pFile); + return pFile->pMethods->xShmLock(pFile,offset,n,flags); +} + +/* Memory barrier operation on shared memory */ +static void apndShmBarrier(sqlite3_file *pFile){ + pFile = ORIGFILE(pFile); + pFile->pMethods->xShmBarrier(pFile); +} + +/* Unmap a shared memory segment */ +static int apndShmUnmap(sqlite3_file *pFile, int deleteFlag){ + pFile = ORIGFILE(pFile); + return pFile->pMethods->xShmUnmap(pFile,deleteFlag); +} + +/* Fetch a page of a memory-mapped file */ +static int apndFetch( + sqlite3_file *pFile, + sqlite3_int64 iOfst, + int iAmt, + void **pp +){ + ApndFile *p = (ApndFile *)pFile; + pFile = ORIGFILE(pFile); + return pFile->pMethods->xFetch(pFile, iOfst+p->iPgOne, iAmt, pp); +} + +/* Release a memory-mapped page */ +static int apndUnfetch(sqlite3_file *pFile, sqlite3_int64 iOfst, void *pPage){ + ApndFile *p = (ApndFile *)pFile; + pFile = ORIGFILE(pFile); + return pFile->pMethods->xUnfetch(pFile, iOfst+p->iPgOne, pPage); +} + +/* +** Check to see if the file is an ordinary SQLite database file. +*/ +static int apndIsOrdinaryDatabaseFile(sqlite3_int64 sz, sqlite3_file *pFile){ + int rc; + char zHdr[16]; + static const char aSqliteHdr[] = "SQLite format 3"; + if( sz<512 ) return 0; + rc = pFile->pMethods->xRead(pFile, zHdr, sizeof(zHdr), 0); + if( rc ) return 0; + return memcmp(zHdr, aSqliteHdr, sizeof(zHdr))==0; +} + +/* +** Try to read the append-mark off the end of a file. Return the +** start of the appended database if the append-mark is present. If +** there is no append-mark, return -1; +*/ +static sqlite3_int64 apndReadMark(sqlite3_int64 sz, sqlite3_file *pFile){ + int rc, i; + sqlite3_int64 iMark; + unsigned char a[APND_MARK_SIZE]; + + if( sz<=APND_MARK_SIZE ) return -1; + rc = pFile->pMethods->xRead(pFile, a, APND_MARK_SIZE, sz-APND_MARK_SIZE); + if( rc ) return -1; + if( memcmp(a, APND_MARK_PREFIX, APND_MARK_PREFIX_SZ)!=0 ) return -1; + iMark = ((sqlite3_int64)(a[APND_MARK_PREFIX_SZ]&0x7f))<<56; + for(i=1; i<8; i++){ + iMark += (sqlite3_int64)a[APND_MARK_PREFIX_SZ+i]<<(56-8*i); + } + return iMark; +} + +/* +** Open an apnd file handle. +*/ +static int apndOpen( + sqlite3_vfs *pVfs, + const char *zName, + sqlite3_file *pFile, + int flags, + int *pOutFlags +){ + ApndFile *p; + sqlite3_file *pSubFile; + sqlite3_vfs *pSubVfs; + int rc; + sqlite3_int64 sz; + pSubVfs = ORIGVFS(pVfs); + if( (flags & SQLITE_OPEN_MAIN_DB)==0 ){ + return pSubVfs->xOpen(pSubVfs, zName, pFile, flags, pOutFlags); + } + p = (ApndFile*)pFile; + memset(p, 0, sizeof(*p)); + pSubFile = ORIGFILE(pFile); + p->base.pMethods = &apnd_io_methods; + rc = pSubVfs->xOpen(pSubVfs, zName, pSubFile, flags, pOutFlags); + if( rc ) goto apnd_open_done; + rc = pSubFile->pMethods->xFileSize(pSubFile, &sz); + if( rc ){ + pSubFile->pMethods->xClose(pSubFile); + goto apnd_open_done; + } + if( apndIsOrdinaryDatabaseFile(sz, pSubFile) ){ + memmove(pFile, pSubFile, pSubVfs->szOsFile); + return SQLITE_OK; + } + p->iMark = 0; + p->iPgOne = apndReadMark(sz, pFile); + if( p->iPgOne>0 ){ + return SQLITE_OK; + } + if( (flags & SQLITE_OPEN_CREATE)==0 ){ + pSubFile->pMethods->xClose(pSubFile); + rc = SQLITE_CANTOPEN; + } + p->iPgOne = (sz+0xfff) & ~(sqlite3_int64)0xfff; +apnd_open_done: + if( rc ) pFile->pMethods = 0; + return rc; +} + +/* +** All other VFS methods are pass-thrus. +*/ +static int apndDelete(sqlite3_vfs *pVfs, const char *zPath, int dirSync){ + return ORIGVFS(pVfs)->xDelete(ORIGVFS(pVfs), zPath, dirSync); +} +static int apndAccess( + sqlite3_vfs *pVfs, + const char *zPath, + int flags, + int *pResOut +){ + return ORIGVFS(pVfs)->xAccess(ORIGVFS(pVfs), zPath, flags, pResOut); +} +static int apndFullPathname( + sqlite3_vfs *pVfs, + const char *zPath, + int nOut, + char *zOut +){ + return ORIGVFS(pVfs)->xFullPathname(ORIGVFS(pVfs),zPath,nOut,zOut); +} +static void *apndDlOpen(sqlite3_vfs *pVfs, const char *zPath){ + return ORIGVFS(pVfs)->xDlOpen(ORIGVFS(pVfs), zPath); +} +static void apndDlError(sqlite3_vfs *pVfs, int nByte, char *zErrMsg){ + ORIGVFS(pVfs)->xDlError(ORIGVFS(pVfs), nByte, zErrMsg); +} +static void (*apndDlSym(sqlite3_vfs *pVfs, void *p, const char *zSym))(void){ + return ORIGVFS(pVfs)->xDlSym(ORIGVFS(pVfs), p, zSym); +} +static void apndDlClose(sqlite3_vfs *pVfs, void *pHandle){ + ORIGVFS(pVfs)->xDlClose(ORIGVFS(pVfs), pHandle); +} +static int apndRandomness(sqlite3_vfs *pVfs, int nByte, char *zBufOut){ + return ORIGVFS(pVfs)->xRandomness(ORIGVFS(pVfs), nByte, zBufOut); +} +static int apndSleep(sqlite3_vfs *pVfs, int nMicro){ + return ORIGVFS(pVfs)->xSleep(ORIGVFS(pVfs), nMicro); +} +static int apndCurrentTime(sqlite3_vfs *pVfs, double *pTimeOut){ + return ORIGVFS(pVfs)->xCurrentTime(ORIGVFS(pVfs), pTimeOut); +} +static int apndGetLastError(sqlite3_vfs *pVfs, int a, char *b){ + return ORIGVFS(pVfs)->xGetLastError(ORIGVFS(pVfs), a, b); +} +static int apndCurrentTimeInt64(sqlite3_vfs *pVfs, sqlite3_int64 *p){ + return ORIGVFS(pVfs)->xCurrentTimeInt64(ORIGVFS(pVfs), p); +} +static int apndSetSystemCall( + sqlite3_vfs *pVfs, + const char *zName, + sqlite3_syscall_ptr pCall +){ + return ORIGVFS(pVfs)->xSetSystemCall(ORIGVFS(pVfs),zName,pCall); +} +static sqlite3_syscall_ptr apndGetSystemCall( + sqlite3_vfs *pVfs, + const char *zName +){ + return ORIGVFS(pVfs)->xGetSystemCall(ORIGVFS(pVfs),zName); +} +static const char *apndNextSystemCall(sqlite3_vfs *pVfs, const char *zName){ + return ORIGVFS(pVfs)->xNextSystemCall(ORIGVFS(pVfs), zName); +} + + +#ifdef _WIN32 + +#endif +/* +** This routine is called when the extension is loaded. +** Register the new VFS. +*/ +int sqlite3_appendvfs_init( + sqlite3 *db, + char **pzErrMsg, + const sqlite3_api_routines *pApi +){ + int rc = SQLITE_OK; + sqlite3_vfs *pOrig; + SQLITE_EXTENSION_INIT2(pApi); + (void)pzErrMsg; + (void)db; + pOrig = sqlite3_vfs_find(0); + apnd_vfs.iVersion = pOrig->iVersion; + apnd_vfs.pAppData = pOrig; + apnd_vfs.szOsFile = pOrig->szOsFile + sizeof(ApndFile); + rc = sqlite3_vfs_register(&apnd_vfs, 0); +#ifdef APPENDVFS_TEST + if( rc==SQLITE_OK ){ + rc = sqlite3_auto_extension((void(*)(void))apndvfsRegister); + } +#endif + if( rc==SQLITE_OK ) rc = SQLITE_OK_LOAD_PERMANENTLY; + return rc; +} + +/************************* End ../ext/misc/appendvfs.c ********************/ +#ifdef SQLITE_HAVE_ZLIB +/************************* Begin ../ext/misc/zipfile.c ******************/ +/* +** 2017-12-26 +** +** The author disclaims copyright to this source code. In place of +** a legal notice, here is a blessing: +** +** May you do good and not evil. +** May you find forgiveness for yourself and forgive others. +** May you share freely, never taking more than you give. +** +****************************************************************************** +** +** This file implements a virtual table for reading and writing ZIP archive +** files. +** +** Usage example: +** +** SELECT name, sz, datetime(mtime,'unixepoch') FROM zipfile($filename); +** +** Current limitations: +** +** * No support for encryption +** * No support for ZIP archives spanning multiple files +** * No support for zip64 extensions +** * Only the "inflate/deflate" (zlib) compression method is supported +*/ +SQLITE_EXTENSION_INIT1 +#include +#include +#include + +#include + +#ifndef SQLITE_OMIT_VIRTUALTABLE + +#ifndef SQLITE_AMALGAMATION + +/* typedef sqlite3_int64 i64; */ +/* typedef unsigned char u8; */ +typedef unsigned short u16; +typedef unsigned long u32; +#define MIN(a,b) ((a)<(b) ? (a) : (b)) + +#if defined(SQLITE_COVERAGE_TEST) || defined(SQLITE_MUTATION_TEST) +# define ALWAYS(X) (1) +# define NEVER(X) (0) +#elif !defined(NDEBUG) +# define ALWAYS(X) ((X)?1:(assert(0),0)) +# define NEVER(X) ((X)?(assert(0),1):0) +#else +# define ALWAYS(X) (X) +# define NEVER(X) (X) +#endif + +#endif /* SQLITE_AMALGAMATION */ + +/* +** Definitions for mode bitmasks S_IFDIR, S_IFREG and S_IFLNK. +** +** In some ways it would be better to obtain these values from system +** header files. But, the dependency is undesirable and (a) these +** have been stable for decades, (b) the values are part of POSIX and +** are also made explicit in [man stat], and (c) are part of the +** file format for zip archives. +*/ +#ifndef S_IFDIR +# define S_IFDIR 0040000 +#endif +#ifndef S_IFREG +# define S_IFREG 0100000 +#endif +#ifndef S_IFLNK +# define S_IFLNK 0120000 +#endif + +static const char ZIPFILE_SCHEMA[] = + "CREATE TABLE y(" + "name PRIMARY KEY," /* 0: Name of file in zip archive */ + "mode," /* 1: POSIX mode for file */ + "mtime," /* 2: Last modification time (secs since 1970)*/ + "sz," /* 3: Size of object */ + "rawdata," /* 4: Raw data */ + "data," /* 5: Uncompressed data */ + "method," /* 6: Compression method (integer) */ + "z HIDDEN" /* 7: Name of zip file */ + ") WITHOUT ROWID;"; + +#define ZIPFILE_F_COLUMN_IDX 7 /* Index of column "file" in the above */ +#define ZIPFILE_BUFFER_SIZE (64*1024) + + +/* +** Magic numbers used to read and write zip files. +** +** ZIPFILE_NEWENTRY_MADEBY: +** Use this value for the "version-made-by" field in new zip file +** entries. The upper byte indicates "unix", and the lower byte +** indicates that the zip file matches pkzip specification 3.0. +** This is what info-zip seems to do. +** +** ZIPFILE_NEWENTRY_REQUIRED: +** Value for "version-required-to-extract" field of new entries. +** Version 2.0 is required to support folders and deflate compression. +** +** ZIPFILE_NEWENTRY_FLAGS: +** Value for "general-purpose-bit-flags" field of new entries. Bit +** 11 means "utf-8 filename and comment". +** +** ZIPFILE_SIGNATURE_CDS: +** First 4 bytes of a valid CDS record. +** +** ZIPFILE_SIGNATURE_LFH: +** First 4 bytes of a valid LFH record. +** +** ZIPFILE_SIGNATURE_EOCD +** First 4 bytes of a valid EOCD record. +*/ +#define ZIPFILE_EXTRA_TIMESTAMP 0x5455 +#define ZIPFILE_NEWENTRY_MADEBY ((3<<8) + 30) +#define ZIPFILE_NEWENTRY_REQUIRED 20 +#define ZIPFILE_NEWENTRY_FLAGS 0x800 +#define ZIPFILE_SIGNATURE_CDS 0x02014b50 +#define ZIPFILE_SIGNATURE_LFH 0x04034b50 +#define ZIPFILE_SIGNATURE_EOCD 0x06054b50 + +/* +** The sizes of the fixed-size part of each of the three main data +** structures in a zip archive. +*/ +#define ZIPFILE_LFH_FIXED_SZ 30 +#define ZIPFILE_EOCD_FIXED_SZ 22 +#define ZIPFILE_CDS_FIXED_SZ 46 + +/* +*** 4.3.16 End of central directory record: +*** +*** end of central dir signature 4 bytes (0x06054b50) +*** number of this disk 2 bytes +*** number of the disk with the +*** start of the central directory 2 bytes +*** total number of entries in the +*** central directory on this disk 2 bytes +*** total number of entries in +*** the central directory 2 bytes +*** size of the central directory 4 bytes +*** offset of start of central +*** directory with respect to +*** the starting disk number 4 bytes +*** .ZIP file comment length 2 bytes +*** .ZIP file comment (variable size) +*/ +typedef struct ZipfileEOCD ZipfileEOCD; +struct ZipfileEOCD { + u16 iDisk; + u16 iFirstDisk; + u16 nEntry; + u16 nEntryTotal; + u32 nSize; + u32 iOffset; +}; + +/* +*** 4.3.12 Central directory structure: +*** +*** ... +*** +*** central file header signature 4 bytes (0x02014b50) +*** version made by 2 bytes +*** version needed to extract 2 bytes +*** general purpose bit flag 2 bytes +*** compression method 2 bytes +*** last mod file time 2 bytes +*** last mod file date 2 bytes +*** crc-32 4 bytes +*** compressed size 4 bytes +*** uncompressed size 4 bytes +*** file name length 2 bytes +*** extra field length 2 bytes +*** file comment length 2 bytes +*** disk number start 2 bytes +*** internal file attributes 2 bytes +*** external file attributes 4 bytes +*** relative offset of local header 4 bytes +*/ +typedef struct ZipfileCDS ZipfileCDS; +struct ZipfileCDS { + u16 iVersionMadeBy; + u16 iVersionExtract; + u16 flags; + u16 iCompression; + u16 mTime; + u16 mDate; + u32 crc32; + u32 szCompressed; + u32 szUncompressed; + u16 nFile; + u16 nExtra; + u16 nComment; + u16 iDiskStart; + u16 iInternalAttr; + u32 iExternalAttr; + u32 iOffset; + char *zFile; /* Filename (sqlite3_malloc()) */ +}; + +/* +*** 4.3.7 Local file header: +*** +*** local file header signature 4 bytes (0x04034b50) +*** version needed to extract 2 bytes +*** general purpose bit flag 2 bytes +*** compression method 2 bytes +*** last mod file time 2 bytes +*** last mod file date 2 bytes +*** crc-32 4 bytes +*** compressed size 4 bytes +*** uncompressed size 4 bytes +*** file name length 2 bytes +*** extra field length 2 bytes +*** +*/ +typedef struct ZipfileLFH ZipfileLFH; +struct ZipfileLFH { + u16 iVersionExtract; + u16 flags; + u16 iCompression; + u16 mTime; + u16 mDate; + u32 crc32; + u32 szCompressed; + u32 szUncompressed; + u16 nFile; + u16 nExtra; +}; + +typedef struct ZipfileEntry ZipfileEntry; +struct ZipfileEntry { + ZipfileCDS cds; /* Parsed CDS record */ + u32 mUnixTime; /* Modification time, in UNIX format */ + u8 *aExtra; /* cds.nExtra+cds.nComment bytes of extra data */ + i64 iDataOff; /* Offset to data in file (if aData==0) */ + u8 *aData; /* cds.szCompressed bytes of compressed data */ + ZipfileEntry *pNext; /* Next element in in-memory CDS */ +}; + +/* +** Cursor type for zipfile tables. +*/ +typedef struct ZipfileCsr ZipfileCsr; +struct ZipfileCsr { + sqlite3_vtab_cursor base; /* Base class - must be first */ + i64 iId; /* Cursor ID */ + u8 bEof; /* True when at EOF */ + u8 bNoop; /* If next xNext() call is no-op */ + + /* Used outside of write transactions */ + FILE *pFile; /* Zip file */ + i64 iNextOff; /* Offset of next record in central directory */ + ZipfileEOCD eocd; /* Parse of central directory record */ + + ZipfileEntry *pFreeEntry; /* Free this list when cursor is closed or reset */ + ZipfileEntry *pCurrent; /* Current entry */ + ZipfileCsr *pCsrNext; /* Next cursor on same virtual table */ +}; + +typedef struct ZipfileTab ZipfileTab; +struct ZipfileTab { + sqlite3_vtab base; /* Base class - must be first */ + char *zFile; /* Zip file this table accesses (may be NULL) */ + sqlite3 *db; /* Host database connection */ + u8 *aBuffer; /* Temporary buffer used for various tasks */ + + ZipfileCsr *pCsrList; /* List of cursors */ + i64 iNextCsrid; + + /* The following are used by write transactions only */ + ZipfileEntry *pFirstEntry; /* Linked list of all files (if pWriteFd!=0) */ + ZipfileEntry *pLastEntry; /* Last element in pFirstEntry list */ + FILE *pWriteFd; /* File handle open on zip archive */ + i64 szCurrent; /* Current size of zip archive */ + i64 szOrig; /* Size of archive at start of transaction */ +}; + +/* +** Set the error message contained in context ctx to the results of +** vprintf(zFmt, ...). +*/ +static void zipfileCtxErrorMsg(sqlite3_context *ctx, const char *zFmt, ...){ + char *zMsg = 0; + va_list ap; + va_start(ap, zFmt); + zMsg = sqlite3_vmprintf(zFmt, ap); + sqlite3_result_error(ctx, zMsg, -1); + sqlite3_free(zMsg); + va_end(ap); +} + +/* +** If string zIn is quoted, dequote it in place. Otherwise, if the string +** is not quoted, do nothing. +*/ +static void zipfileDequote(char *zIn){ + char q = zIn[0]; + if( q=='"' || q=='\'' || q=='`' || q=='[' ){ + int iIn = 1; + int iOut = 0; + if( q=='[' ) q = ']'; + while( ALWAYS(zIn[iIn]) ){ + char c = zIn[iIn++]; + if( c==q && zIn[iIn++]!=q ) break; + zIn[iOut++] = c; + } + zIn[iOut] = '\0'; + } +} + +/* +** Construct a new ZipfileTab virtual table object. +** +** argv[0] -> module name ("zipfile") +** argv[1] -> database name +** argv[2] -> table name +** argv[...] -> "column name" and other module argument fields. +*/ +static int zipfileConnect( + sqlite3 *db, + void *pAux, + int argc, const char *const*argv, + sqlite3_vtab **ppVtab, + char **pzErr +){ + int nByte = sizeof(ZipfileTab) + ZIPFILE_BUFFER_SIZE; + int nFile = 0; + const char *zFile = 0; + ZipfileTab *pNew = 0; + int rc; + + /* If the table name is not "zipfile", require that the argument be + ** specified. This stops zipfile tables from being created as: + ** + ** CREATE VIRTUAL TABLE zzz USING zipfile(); + ** + ** It does not prevent: + ** + ** CREATE VIRTUAL TABLE zipfile USING zipfile(); + */ + assert( 0==sqlite3_stricmp(argv[0], "zipfile") ); + if( (0!=sqlite3_stricmp(argv[2], "zipfile") && argc<4) || argc>4 ){ + *pzErr = sqlite3_mprintf("zipfile constructor requires one argument"); + return SQLITE_ERROR; + } + + if( argc>3 ){ + zFile = argv[3]; + nFile = (int)strlen(zFile)+1; + } + + rc = sqlite3_declare_vtab(db, ZIPFILE_SCHEMA); + if( rc==SQLITE_OK ){ + pNew = (ZipfileTab*)sqlite3_malloc(nByte+nFile); + if( pNew==0 ) return SQLITE_NOMEM; + memset(pNew, 0, nByte+nFile); + pNew->db = db; + pNew->aBuffer = (u8*)&pNew[1]; + if( zFile ){ + pNew->zFile = (char*)&pNew->aBuffer[ZIPFILE_BUFFER_SIZE]; + memcpy(pNew->zFile, zFile, nFile); + zipfileDequote(pNew->zFile); + } + } + *ppVtab = (sqlite3_vtab*)pNew; + return rc; +} + +/* +** Free the ZipfileEntry structure indicated by the only argument. +*/ +static void zipfileEntryFree(ZipfileEntry *p){ + if( p ){ + sqlite3_free(p->cds.zFile); + sqlite3_free(p); + } +} + +/* +** Release resources that should be freed at the end of a write +** transaction. +*/ +static void zipfileCleanupTransaction(ZipfileTab *pTab){ + ZipfileEntry *pEntry; + ZipfileEntry *pNext; + + if( pTab->pWriteFd ){ + fclose(pTab->pWriteFd); + pTab->pWriteFd = 0; + } + for(pEntry=pTab->pFirstEntry; pEntry; pEntry=pNext){ + pNext = pEntry->pNext; + zipfileEntryFree(pEntry); + } + pTab->pFirstEntry = 0; + pTab->pLastEntry = 0; + pTab->szCurrent = 0; + pTab->szOrig = 0; +} + +/* +** This method is the destructor for zipfile vtab objects. +*/ +static int zipfileDisconnect(sqlite3_vtab *pVtab){ + zipfileCleanupTransaction((ZipfileTab*)pVtab); + sqlite3_free(pVtab); + return SQLITE_OK; +} + +/* +** Constructor for a new ZipfileCsr object. +*/ +static int zipfileOpen(sqlite3_vtab *p, sqlite3_vtab_cursor **ppCsr){ + ZipfileTab *pTab = (ZipfileTab*)p; + ZipfileCsr *pCsr; + pCsr = sqlite3_malloc(sizeof(*pCsr)); + *ppCsr = (sqlite3_vtab_cursor*)pCsr; + if( pCsr==0 ){ + return SQLITE_NOMEM; + } + memset(pCsr, 0, sizeof(*pCsr)); + pCsr->iId = ++pTab->iNextCsrid; + pCsr->pCsrNext = pTab->pCsrList; + pTab->pCsrList = pCsr; + return SQLITE_OK; +} + +/* +** Reset a cursor back to the state it was in when first returned +** by zipfileOpen(). +*/ +static void zipfileResetCursor(ZipfileCsr *pCsr){ + ZipfileEntry *p; + ZipfileEntry *pNext; + + pCsr->bEof = 0; + if( pCsr->pFile ){ + fclose(pCsr->pFile); + pCsr->pFile = 0; + zipfileEntryFree(pCsr->pCurrent); + pCsr->pCurrent = 0; + } + + for(p=pCsr->pFreeEntry; p; p=pNext){ + pNext = p->pNext; + zipfileEntryFree(p); + } +} + +/* +** Destructor for an ZipfileCsr. +*/ +static int zipfileClose(sqlite3_vtab_cursor *cur){ + ZipfileCsr *pCsr = (ZipfileCsr*)cur; + ZipfileTab *pTab = (ZipfileTab*)(pCsr->base.pVtab); + ZipfileCsr **pp; + zipfileResetCursor(pCsr); + + /* Remove this cursor from the ZipfileTab.pCsrList list. */ + for(pp=&pTab->pCsrList; *pp!=pCsr; pp=&((*pp)->pCsrNext)); + *pp = pCsr->pCsrNext; + + sqlite3_free(pCsr); + return SQLITE_OK; +} + +/* +** Set the error message for the virtual table associated with cursor +** pCsr to the results of vprintf(zFmt, ...). +*/ +static void zipfileTableErr(ZipfileTab *pTab, const char *zFmt, ...){ + va_list ap; + va_start(ap, zFmt); + sqlite3_free(pTab->base.zErrMsg); + pTab->base.zErrMsg = sqlite3_vmprintf(zFmt, ap); + va_end(ap); +} +static void zipfileCursorErr(ZipfileCsr *pCsr, const char *zFmt, ...){ + va_list ap; + va_start(ap, zFmt); + sqlite3_free(pCsr->base.pVtab->zErrMsg); + pCsr->base.pVtab->zErrMsg = sqlite3_vmprintf(zFmt, ap); + va_end(ap); +} + +/* +** Read nRead bytes of data from offset iOff of file pFile into buffer +** aRead[]. Return SQLITE_OK if successful, or an SQLite error code +** otherwise. +** +** If an error does occur, output variable (*pzErrmsg) may be set to point +** to an English language error message. It is the responsibility of the +** caller to eventually free this buffer using +** sqlite3_free(). +*/ +static int zipfileReadData( + FILE *pFile, /* Read from this file */ + u8 *aRead, /* Read into this buffer */ + int nRead, /* Number of bytes to read */ + i64 iOff, /* Offset to read from */ + char **pzErrmsg /* OUT: Error message (from sqlite3_malloc) */ +){ + size_t n; + fseek(pFile, (long)iOff, SEEK_SET); + n = fread(aRead, 1, nRead, pFile); + if( (int)n!=nRead ){ + *pzErrmsg = sqlite3_mprintf("error in fread()"); + return SQLITE_ERROR; + } + return SQLITE_OK; +} + +static int zipfileAppendData( + ZipfileTab *pTab, + const u8 *aWrite, + int nWrite +){ + size_t n; + fseek(pTab->pWriteFd, (long)pTab->szCurrent, SEEK_SET); + n = fwrite(aWrite, 1, nWrite, pTab->pWriteFd); + if( (int)n!=nWrite ){ + pTab->base.zErrMsg = sqlite3_mprintf("error in fwrite()"); + return SQLITE_ERROR; + } + pTab->szCurrent += nWrite; + return SQLITE_OK; +} + +/* +** Read and return a 16-bit little-endian unsigned integer from buffer aBuf. +*/ +static u16 zipfileGetU16(const u8 *aBuf){ + return (aBuf[1] << 8) + aBuf[0]; +} + +/* +** Read and return a 32-bit little-endian unsigned integer from buffer aBuf. +*/ +static u32 zipfileGetU32(const u8 *aBuf){ + return ((u32)(aBuf[3]) << 24) + + ((u32)(aBuf[2]) << 16) + + ((u32)(aBuf[1]) << 8) + + ((u32)(aBuf[0]) << 0); +} + +/* +** Write a 16-bit little endiate integer into buffer aBuf. +*/ +static void zipfilePutU16(u8 *aBuf, u16 val){ + aBuf[0] = val & 0xFF; + aBuf[1] = (val>>8) & 0xFF; +} + +/* +** Write a 32-bit little endiate integer into buffer aBuf. +*/ +static void zipfilePutU32(u8 *aBuf, u32 val){ + aBuf[0] = val & 0xFF; + aBuf[1] = (val>>8) & 0xFF; + aBuf[2] = (val>>16) & 0xFF; + aBuf[3] = (val>>24) & 0xFF; +} + +#define zipfileRead32(aBuf) ( aBuf+=4, zipfileGetU32(aBuf-4) ) +#define zipfileRead16(aBuf) ( aBuf+=2, zipfileGetU16(aBuf-2) ) + +#define zipfileWrite32(aBuf,val) { zipfilePutU32(aBuf,val); aBuf+=4; } +#define zipfileWrite16(aBuf,val) { zipfilePutU16(aBuf,val); aBuf+=2; } + +/* +** Magic numbers used to read CDS records. +*/ +#define ZIPFILE_CDS_NFILE_OFF 28 +#define ZIPFILE_CDS_SZCOMPRESSED_OFF 20 + +/* +** Decode the CDS record in buffer aBuf into (*pCDS). Return SQLITE_ERROR +** if the record is not well-formed, or SQLITE_OK otherwise. +*/ +static int zipfileReadCDS(u8 *aBuf, ZipfileCDS *pCDS){ + u8 *aRead = aBuf; + u32 sig = zipfileRead32(aRead); + int rc = SQLITE_OK; + if( sig!=ZIPFILE_SIGNATURE_CDS ){ + rc = SQLITE_ERROR; + }else{ + pCDS->iVersionMadeBy = zipfileRead16(aRead); + pCDS->iVersionExtract = zipfileRead16(aRead); + pCDS->flags = zipfileRead16(aRead); + pCDS->iCompression = zipfileRead16(aRead); + pCDS->mTime = zipfileRead16(aRead); + pCDS->mDate = zipfileRead16(aRead); + pCDS->crc32 = zipfileRead32(aRead); + pCDS->szCompressed = zipfileRead32(aRead); + pCDS->szUncompressed = zipfileRead32(aRead); + assert( aRead==&aBuf[ZIPFILE_CDS_NFILE_OFF] ); + pCDS->nFile = zipfileRead16(aRead); + pCDS->nExtra = zipfileRead16(aRead); + pCDS->nComment = zipfileRead16(aRead); + pCDS->iDiskStart = zipfileRead16(aRead); + pCDS->iInternalAttr = zipfileRead16(aRead); + pCDS->iExternalAttr = zipfileRead32(aRead); + pCDS->iOffset = zipfileRead32(aRead); + assert( aRead==&aBuf[ZIPFILE_CDS_FIXED_SZ] ); + } + + return rc; +} + +/* +** Decode the LFH record in buffer aBuf into (*pLFH). Return SQLITE_ERROR +** if the record is not well-formed, or SQLITE_OK otherwise. +*/ +static int zipfileReadLFH( + u8 *aBuffer, + ZipfileLFH *pLFH +){ + u8 *aRead = aBuffer; + int rc = SQLITE_OK; + + u32 sig = zipfileRead32(aRead); + if( sig!=ZIPFILE_SIGNATURE_LFH ){ + rc = SQLITE_ERROR; + }else{ + pLFH->iVersionExtract = zipfileRead16(aRead); + pLFH->flags = zipfileRead16(aRead); + pLFH->iCompression = zipfileRead16(aRead); + pLFH->mTime = zipfileRead16(aRead); + pLFH->mDate = zipfileRead16(aRead); + pLFH->crc32 = zipfileRead32(aRead); + pLFH->szCompressed = zipfileRead32(aRead); + pLFH->szUncompressed = zipfileRead32(aRead); + pLFH->nFile = zipfileRead16(aRead); + pLFH->nExtra = zipfileRead16(aRead); + } + return rc; +} + + +/* +** Buffer aExtra (size nExtra bytes) contains zip archive "extra" fields. +** Scan through this buffer to find an "extra-timestamp" field. If one +** exists, extract the 32-bit modification-timestamp from it and store +** the value in output parameter *pmTime. +** +** Zero is returned if no extra-timestamp record could be found (and so +** *pmTime is left unchanged), or non-zero otherwise. +** +** The general format of an extra field is: +** +** Header ID 2 bytes +** Data Size 2 bytes +** Data N bytes +*/ +static int zipfileScanExtra(u8 *aExtra, int nExtra, u32 *pmTime){ + int ret = 0; + u8 *p = aExtra; + u8 *pEnd = &aExtra[nExtra]; + + while( p modtime is present */ + *pmTime = zipfileGetU32(&p[1]); + ret = 1; + } + break; + } + } + + p += nByte; + } + return ret; +} + +/* +** Convert the standard MS-DOS timestamp stored in the mTime and mDate +** fields of the CDS structure passed as the only argument to a 32-bit +** UNIX seconds-since-the-epoch timestamp. Return the result. +** +** "Standard" MS-DOS time format: +** +** File modification time: +** Bits 00-04: seconds divided by 2 +** Bits 05-10: minute +** Bits 11-15: hour +** File modification date: +** Bits 00-04: day +** Bits 05-08: month (1-12) +** Bits 09-15: years from 1980 +** +** https://msdn.microsoft.com/en-us/library/9kkf9tah.aspx +*/ +static u32 zipfileMtime(ZipfileCDS *pCDS){ + int Y = (1980 + ((pCDS->mDate >> 9) & 0x7F)); + int M = ((pCDS->mDate >> 5) & 0x0F); + int D = (pCDS->mDate & 0x1F); + int B = -13; + + int sec = (pCDS->mTime & 0x1F)*2; + int min = (pCDS->mTime >> 5) & 0x3F; + int hr = (pCDS->mTime >> 11) & 0x1F; + i64 JD; + + /* JD = INT(365.25 * (Y+4716)) + INT(30.6001 * (M+1)) + D + B - 1524.5 */ + + /* Calculate the JD in seconds for noon on the day in question */ + if( M<3 ){ + Y = Y-1; + M = M+12; + } + JD = (i64)(24*60*60) * ( + (int)(365.25 * (Y + 4716)) + + (int)(30.6001 * (M + 1)) + + D + B - 1524 + ); + + /* Correct the JD for the time within the day */ + JD += (hr-12) * 3600 + min * 60 + sec; + + /* Convert JD to unix timestamp (the JD epoch is 2440587.5) */ + return (u32)(JD - (i64)(24405875) * 24*60*6); +} + +/* +** The opposite of zipfileMtime(). This function populates the mTime and +** mDate fields of the CDS structure passed as the first argument according +** to the UNIX timestamp value passed as the second. +*/ +static void zipfileMtimeToDos(ZipfileCDS *pCds, u32 mUnixTime){ + /* Convert unix timestamp to JD (2440588 is noon on 1/1/1970) */ + i64 JD = (i64)2440588 + mUnixTime / (24*60*60); + + int A, B, C, D, E; + int yr, mon, day; + int hr, min, sec; + + A = (int)((JD - 1867216.25)/36524.25); + A = (int)(JD + 1 + A - (A/4)); + B = A + 1524; + C = (int)((B - 122.1)/365.25); + D = (36525*(C&32767))/100; + E = (int)((B-D)/30.6001); + + day = B - D - (int)(30.6001*E); + mon = (E<14 ? E-1 : E-13); + yr = mon>2 ? C-4716 : C-4715; + + hr = (mUnixTime % (24*60*60)) / (60*60); + min = (mUnixTime % (60*60)) / 60; + sec = (mUnixTime % 60); + + if( yr>=1980 ){ + pCds->mDate = (u16)(day + (mon << 5) + ((yr-1980) << 9)); + pCds->mTime = (u16)(sec/2 + (min<<5) + (hr<<11)); + }else{ + pCds->mDate = pCds->mTime = 0; + } + + assert( mUnixTime<315507600 + || mUnixTime==zipfileMtime(pCds) + || ((mUnixTime % 2) && mUnixTime-1==zipfileMtime(pCds)) + /* || (mUnixTime % 2) */ + ); +} + +/* +** If aBlob is not NULL, then it is a pointer to a buffer (nBlob bytes in +** size) containing an entire zip archive image. Or, if aBlob is NULL, +** then pFile is a file-handle open on a zip file. In either case, this +** function creates a ZipfileEntry object based on the zip archive entry +** for which the CDS record is at offset iOff. +** +** If successful, SQLITE_OK is returned and (*ppEntry) set to point to +** the new object. Otherwise, an SQLite error code is returned and the +** final value of (*ppEntry) undefined. +*/ +static int zipfileGetEntry( + ZipfileTab *pTab, /* Store any error message here */ + const u8 *aBlob, /* Pointer to in-memory file image */ + int nBlob, /* Size of aBlob[] in bytes */ + FILE *pFile, /* If aBlob==0, read from this file */ + i64 iOff, /* Offset of CDS record */ + ZipfileEntry **ppEntry /* OUT: Pointer to new object */ +){ + u8 *aRead; + char **pzErr = &pTab->base.zErrMsg; + int rc = SQLITE_OK; + + if( aBlob==0 ){ + aRead = pTab->aBuffer; + rc = zipfileReadData(pFile, aRead, ZIPFILE_CDS_FIXED_SZ, iOff, pzErr); + }else{ + aRead = (u8*)&aBlob[iOff]; + } + + if( rc==SQLITE_OK ){ + int nAlloc; + ZipfileEntry *pNew; + + int nFile = zipfileGetU16(&aRead[ZIPFILE_CDS_NFILE_OFF]); + int nExtra = zipfileGetU16(&aRead[ZIPFILE_CDS_NFILE_OFF+2]); + nExtra += zipfileGetU16(&aRead[ZIPFILE_CDS_NFILE_OFF+4]); + + nAlloc = sizeof(ZipfileEntry) + nExtra; + if( aBlob ){ + nAlloc += zipfileGetU32(&aRead[ZIPFILE_CDS_SZCOMPRESSED_OFF]); + } + + pNew = (ZipfileEntry*)sqlite3_malloc(nAlloc); + if( pNew==0 ){ + rc = SQLITE_NOMEM; + }else{ + memset(pNew, 0, sizeof(ZipfileEntry)); + rc = zipfileReadCDS(aRead, &pNew->cds); + if( rc!=SQLITE_OK ){ + *pzErr = sqlite3_mprintf("failed to read CDS at offset %lld", iOff); + }else if( aBlob==0 ){ + rc = zipfileReadData( + pFile, aRead, nExtra+nFile, iOff+ZIPFILE_CDS_FIXED_SZ, pzErr + ); + }else{ + aRead = (u8*)&aBlob[iOff + ZIPFILE_CDS_FIXED_SZ]; + } + } + + if( rc==SQLITE_OK ){ + u32 *pt = &pNew->mUnixTime; + pNew->cds.zFile = sqlite3_mprintf("%.*s", nFile, aRead); + pNew->aExtra = (u8*)&pNew[1]; + memcpy(pNew->aExtra, &aRead[nFile], nExtra); + if( pNew->cds.zFile==0 ){ + rc = SQLITE_NOMEM; + }else if( 0==zipfileScanExtra(&aRead[nFile], pNew->cds.nExtra, pt) ){ + pNew->mUnixTime = zipfileMtime(&pNew->cds); + } + } + + if( rc==SQLITE_OK ){ + static const int szFix = ZIPFILE_LFH_FIXED_SZ; + ZipfileLFH lfh; + if( pFile ){ + rc = zipfileReadData(pFile, aRead, szFix, pNew->cds.iOffset, pzErr); + }else{ + aRead = (u8*)&aBlob[pNew->cds.iOffset]; + } + + rc = zipfileReadLFH(aRead, &lfh); + if( rc==SQLITE_OK ){ + pNew->iDataOff = pNew->cds.iOffset + ZIPFILE_LFH_FIXED_SZ; + pNew->iDataOff += lfh.nFile + lfh.nExtra; + if( aBlob && pNew->cds.szCompressed ){ + pNew->aData = &pNew->aExtra[nExtra]; + memcpy(pNew->aData, &aBlob[pNew->iDataOff], pNew->cds.szCompressed); + } + }else{ + *pzErr = sqlite3_mprintf("failed to read LFH at offset %d", + (int)pNew->cds.iOffset + ); + } + } + + if( rc!=SQLITE_OK ){ + zipfileEntryFree(pNew); + }else{ + *ppEntry = pNew; + } + } + + return rc; +} + +/* +** Advance an ZipfileCsr to its next row of output. +*/ +static int zipfileNext(sqlite3_vtab_cursor *cur){ + ZipfileCsr *pCsr = (ZipfileCsr*)cur; + int rc = SQLITE_OK; + + if( pCsr->pFile ){ + i64 iEof = pCsr->eocd.iOffset + pCsr->eocd.nSize; + zipfileEntryFree(pCsr->pCurrent); + pCsr->pCurrent = 0; + if( pCsr->iNextOff>=iEof ){ + pCsr->bEof = 1; + }else{ + ZipfileEntry *p = 0; + ZipfileTab *pTab = (ZipfileTab*)(cur->pVtab); + rc = zipfileGetEntry(pTab, 0, 0, pCsr->pFile, pCsr->iNextOff, &p); + if( rc==SQLITE_OK ){ + pCsr->iNextOff += ZIPFILE_CDS_FIXED_SZ; + pCsr->iNextOff += (int)p->cds.nExtra + p->cds.nFile + p->cds.nComment; + } + pCsr->pCurrent = p; + } + }else{ + if( !pCsr->bNoop ){ + pCsr->pCurrent = pCsr->pCurrent->pNext; + } + if( pCsr->pCurrent==0 ){ + pCsr->bEof = 1; + } + } + + pCsr->bNoop = 0; + return rc; +} + +static void zipfileFree(void *p) { + sqlite3_free(p); +} + +/* +** Buffer aIn (size nIn bytes) contains compressed data. Uncompressed, the +** size is nOut bytes. This function uncompresses the data and sets the +** return value in context pCtx to the result (a blob). +** +** If an error occurs, an error code is left in pCtx instead. +*/ +static void zipfileInflate( + sqlite3_context *pCtx, /* Store result here */ + const u8 *aIn, /* Compressed data */ + int nIn, /* Size of buffer aIn[] in bytes */ + int nOut /* Expected output size */ +){ + u8 *aRes = sqlite3_malloc(nOut); + if( aRes==0 ){ + sqlite3_result_error_nomem(pCtx); + }else{ + int err; + z_stream str; + memset(&str, 0, sizeof(str)); + + str.next_in = (Byte*)aIn; + str.avail_in = nIn; + str.next_out = (Byte*)aRes; + str.avail_out = nOut; + + err = inflateInit2(&str, -15); + if( err!=Z_OK ){ + zipfileCtxErrorMsg(pCtx, "inflateInit2() failed (%d)", err); + }else{ + err = inflate(&str, Z_NO_FLUSH); + if( err!=Z_STREAM_END ){ + zipfileCtxErrorMsg(pCtx, "inflate() failed (%d)", err); + }else{ + sqlite3_result_blob(pCtx, aRes, nOut, zipfileFree); + aRes = 0; + } + } + sqlite3_free(aRes); + inflateEnd(&str); + } +} + +/* +** Buffer aIn (size nIn bytes) contains uncompressed data. This function +** compresses it and sets (*ppOut) to point to a buffer containing the +** compressed data. The caller is responsible for eventually calling +** sqlite3_free() to release buffer (*ppOut). Before returning, (*pnOut) +** is set to the size of buffer (*ppOut) in bytes. +** +** If no error occurs, SQLITE_OK is returned. Otherwise, an SQLite error +** code is returned and an error message left in virtual-table handle +** pTab. The values of (*ppOut) and (*pnOut) are left unchanged in this +** case. +*/ +static int zipfileDeflate( + const u8 *aIn, int nIn, /* Input */ + u8 **ppOut, int *pnOut, /* Output */ + char **pzErr /* OUT: Error message */ +){ + int nAlloc = (int)compressBound(nIn); + u8 *aOut; + int rc = SQLITE_OK; + + aOut = (u8*)sqlite3_malloc(nAlloc); + if( aOut==0 ){ + rc = SQLITE_NOMEM; + }else{ + int res; + z_stream str; + memset(&str, 0, sizeof(str)); + str.next_in = (Bytef*)aIn; + str.avail_in = nIn; + str.next_out = aOut; + str.avail_out = nAlloc; + + deflateInit2(&str, 9, Z_DEFLATED, -15, 8, Z_DEFAULT_STRATEGY); + res = deflate(&str, Z_FINISH); + + if( res==Z_STREAM_END ){ + *ppOut = aOut; + *pnOut = (int)str.total_out; + }else{ + sqlite3_free(aOut); + *pzErr = sqlite3_mprintf("zipfile: deflate() error"); + rc = SQLITE_ERROR; + } + deflateEnd(&str); + } + + return rc; +} + + +/* +** Return values of columns for the row at which the series_cursor +** is currently pointing. +*/ +static int zipfileColumn( + sqlite3_vtab_cursor *cur, /* The cursor */ + sqlite3_context *ctx, /* First argument to sqlite3_result_...() */ + int i /* Which column to return */ +){ + ZipfileCsr *pCsr = (ZipfileCsr*)cur; + ZipfileCDS *pCDS = &pCsr->pCurrent->cds; + int rc = SQLITE_OK; + switch( i ){ + case 0: /* name */ + sqlite3_result_text(ctx, pCDS->zFile, -1, SQLITE_TRANSIENT); + break; + case 1: /* mode */ + /* TODO: Whether or not the following is correct surely depends on + ** the platform on which the archive was created. */ + sqlite3_result_int(ctx, pCDS->iExternalAttr >> 16); + break; + case 2: { /* mtime */ + sqlite3_result_int64(ctx, pCsr->pCurrent->mUnixTime); + break; + } + case 3: { /* sz */ + if( sqlite3_vtab_nochange(ctx)==0 ){ + sqlite3_result_int64(ctx, pCDS->szUncompressed); + } + break; + } + case 4: /* rawdata */ + if( sqlite3_vtab_nochange(ctx) ) break; + case 5: { /* data */ + if( i==4 || pCDS->iCompression==0 || pCDS->iCompression==8 ){ + int sz = pCDS->szCompressed; + int szFinal = pCDS->szUncompressed; + if( szFinal>0 ){ + u8 *aBuf; + u8 *aFree = 0; + if( pCsr->pCurrent->aData ){ + aBuf = pCsr->pCurrent->aData; + }else{ + aBuf = aFree = sqlite3_malloc(sz); + if( aBuf==0 ){ + rc = SQLITE_NOMEM; + }else{ + FILE *pFile = pCsr->pFile; + if( pFile==0 ){ + pFile = ((ZipfileTab*)(pCsr->base.pVtab))->pWriteFd; + } + rc = zipfileReadData(pFile, aBuf, sz, pCsr->pCurrent->iDataOff, + &pCsr->base.pVtab->zErrMsg + ); + } + } + if( rc==SQLITE_OK ){ + if( i==5 && pCDS->iCompression ){ + zipfileInflate(ctx, aBuf, sz, szFinal); + }else{ + sqlite3_result_blob(ctx, aBuf, sz, SQLITE_TRANSIENT); + } + } + sqlite3_free(aFree); + }else{ + /* Figure out if this is a directory or a zero-sized file. Consider + ** it to be a directory either if the mode suggests so, or if + ** the final character in the name is '/'. */ + u32 mode = pCDS->iExternalAttr >> 16; + if( !(mode & S_IFDIR) && pCDS->zFile[pCDS->nFile-1]!='/' ){ + sqlite3_result_blob(ctx, "", 0, SQLITE_STATIC); + } + } + } + break; + } + case 6: /* method */ + sqlite3_result_int(ctx, pCDS->iCompression); + break; + default: /* z */ + assert( i==7 ); + sqlite3_result_int64(ctx, pCsr->iId); + break; + } + + return rc; +} + +/* +** Return TRUE if the cursor is at EOF. +*/ +static int zipfileEof(sqlite3_vtab_cursor *cur){ + ZipfileCsr *pCsr = (ZipfileCsr*)cur; + return pCsr->bEof; +} + +/* +** If aBlob is not NULL, then it points to a buffer nBlob bytes in size +** containing an entire zip archive image. Or, if aBlob is NULL, then pFile +** is guaranteed to be a file-handle open on a zip file. +** +** This function attempts to locate the EOCD record within the zip archive +** and populate *pEOCD with the results of decoding it. SQLITE_OK is +** returned if successful. Otherwise, an SQLite error code is returned and +** an English language error message may be left in virtual-table pTab. +*/ +static int zipfileReadEOCD( + ZipfileTab *pTab, /* Return errors here */ + const u8 *aBlob, /* Pointer to in-memory file image */ + int nBlob, /* Size of aBlob[] in bytes */ + FILE *pFile, /* Read from this file if aBlob==0 */ + ZipfileEOCD *pEOCD /* Object to populate */ +){ + u8 *aRead = pTab->aBuffer; /* Temporary buffer */ + int nRead; /* Bytes to read from file */ + int rc = SQLITE_OK; + + if( aBlob==0 ){ + i64 iOff; /* Offset to read from */ + i64 szFile; /* Total size of file in bytes */ + fseek(pFile, 0, SEEK_END); + szFile = (i64)ftell(pFile); + if( szFile==0 ){ + memset(pEOCD, 0, sizeof(ZipfileEOCD)); + return SQLITE_OK; + } + nRead = (int)(MIN(szFile, ZIPFILE_BUFFER_SIZE)); + iOff = szFile - nRead; + rc = zipfileReadData(pFile, aRead, nRead, iOff, &pTab->base.zErrMsg); + }else{ + nRead = (int)(MIN(nBlob, ZIPFILE_BUFFER_SIZE)); + aRead = (u8*)&aBlob[nBlob-nRead]; + } + + if( rc==SQLITE_OK ){ + int i; + + /* Scan backwards looking for the signature bytes */ + for(i=nRead-20; i>=0; i--){ + if( aRead[i]==0x50 && aRead[i+1]==0x4b + && aRead[i+2]==0x05 && aRead[i+3]==0x06 + ){ + break; + } + } + if( i<0 ){ + pTab->base.zErrMsg = sqlite3_mprintf( + "cannot find end of central directory record" + ); + return SQLITE_ERROR; + } + + aRead += i+4; + pEOCD->iDisk = zipfileRead16(aRead); + pEOCD->iFirstDisk = zipfileRead16(aRead); + pEOCD->nEntry = zipfileRead16(aRead); + pEOCD->nEntryTotal = zipfileRead16(aRead); + pEOCD->nSize = zipfileRead32(aRead); + pEOCD->iOffset = zipfileRead32(aRead); + } + + return rc; +} + +/* +** Add object pNew to the linked list that begins at ZipfileTab.pFirstEntry +** and ends with pLastEntry. If argument pBefore is NULL, then pNew is added +** to the end of the list. Otherwise, it is added to the list immediately +** before pBefore (which is guaranteed to be a part of said list). +*/ +static void zipfileAddEntry( + ZipfileTab *pTab, + ZipfileEntry *pBefore, + ZipfileEntry *pNew +){ + assert( (pTab->pFirstEntry==0)==(pTab->pLastEntry==0) ); + assert( pNew->pNext==0 ); + if( pBefore==0 ){ + if( pTab->pFirstEntry==0 ){ + pTab->pFirstEntry = pTab->pLastEntry = pNew; + }else{ + assert( pTab->pLastEntry->pNext==0 ); + pTab->pLastEntry->pNext = pNew; + pTab->pLastEntry = pNew; + } + }else{ + ZipfileEntry **pp; + for(pp=&pTab->pFirstEntry; *pp!=pBefore; pp=&((*pp)->pNext)); + pNew->pNext = pBefore; + *pp = pNew; + } +} + +static int zipfileLoadDirectory(ZipfileTab *pTab, const u8 *aBlob, int nBlob){ + ZipfileEOCD eocd; + int rc; + int i; + i64 iOff; + + rc = zipfileReadEOCD(pTab, aBlob, nBlob, pTab->pWriteFd, &eocd); + iOff = eocd.iOffset; + for(i=0; rc==SQLITE_OK && ipWriteFd, iOff, &pNew); + + if( rc==SQLITE_OK ){ + zipfileAddEntry(pTab, 0, pNew); + iOff += ZIPFILE_CDS_FIXED_SZ; + iOff += (int)pNew->cds.nExtra + pNew->cds.nFile + pNew->cds.nComment; + } + } + return rc; +} + +/* +** xFilter callback. +*/ +static int zipfileFilter( + sqlite3_vtab_cursor *cur, + int idxNum, const char *idxStr, + int argc, sqlite3_value **argv +){ + ZipfileTab *pTab = (ZipfileTab*)cur->pVtab; + ZipfileCsr *pCsr = (ZipfileCsr*)cur; + const char *zFile = 0; /* Zip file to scan */ + int rc = SQLITE_OK; /* Return Code */ + int bInMemory = 0; /* True for an in-memory zipfile */ + + zipfileResetCursor(pCsr); + + if( pTab->zFile ){ + zFile = pTab->zFile; + }else if( idxNum==0 ){ + zipfileCursorErr(pCsr, "zipfile() function requires an argument"); + return SQLITE_ERROR; + }else if( sqlite3_value_type(argv[0])==SQLITE_BLOB ){ + const u8 *aBlob = (const u8*)sqlite3_value_blob(argv[0]); + int nBlob = sqlite3_value_bytes(argv[0]); + assert( pTab->pFirstEntry==0 ); + rc = zipfileLoadDirectory(pTab, aBlob, nBlob); + pCsr->pFreeEntry = pTab->pFirstEntry; + pTab->pFirstEntry = pTab->pLastEntry = 0; + if( rc!=SQLITE_OK ) return rc; + bInMemory = 1; + }else{ + zFile = (const char*)sqlite3_value_text(argv[0]); + } + + if( 0==pTab->pWriteFd && 0==bInMemory ){ + pCsr->pFile = fopen(zFile, "rb"); + if( pCsr->pFile==0 ){ + zipfileCursorErr(pCsr, "cannot open file: %s", zFile); + rc = SQLITE_ERROR; + }else{ + rc = zipfileReadEOCD(pTab, 0, 0, pCsr->pFile, &pCsr->eocd); + if( rc==SQLITE_OK ){ + if( pCsr->eocd.nEntry==0 ){ + pCsr->bEof = 1; + }else{ + pCsr->iNextOff = pCsr->eocd.iOffset; + rc = zipfileNext(cur); + } + } + } + }else{ + pCsr->bNoop = 1; + pCsr->pCurrent = pCsr->pFreeEntry ? pCsr->pFreeEntry : pTab->pFirstEntry; + rc = zipfileNext(cur); + } + + return rc; +} + +/* +** xBestIndex callback. +*/ +static int zipfileBestIndex( + sqlite3_vtab *tab, + sqlite3_index_info *pIdxInfo +){ + int i; + + for(i=0; inConstraint; i++){ + const struct sqlite3_index_constraint *pCons = &pIdxInfo->aConstraint[i]; + if( pCons->usable==0 ) continue; + if( pCons->op!=SQLITE_INDEX_CONSTRAINT_EQ ) continue; + if( pCons->iColumn!=ZIPFILE_F_COLUMN_IDX ) continue; + break; + } + + if( inConstraint ){ + pIdxInfo->aConstraintUsage[i].argvIndex = 1; + pIdxInfo->aConstraintUsage[i].omit = 1; + pIdxInfo->estimatedCost = 1000.0; + pIdxInfo->idxNum = 1; + }else{ + pIdxInfo->estimatedCost = (double)(((sqlite3_int64)1) << 50); + pIdxInfo->idxNum = 0; + } + + return SQLITE_OK; +} + +static ZipfileEntry *zipfileNewEntry(const char *zPath){ + ZipfileEntry *pNew; + pNew = sqlite3_malloc(sizeof(ZipfileEntry)); + if( pNew ){ + memset(pNew, 0, sizeof(ZipfileEntry)); + pNew->cds.zFile = sqlite3_mprintf("%s", zPath); + if( pNew->cds.zFile==0 ){ + sqlite3_free(pNew); + pNew = 0; + } + } + return pNew; +} + +static int zipfileSerializeLFH(ZipfileEntry *pEntry, u8 *aBuf){ + ZipfileCDS *pCds = &pEntry->cds; + u8 *a = aBuf; + + pCds->nExtra = 9; + + /* Write the LFH itself */ + zipfileWrite32(a, ZIPFILE_SIGNATURE_LFH); + zipfileWrite16(a, pCds->iVersionExtract); + zipfileWrite16(a, pCds->flags); + zipfileWrite16(a, pCds->iCompression); + zipfileWrite16(a, pCds->mTime); + zipfileWrite16(a, pCds->mDate); + zipfileWrite32(a, pCds->crc32); + zipfileWrite32(a, pCds->szCompressed); + zipfileWrite32(a, pCds->szUncompressed); + zipfileWrite16(a, (u16)pCds->nFile); + zipfileWrite16(a, pCds->nExtra); + assert( a==&aBuf[ZIPFILE_LFH_FIXED_SZ] ); + + /* Add the file name */ + memcpy(a, pCds->zFile, (int)pCds->nFile); + a += (int)pCds->nFile; + + /* The "extra" data */ + zipfileWrite16(a, ZIPFILE_EXTRA_TIMESTAMP); + zipfileWrite16(a, 5); + *a++ = 0x01; + zipfileWrite32(a, pEntry->mUnixTime); + + return a-aBuf; +} + +static int zipfileAppendEntry( + ZipfileTab *pTab, + ZipfileEntry *pEntry, + const u8 *pData, + int nData +){ + u8 *aBuf = pTab->aBuffer; + int nBuf; + int rc; + + nBuf = zipfileSerializeLFH(pEntry, aBuf); + rc = zipfileAppendData(pTab, aBuf, nBuf); + if( rc==SQLITE_OK ){ + pEntry->iDataOff = pTab->szCurrent; + rc = zipfileAppendData(pTab, pData, nData); + } + + return rc; +} + +static int zipfileGetMode( + sqlite3_value *pVal, + int bIsDir, /* If true, default to directory */ + u32 *pMode, /* OUT: Mode value */ + char **pzErr /* OUT: Error message */ +){ + const char *z = (const char*)sqlite3_value_text(pVal); + u32 mode = 0; + if( z==0 ){ + mode = (bIsDir ? (S_IFDIR + 0755) : (S_IFREG + 0644)); + }else if( z[0]>='0' && z[0]<='9' ){ + mode = (unsigned int)sqlite3_value_int(pVal); + }else{ + const char zTemplate[11] = "-rwxrwxrwx"; + int i; + if( strlen(z)!=10 ) goto parse_error; + switch( z[0] ){ + case '-': mode |= S_IFREG; break; + case 'd': mode |= S_IFDIR; break; + case 'l': mode |= S_IFLNK; break; + default: goto parse_error; + } + for(i=1; i<10; i++){ + if( z[i]==zTemplate[i] ) mode |= 1 << (9-i); + else if( z[i]!='-' ) goto parse_error; + } + } + if( ((mode & S_IFDIR)==0)==bIsDir ){ + /* The "mode" attribute is a directory, but data has been specified. + ** Or vice-versa - no data but "mode" is a file or symlink. */ + *pzErr = sqlite3_mprintf("zipfile: mode does not match data"); + return SQLITE_CONSTRAINT; + } + *pMode = mode; + return SQLITE_OK; + + parse_error: + *pzErr = sqlite3_mprintf("zipfile: parse error in mode: %s", z); + return SQLITE_ERROR; +} + +/* +** Both (const char*) arguments point to nul-terminated strings. Argument +** nB is the value of strlen(zB). This function returns 0 if the strings are +** identical, ignoring any trailing '/' character in either path. */ +static int zipfileComparePath(const char *zA, const char *zB, int nB){ + int nA = (int)strlen(zA); + if( zA[nA-1]=='/' ) nA--; + if( zB[nB-1]=='/' ) nB--; + if( nA==nB && memcmp(zA, zB, nA)==0 ) return 0; + return 1; +} + +static int zipfileBegin(sqlite3_vtab *pVtab){ + ZipfileTab *pTab = (ZipfileTab*)pVtab; + int rc = SQLITE_OK; + + assert( pTab->pWriteFd==0 ); + + /* Open a write fd on the file. Also load the entire central directory + ** structure into memory. During the transaction any new file data is + ** appended to the archive file, but the central directory is accumulated + ** in main-memory until the transaction is committed. */ + pTab->pWriteFd = fopen(pTab->zFile, "ab+"); + if( pTab->pWriteFd==0 ){ + pTab->base.zErrMsg = sqlite3_mprintf( + "zipfile: failed to open file %s for writing", pTab->zFile + ); + rc = SQLITE_ERROR; + }else{ + fseek(pTab->pWriteFd, 0, SEEK_END); + pTab->szCurrent = pTab->szOrig = (i64)ftell(pTab->pWriteFd); + rc = zipfileLoadDirectory(pTab, 0, 0); + } + + if( rc!=SQLITE_OK ){ + zipfileCleanupTransaction(pTab); + } + + return rc; +} + +/* +** Return the current time as a 32-bit timestamp in UNIX epoch format (like +** time(2)). +*/ +static u32 zipfileTime(void){ + sqlite3_vfs *pVfs = sqlite3_vfs_find(0); + u32 ret; + if( pVfs->iVersion>=2 && pVfs->xCurrentTimeInt64 ){ + i64 ms; + pVfs->xCurrentTimeInt64(pVfs, &ms); + ret = (u32)((ms/1000) - ((i64)24405875 * 8640)); + }else{ + double day; + pVfs->xCurrentTime(pVfs, &day); + ret = (u32)((day - 2440587.5) * 86400); + } + return ret; +} + +/* +** Return a 32-bit timestamp in UNIX epoch format. +** +** If the value passed as the only argument is either NULL or an SQL NULL, +** return the current time. Otherwise, return the value stored in (*pVal) +** cast to a 32-bit unsigned integer. +*/ +static u32 zipfileGetTime(sqlite3_value *pVal){ + if( pVal==0 || sqlite3_value_type(pVal)==SQLITE_NULL ){ + return zipfileTime(); + } + return (u32)sqlite3_value_int64(pVal); +} + +/* +** Unless it is NULL, entry pOld is currently part of the pTab->pFirstEntry +** linked list. Remove it from the list and free the object. +*/ +static void zipfileRemoveEntryFromList(ZipfileTab *pTab, ZipfileEntry *pOld){ + if( pOld ){ + ZipfileEntry **pp; + for(pp=&pTab->pFirstEntry; (*pp)!=pOld; pp=&((*pp)->pNext)); + *pp = (*pp)->pNext; + zipfileEntryFree(pOld); + } +} + +/* +** xUpdate method. +*/ +static int zipfileUpdate( + sqlite3_vtab *pVtab, + int nVal, + sqlite3_value **apVal, + sqlite_int64 *pRowid +){ + ZipfileTab *pTab = (ZipfileTab*)pVtab; + int rc = SQLITE_OK; /* Return Code */ + ZipfileEntry *pNew = 0; /* New in-memory CDS entry */ + + u32 mode = 0; /* Mode for new entry */ + u32 mTime = 0; /* Modification time for new entry */ + i64 sz = 0; /* Uncompressed size */ + const char *zPath = 0; /* Path for new entry */ + int nPath = 0; /* strlen(zPath) */ + const u8 *pData = 0; /* Pointer to buffer containing content */ + int nData = 0; /* Size of pData buffer in bytes */ + int iMethod = 0; /* Compression method for new entry */ + u8 *pFree = 0; /* Free this */ + char *zFree = 0; /* Also free this */ + ZipfileEntry *pOld = 0; + ZipfileEntry *pOld2 = 0; + int bUpdate = 0; /* True for an update that modifies "name" */ + int bIsDir = 0; + u32 iCrc32 = 0; + + if( pTab->pWriteFd==0 ){ + rc = zipfileBegin(pVtab); + if( rc!=SQLITE_OK ) return rc; + } + + /* If this is a DELETE or UPDATE, find the archive entry to delete. */ + if( sqlite3_value_type(apVal[0])!=SQLITE_NULL ){ + const char *zDelete = (const char*)sqlite3_value_text(apVal[0]); + int nDelete = (int)strlen(zDelete); + if( nVal>1 ){ + const char *zUpdate = (const char*)sqlite3_value_text(apVal[1]); + if( zUpdate && zipfileComparePath(zUpdate, zDelete, nDelete)!=0 ){ + bUpdate = 1; + } + } + for(pOld=pTab->pFirstEntry; 1; pOld=pOld->pNext){ + if( zipfileComparePath(pOld->cds.zFile, zDelete, nDelete)==0 ){ + break; + } + assert( pOld->pNext ); + } + } + + if( nVal>1 ){ + /* Check that "sz" and "rawdata" are both NULL: */ + if( sqlite3_value_type(apVal[5])!=SQLITE_NULL ){ + zipfileTableErr(pTab, "sz must be NULL"); + rc = SQLITE_CONSTRAINT; + } + if( sqlite3_value_type(apVal[6])!=SQLITE_NULL ){ + zipfileTableErr(pTab, "rawdata must be NULL"); + rc = SQLITE_CONSTRAINT; + } + + if( rc==SQLITE_OK ){ + if( sqlite3_value_type(apVal[7])==SQLITE_NULL ){ + /* data=NULL. A directory */ + bIsDir = 1; + }else{ + /* Value specified for "data", and possibly "method". This must be + ** a regular file or a symlink. */ + const u8 *aIn = sqlite3_value_blob(apVal[7]); + int nIn = sqlite3_value_bytes(apVal[7]); + int bAuto = sqlite3_value_type(apVal[8])==SQLITE_NULL; + + iMethod = sqlite3_value_int(apVal[8]); + sz = nIn; + pData = aIn; + nData = nIn; + if( iMethod!=0 && iMethod!=8 ){ + zipfileTableErr(pTab, "unknown compression method: %d", iMethod); + rc = SQLITE_CONSTRAINT; + }else{ + if( bAuto || iMethod ){ + int nCmp; + rc = zipfileDeflate(aIn, nIn, &pFree, &nCmp, &pTab->base.zErrMsg); + if( rc==SQLITE_OK ){ + if( iMethod || nCmpbase.zErrMsg); + } + + if( rc==SQLITE_OK ){ + zPath = (const char*)sqlite3_value_text(apVal[2]); + nPath = (int)strlen(zPath); + mTime = zipfileGetTime(apVal[4]); + } + + if( rc==SQLITE_OK && bIsDir ){ + /* For a directory, check that the last character in the path is a + ** '/'. This appears to be required for compatibility with info-zip + ** (the unzip command on unix). It does not create directories + ** otherwise. */ + if( zPath[nPath-1]!='/' ){ + zFree = sqlite3_mprintf("%s/", zPath); + if( zFree==0 ){ rc = SQLITE_NOMEM; } + zPath = (const char*)zFree; + nPath++; + } + } + + /* Check that we're not inserting a duplicate entry -OR- updating an + ** entry with a path, thereby making it into a duplicate. */ + if( (pOld==0 || bUpdate) && rc==SQLITE_OK ){ + ZipfileEntry *p; + for(p=pTab->pFirstEntry; p; p=p->pNext){ + if( zipfileComparePath(p->cds.zFile, zPath, nPath)==0 ){ + switch( sqlite3_vtab_on_conflict(pTab->db) ){ + case SQLITE_IGNORE: { + goto zipfile_update_done; + } + case SQLITE_REPLACE: { + pOld2 = p; + break; + } + default: { + zipfileTableErr(pTab, "duplicate name: \"%s\"", zPath); + rc = SQLITE_CONSTRAINT; + break; + } + } + break; + } + } + } + + if( rc==SQLITE_OK ){ + /* Create the new CDS record. */ + pNew = zipfileNewEntry(zPath); + if( pNew==0 ){ + rc = SQLITE_NOMEM; + }else{ + pNew->cds.iVersionMadeBy = ZIPFILE_NEWENTRY_MADEBY; + pNew->cds.iVersionExtract = ZIPFILE_NEWENTRY_REQUIRED; + pNew->cds.flags = ZIPFILE_NEWENTRY_FLAGS; + pNew->cds.iCompression = (u16)iMethod; + zipfileMtimeToDos(&pNew->cds, mTime); + pNew->cds.crc32 = iCrc32; + pNew->cds.szCompressed = nData; + pNew->cds.szUncompressed = (u32)sz; + pNew->cds.iExternalAttr = (mode<<16); + pNew->cds.iOffset = (u32)pTab->szCurrent; + pNew->cds.nFile = (u16)nPath; + pNew->mUnixTime = (u32)mTime; + rc = zipfileAppendEntry(pTab, pNew, pData, nData); + zipfileAddEntry(pTab, pOld, pNew); + } + } + } + + if( rc==SQLITE_OK && (pOld || pOld2) ){ + ZipfileCsr *pCsr; + for(pCsr=pTab->pCsrList; pCsr; pCsr=pCsr->pCsrNext){ + if( pCsr->pCurrent && (pCsr->pCurrent==pOld || pCsr->pCurrent==pOld2) ){ + pCsr->pCurrent = pCsr->pCurrent->pNext; + pCsr->bNoop = 1; + } + } + + zipfileRemoveEntryFromList(pTab, pOld); + zipfileRemoveEntryFromList(pTab, pOld2); + } + +zipfile_update_done: + sqlite3_free(pFree); + sqlite3_free(zFree); + return rc; +} + +static int zipfileSerializeEOCD(ZipfileEOCD *p, u8 *aBuf){ + u8 *a = aBuf; + zipfileWrite32(a, ZIPFILE_SIGNATURE_EOCD); + zipfileWrite16(a, p->iDisk); + zipfileWrite16(a, p->iFirstDisk); + zipfileWrite16(a, p->nEntry); + zipfileWrite16(a, p->nEntryTotal); + zipfileWrite32(a, p->nSize); + zipfileWrite32(a, p->iOffset); + zipfileWrite16(a, 0); /* Size of trailing comment in bytes*/ + + return a-aBuf; +} + +static int zipfileAppendEOCD(ZipfileTab *pTab, ZipfileEOCD *p){ + int nBuf = zipfileSerializeEOCD(p, pTab->aBuffer); + assert( nBuf==ZIPFILE_EOCD_FIXED_SZ ); + return zipfileAppendData(pTab, pTab->aBuffer, nBuf); +} + +/* +** Serialize the CDS structure into buffer aBuf[]. Return the number +** of bytes written. +*/ +static int zipfileSerializeCDS(ZipfileEntry *pEntry, u8 *aBuf){ + u8 *a = aBuf; + ZipfileCDS *pCDS = &pEntry->cds; + + if( pEntry->aExtra==0 ){ + pCDS->nExtra = 9; + } + + zipfileWrite32(a, ZIPFILE_SIGNATURE_CDS); + zipfileWrite16(a, pCDS->iVersionMadeBy); + zipfileWrite16(a, pCDS->iVersionExtract); + zipfileWrite16(a, pCDS->flags); + zipfileWrite16(a, pCDS->iCompression); + zipfileWrite16(a, pCDS->mTime); + zipfileWrite16(a, pCDS->mDate); + zipfileWrite32(a, pCDS->crc32); + zipfileWrite32(a, pCDS->szCompressed); + zipfileWrite32(a, pCDS->szUncompressed); + assert( a==&aBuf[ZIPFILE_CDS_NFILE_OFF] ); + zipfileWrite16(a, pCDS->nFile); + zipfileWrite16(a, pCDS->nExtra); + zipfileWrite16(a, pCDS->nComment); + zipfileWrite16(a, pCDS->iDiskStart); + zipfileWrite16(a, pCDS->iInternalAttr); + zipfileWrite32(a, pCDS->iExternalAttr); + zipfileWrite32(a, pCDS->iOffset); + + memcpy(a, pCDS->zFile, pCDS->nFile); + a += pCDS->nFile; + + if( pEntry->aExtra ){ + int n = (int)pCDS->nExtra + (int)pCDS->nComment; + memcpy(a, pEntry->aExtra, n); + a += n; + }else{ + assert( pCDS->nExtra==9 ); + zipfileWrite16(a, ZIPFILE_EXTRA_TIMESTAMP); + zipfileWrite16(a, 5); + *a++ = 0x01; + zipfileWrite32(a, pEntry->mUnixTime); + } + + return a-aBuf; +} + +static int zipfileCommit(sqlite3_vtab *pVtab){ + ZipfileTab *pTab = (ZipfileTab*)pVtab; + int rc = SQLITE_OK; + if( pTab->pWriteFd ){ + i64 iOffset = pTab->szCurrent; + ZipfileEntry *p; + ZipfileEOCD eocd; + int nEntry = 0; + + /* Write out all entries */ + for(p=pTab->pFirstEntry; rc==SQLITE_OK && p; p=p->pNext){ + int n = zipfileSerializeCDS(p, pTab->aBuffer); + rc = zipfileAppendData(pTab, pTab->aBuffer, n); + nEntry++; + } + + /* Write out the EOCD record */ + eocd.iDisk = 0; + eocd.iFirstDisk = 0; + eocd.nEntry = (u16)nEntry; + eocd.nEntryTotal = (u16)nEntry; + eocd.nSize = (u32)(pTab->szCurrent - iOffset); + eocd.iOffset = (u32)iOffset; + rc = zipfileAppendEOCD(pTab, &eocd); + + zipfileCleanupTransaction(pTab); + } + return rc; +} + +static int zipfileRollback(sqlite3_vtab *pVtab){ + return zipfileCommit(pVtab); +} + +static ZipfileCsr *zipfileFindCursor(ZipfileTab *pTab, i64 iId){ + ZipfileCsr *pCsr; + for(pCsr=pTab->pCsrList; pCsr; pCsr=pCsr->pCsrNext){ + if( iId==pCsr->iId ) break; + } + return pCsr; +} + +static void zipfileFunctionCds( + sqlite3_context *context, + int argc, + sqlite3_value **argv +){ + ZipfileCsr *pCsr; + ZipfileTab *pTab = (ZipfileTab*)sqlite3_user_data(context); + assert( argc>0 ); + + pCsr = zipfileFindCursor(pTab, sqlite3_value_int64(argv[0])); + if( pCsr ){ + ZipfileCDS *p = &pCsr->pCurrent->cds; + char *zRes = sqlite3_mprintf("{" + "\"version-made-by\" : %u, " + "\"version-to-extract\" : %u, " + "\"flags\" : %u, " + "\"compression\" : %u, " + "\"time\" : %u, " + "\"date\" : %u, " + "\"crc32\" : %u, " + "\"compressed-size\" : %u, " + "\"uncompressed-size\" : %u, " + "\"file-name-length\" : %u, " + "\"extra-field-length\" : %u, " + "\"file-comment-length\" : %u, " + "\"disk-number-start\" : %u, " + "\"internal-attr\" : %u, " + "\"external-attr\" : %u, " + "\"offset\" : %u }", + (u32)p->iVersionMadeBy, (u32)p->iVersionExtract, + (u32)p->flags, (u32)p->iCompression, + (u32)p->mTime, (u32)p->mDate, + (u32)p->crc32, (u32)p->szCompressed, + (u32)p->szUncompressed, (u32)p->nFile, + (u32)p->nExtra, (u32)p->nComment, + (u32)p->iDiskStart, (u32)p->iInternalAttr, + (u32)p->iExternalAttr, (u32)p->iOffset + ); + + if( zRes==0 ){ + sqlite3_result_error_nomem(context); + }else{ + sqlite3_result_text(context, zRes, -1, SQLITE_TRANSIENT); + sqlite3_free(zRes); + } + } +} + +/* +** xFindFunction method. +*/ +static int zipfileFindFunction( + sqlite3_vtab *pVtab, /* Virtual table handle */ + int nArg, /* Number of SQL function arguments */ + const char *zName, /* Name of SQL function */ + void (**pxFunc)(sqlite3_context*,int,sqlite3_value**), /* OUT: Result */ + void **ppArg /* OUT: User data for *pxFunc */ +){ + if( sqlite3_stricmp("zipfile_cds", zName)==0 ){ + *pxFunc = zipfileFunctionCds; + *ppArg = (void*)pVtab; + return 1; + } + return 0; +} + +typedef struct ZipfileBuffer ZipfileBuffer; +struct ZipfileBuffer { + u8 *a; /* Pointer to buffer */ + int n; /* Size of buffer in bytes */ + int nAlloc; /* Byte allocated at a[] */ +}; + +typedef struct ZipfileCtx ZipfileCtx; +struct ZipfileCtx { + int nEntry; + ZipfileBuffer body; + ZipfileBuffer cds; +}; + +static int zipfileBufferGrow(ZipfileBuffer *pBuf, int nByte){ + if( pBuf->n+nByte>pBuf->nAlloc ){ + u8 *aNew; + int nNew = pBuf->n ? pBuf->n*2 : 512; + int nReq = pBuf->n + nByte; + + while( nNewa, nNew); + if( aNew==0 ) return SQLITE_NOMEM; + pBuf->a = aNew; + pBuf->nAlloc = nNew; + } + return SQLITE_OK; +} + +/* +** xStep() callback for the zipfile() aggregate. This can be called in +** any of the following ways: +** +** SELECT zipfile(name,data) ... +** SELECT zipfile(name,mode,mtime,data) ... +** SELECT zipfile(name,mode,mtime,data,method) ... +*/ +void zipfileStep(sqlite3_context *pCtx, int nVal, sqlite3_value **apVal){ + ZipfileCtx *p; /* Aggregate function context */ + ZipfileEntry e; /* New entry to add to zip archive */ + + sqlite3_value *pName = 0; + sqlite3_value *pMode = 0; + sqlite3_value *pMtime = 0; + sqlite3_value *pData = 0; + sqlite3_value *pMethod = 0; + + int bIsDir = 0; + u32 mode; + int rc = SQLITE_OK; + char *zErr = 0; + + int iMethod = -1; /* Compression method to use (0 or 8) */ + + const u8 *aData = 0; /* Possibly compressed data for new entry */ + int nData = 0; /* Size of aData[] in bytes */ + int szUncompressed = 0; /* Size of data before compression */ + u8 *aFree = 0; /* Free this before returning */ + u32 iCrc32 = 0; /* crc32 of uncompressed data */ + + char *zName = 0; /* Path (name) of new entry */ + int nName = 0; /* Size of zName in bytes */ + char *zFree = 0; /* Free this before returning */ + int nByte; + + memset(&e, 0, sizeof(e)); + p = (ZipfileCtx*)sqlite3_aggregate_context(pCtx, sizeof(ZipfileCtx)); + if( p==0 ) return; + + /* Martial the arguments into stack variables */ + if( nVal!=2 && nVal!=4 && nVal!=5 ){ + zErr = sqlite3_mprintf("wrong number of arguments to function zipfile()"); + rc = SQLITE_ERROR; + goto zipfile_step_out; + } + pName = apVal[0]; + if( nVal==2 ){ + pData = apVal[1]; + }else{ + pMode = apVal[1]; + pMtime = apVal[2]; + pData = apVal[3]; + if( nVal==5 ){ + pMethod = apVal[4]; + } + } + + /* Check that the 'name' parameter looks ok. */ + zName = (char*)sqlite3_value_text(pName); + nName = sqlite3_value_bytes(pName); + if( zName==0 ){ + zErr = sqlite3_mprintf("first argument to zipfile() must be non-NULL"); + rc = SQLITE_ERROR; + goto zipfile_step_out; + } + + /* Inspect the 'method' parameter. This must be either 0 (store), 8 (use + ** deflate compression) or NULL (choose automatically). */ + if( pMethod && SQLITE_NULL!=sqlite3_value_type(pMethod) ){ + iMethod = (int)sqlite3_value_int64(pMethod); + if( iMethod!=0 && iMethod!=8 ){ + zErr = sqlite3_mprintf("illegal method value: %d", iMethod); + rc = SQLITE_ERROR; + goto zipfile_step_out; + } + } + + /* Now inspect the data. If this is NULL, then the new entry must be a + ** directory. Otherwise, figure out whether or not the data should + ** be deflated or simply stored in the zip archive. */ + if( sqlite3_value_type(pData)==SQLITE_NULL ){ + bIsDir = 1; + iMethod = 0; + }else{ + aData = sqlite3_value_blob(pData); + szUncompressed = nData = sqlite3_value_bytes(pData); + iCrc32 = crc32(0, aData, nData); + if( iMethod<0 || iMethod==8 ){ + int nOut = 0; + rc = zipfileDeflate(aData, nData, &aFree, &nOut, &zErr); + if( rc!=SQLITE_OK ){ + goto zipfile_step_out; + } + if( iMethod==8 || nOut1 && zName[nName-2]=='/' ) nName--; + } + } + + /* Assemble the ZipfileEntry object for the new zip archive entry */ + e.cds.iVersionMadeBy = ZIPFILE_NEWENTRY_MADEBY; + e.cds.iVersionExtract = ZIPFILE_NEWENTRY_REQUIRED; + e.cds.flags = ZIPFILE_NEWENTRY_FLAGS; + e.cds.iCompression = (u16)iMethod; + zipfileMtimeToDos(&e.cds, (u32)e.mUnixTime); + e.cds.crc32 = iCrc32; + e.cds.szCompressed = nData; + e.cds.szUncompressed = szUncompressed; + e.cds.iExternalAttr = (mode<<16); + e.cds.iOffset = p->body.n; + e.cds.nFile = (u16)nName; + e.cds.zFile = zName; + + /* Append the LFH to the body of the new archive */ + nByte = ZIPFILE_LFH_FIXED_SZ + e.cds.nFile + 9; + if( (rc = zipfileBufferGrow(&p->body, nByte)) ) goto zipfile_step_out; + p->body.n += zipfileSerializeLFH(&e, &p->body.a[p->body.n]); + + /* Append the data to the body of the new archive */ + if( nData>0 ){ + if( (rc = zipfileBufferGrow(&p->body, nData)) ) goto zipfile_step_out; + memcpy(&p->body.a[p->body.n], aData, nData); + p->body.n += nData; + } + + /* Append the CDS record to the directory of the new archive */ + nByte = ZIPFILE_CDS_FIXED_SZ + e.cds.nFile + 9; + if( (rc = zipfileBufferGrow(&p->cds, nByte)) ) goto zipfile_step_out; + p->cds.n += zipfileSerializeCDS(&e, &p->cds.a[p->cds.n]); + + /* Increment the count of entries in the archive */ + p->nEntry++; + + zipfile_step_out: + sqlite3_free(aFree); + sqlite3_free(zFree); + if( rc ){ + if( zErr ){ + sqlite3_result_error(pCtx, zErr, -1); + }else{ + sqlite3_result_error_code(pCtx, rc); + } + } + sqlite3_free(zErr); +} + +/* +** xFinalize() callback for zipfile aggregate function. +*/ +void zipfileFinal(sqlite3_context *pCtx){ + ZipfileCtx *p; + ZipfileEOCD eocd; + int nZip; + u8 *aZip; + + p = (ZipfileCtx*)sqlite3_aggregate_context(pCtx, sizeof(ZipfileCtx)); + if( p==0 ) return; + if( p->nEntry>0 ){ + memset(&eocd, 0, sizeof(eocd)); + eocd.nEntry = (u16)p->nEntry; + eocd.nEntryTotal = (u16)p->nEntry; + eocd.nSize = p->cds.n; + eocd.iOffset = p->body.n; + + nZip = p->body.n + p->cds.n + ZIPFILE_EOCD_FIXED_SZ; + aZip = (u8*)sqlite3_malloc(nZip); + if( aZip==0 ){ + sqlite3_result_error_nomem(pCtx); + }else{ + memcpy(aZip, p->body.a, p->body.n); + memcpy(&aZip[p->body.n], p->cds.a, p->cds.n); + zipfileSerializeEOCD(&eocd, &aZip[p->body.n + p->cds.n]); + sqlite3_result_blob(pCtx, aZip, nZip, zipfileFree); + } + } + + sqlite3_free(p->body.a); + sqlite3_free(p->cds.a); +} + + +/* +** Register the "zipfile" virtual table. +*/ +static int zipfileRegister(sqlite3 *db){ + static sqlite3_module zipfileModule = { + 1, /* iVersion */ + zipfileConnect, /* xCreate */ + zipfileConnect, /* xConnect */ + zipfileBestIndex, /* xBestIndex */ + zipfileDisconnect, /* xDisconnect */ + zipfileDisconnect, /* xDestroy */ + zipfileOpen, /* xOpen - open a cursor */ + zipfileClose, /* xClose - close a cursor */ + zipfileFilter, /* xFilter - configure scan constraints */ + zipfileNext, /* xNext - advance a cursor */ + zipfileEof, /* xEof - check for end of scan */ + zipfileColumn, /* xColumn - read data */ + 0, /* xRowid - read data */ + zipfileUpdate, /* xUpdate */ + zipfileBegin, /* xBegin */ + 0, /* xSync */ + zipfileCommit, /* xCommit */ + zipfileRollback, /* xRollback */ + zipfileFindFunction, /* xFindMethod */ + 0, /* xRename */ + }; + + int rc = sqlite3_create_module(db, "zipfile" , &zipfileModule, 0); + if( rc==SQLITE_OK ) rc = sqlite3_overload_function(db, "zipfile_cds", -1); + if( rc==SQLITE_OK ){ + rc = sqlite3_create_function(db, "zipfile", -1, SQLITE_UTF8, 0, 0, + zipfileStep, zipfileFinal + ); + } + return rc; +} +#else /* SQLITE_OMIT_VIRTUALTABLE */ +# define zipfileRegister(x) SQLITE_OK +#endif + +#ifdef _WIN32 + +#endif +int sqlite3_zipfile_init( + sqlite3 *db, + char **pzErrMsg, + const sqlite3_api_routines *pApi +){ + SQLITE_EXTENSION_INIT2(pApi); + (void)pzErrMsg; /* Unused parameter */ + return zipfileRegister(db); +} + +/************************* End ../ext/misc/zipfile.c ********************/ +/************************* Begin ../ext/misc/sqlar.c ******************/ +/* +** 2017-12-17 +** +** The author disclaims copyright to this source code. In place of +** a legal notice, here is a blessing: +** +** May you do good and not evil. +** May you find forgiveness for yourself and forgive others. +** May you share freely, never taking more than you give. +** +****************************************************************************** +** +** Utility functions sqlar_compress() and sqlar_uncompress(). Useful +** for working with sqlar archives and used by the shell tool's built-in +** sqlar support. +*/ +SQLITE_EXTENSION_INIT1 +#include + +/* +** Implementation of the "sqlar_compress(X)" SQL function. +** +** If the type of X is SQLITE_BLOB, and compressing that blob using +** zlib utility function compress() yields a smaller blob, return the +** compressed blob. Otherwise, return a copy of X. +** +** SQLar uses the "zlib format" for compressed content. The zlib format +** contains a two-byte identification header and a four-byte checksum at +** the end. This is different from ZIP which uses the raw deflate format. +** +** Future enhancements to SQLar might add support for new compression formats. +** If so, those new formats will be identified by alternative headers in the +** compressed data. +*/ +static void sqlarCompressFunc( + sqlite3_context *context, + int argc, + sqlite3_value **argv +){ + assert( argc==1 ); + if( sqlite3_value_type(argv[0])==SQLITE_BLOB ){ + const Bytef *pData = sqlite3_value_blob(argv[0]); + uLong nData = sqlite3_value_bytes(argv[0]); + uLongf nOut = compressBound(nData); + Bytef *pOut; + + pOut = (Bytef*)sqlite3_malloc(nOut); + if( pOut==0 ){ + sqlite3_result_error_nomem(context); + return; + }else{ + if( Z_OK!=compress(pOut, &nOut, pData, nData) ){ + sqlite3_result_error(context, "error in compress()", -1); + }else if( nOut +#include +#include + +#ifndef SQLITE_OMIT_VIRTUALTABLE + +/* typedef sqlite3_int64 i64; */ +/* typedef sqlite3_uint64 u64; */ + +typedef struct IdxColumn IdxColumn; +typedef struct IdxConstraint IdxConstraint; +typedef struct IdxScan IdxScan; +typedef struct IdxStatement IdxStatement; +typedef struct IdxTable IdxTable; +typedef struct IdxWrite IdxWrite; + +#define STRLEN (int)strlen + +/* +** A temp table name that we assume no user database will actually use. +** If this assumption proves incorrect triggers on the table with the +** conflicting name will be ignored. +*/ +#define UNIQUE_TABLE_NAME "t592690916721053953805701627921227776" + +/* +** A single constraint. Equivalent to either "col = ?" or "col < ?" (or +** any other type of single-ended range constraint on a column). +** +** pLink: +** Used to temporarily link IdxConstraint objects into lists while +** creating candidate indexes. +*/ +struct IdxConstraint { + char *zColl; /* Collation sequence */ + int bRange; /* True for range, false for eq */ + int iCol; /* Constrained table column */ + int bFlag; /* Used by idxFindCompatible() */ + int bDesc; /* True if ORDER BY DESC */ + IdxConstraint *pNext; /* Next constraint in pEq or pRange list */ + IdxConstraint *pLink; /* See above */ +}; + +/* +** A single scan of a single table. +*/ +struct IdxScan { + IdxTable *pTab; /* Associated table object */ + int iDb; /* Database containing table zTable */ + i64 covering; /* Mask of columns required for cov. index */ + IdxConstraint *pOrder; /* ORDER BY columns */ + IdxConstraint *pEq; /* List of == constraints */ + IdxConstraint *pRange; /* List of < constraints */ + IdxScan *pNextScan; /* Next IdxScan object for same analysis */ +}; + +/* +** Information regarding a single database table. Extracted from +** "PRAGMA table_info" by function idxGetTableInfo(). +*/ +struct IdxColumn { + char *zName; + char *zColl; + int iPk; +}; +struct IdxTable { + int nCol; + char *zName; /* Table name */ + IdxColumn *aCol; + IdxTable *pNext; /* Next table in linked list of all tables */ +}; + +/* +** An object of the following type is created for each unique table/write-op +** seen. The objects are stored in a singly-linked list beginning at +** sqlite3expert.pWrite. +*/ +struct IdxWrite { + IdxTable *pTab; + int eOp; /* SQLITE_UPDATE, DELETE or INSERT */ + IdxWrite *pNext; +}; + +/* +** Each statement being analyzed is represented by an instance of this +** structure. +*/ +struct IdxStatement { + int iId; /* Statement number */ + char *zSql; /* SQL statement */ + char *zIdx; /* Indexes */ + char *zEQP; /* Plan */ + IdxStatement *pNext; +}; + + +/* +** A hash table for storing strings. With space for a payload string +** with each entry. Methods are: +** +** idxHashInit() +** idxHashClear() +** idxHashAdd() +** idxHashSearch() +*/ +#define IDX_HASH_SIZE 1023 +typedef struct IdxHashEntry IdxHashEntry; +typedef struct IdxHash IdxHash; +struct IdxHashEntry { + char *zKey; /* nul-terminated key */ + char *zVal; /* nul-terminated value string */ + char *zVal2; /* nul-terminated value string 2 */ + IdxHashEntry *pHashNext; /* Next entry in same hash bucket */ + IdxHashEntry *pNext; /* Next entry in hash */ +}; +struct IdxHash { + IdxHashEntry *pFirst; + IdxHashEntry *aHash[IDX_HASH_SIZE]; +}; + +/* +** sqlite3expert object. +*/ +struct sqlite3expert { + int iSample; /* Percentage of tables to sample for stat1 */ + sqlite3 *db; /* User database */ + sqlite3 *dbm; /* In-memory db for this analysis */ + sqlite3 *dbv; /* Vtab schema for this analysis */ + IdxTable *pTable; /* List of all IdxTable objects */ + IdxScan *pScan; /* List of scan objects */ + IdxWrite *pWrite; /* List of write objects */ + IdxStatement *pStatement; /* List of IdxStatement objects */ + int bRun; /* True once analysis has run */ + char **pzErrmsg; + int rc; /* Error code from whereinfo hook */ + IdxHash hIdx; /* Hash containing all candidate indexes */ + char *zCandidates; /* For EXPERT_REPORT_CANDIDATES */ +}; + + +/* +** Allocate and return nByte bytes of zeroed memory using sqlite3_malloc(). +** If the allocation fails, set *pRc to SQLITE_NOMEM and return NULL. +*/ +static void *idxMalloc(int *pRc, int nByte){ + void *pRet; + assert( *pRc==SQLITE_OK ); + assert( nByte>0 ); + pRet = sqlite3_malloc(nByte); + if( pRet ){ + memset(pRet, 0, nByte); + }else{ + *pRc = SQLITE_NOMEM; + } + return pRet; +} + +/* +** Initialize an IdxHash hash table. +*/ +static void idxHashInit(IdxHash *pHash){ + memset(pHash, 0, sizeof(IdxHash)); +} + +/* +** Reset an IdxHash hash table. +*/ +static void idxHashClear(IdxHash *pHash){ + int i; + for(i=0; iaHash[i]; pEntry; pEntry=pNext){ + pNext = pEntry->pHashNext; + sqlite3_free(pEntry->zVal2); + sqlite3_free(pEntry); + } + } + memset(pHash, 0, sizeof(IdxHash)); +} + +/* +** Return the index of the hash bucket that the string specified by the +** arguments to this function belongs. +*/ +static int idxHashString(const char *z, int n){ + unsigned int ret = 0; + int i; + for(i=0; i=0 ); + for(pEntry=pHash->aHash[iHash]; pEntry; pEntry=pEntry->pHashNext){ + if( STRLEN(pEntry->zKey)==nKey && 0==memcmp(pEntry->zKey, zKey, nKey) ){ + return 1; + } + } + pEntry = idxMalloc(pRc, sizeof(IdxHashEntry) + nKey+1 + nVal+1); + if( pEntry ){ + pEntry->zKey = (char*)&pEntry[1]; + memcpy(pEntry->zKey, zKey, nKey); + if( zVal ){ + pEntry->zVal = &pEntry->zKey[nKey+1]; + memcpy(pEntry->zVal, zVal, nVal); + } + pEntry->pHashNext = pHash->aHash[iHash]; + pHash->aHash[iHash] = pEntry; + + pEntry->pNext = pHash->pFirst; + pHash->pFirst = pEntry; + } + return 0; +} + +/* +** If zKey/nKey is present in the hash table, return a pointer to the +** hash-entry object. +*/ +static IdxHashEntry *idxHashFind(IdxHash *pHash, const char *zKey, int nKey){ + int iHash; + IdxHashEntry *pEntry; + if( nKey<0 ) nKey = STRLEN(zKey); + iHash = idxHashString(zKey, nKey); + assert( iHash>=0 ); + for(pEntry=pHash->aHash[iHash]; pEntry; pEntry=pEntry->pHashNext){ + if( STRLEN(pEntry->zKey)==nKey && 0==memcmp(pEntry->zKey, zKey, nKey) ){ + return pEntry; + } + } + return 0; +} + +/* +** If the hash table contains an entry with a key equal to the string +** passed as the final two arguments to this function, return a pointer +** to the payload string. Otherwise, if zKey/nKey is not present in the +** hash table, return NULL. +*/ +static const char *idxHashSearch(IdxHash *pHash, const char *zKey, int nKey){ + IdxHashEntry *pEntry = idxHashFind(pHash, zKey, nKey); + if( pEntry ) return pEntry->zVal; + return 0; +} + +/* +** Allocate and return a new IdxConstraint object. Set the IdxConstraint.zColl +** variable to point to a copy of nul-terminated string zColl. +*/ +static IdxConstraint *idxNewConstraint(int *pRc, const char *zColl){ + IdxConstraint *pNew; + int nColl = STRLEN(zColl); + + assert( *pRc==SQLITE_OK ); + pNew = (IdxConstraint*)idxMalloc(pRc, sizeof(IdxConstraint) * nColl + 1); + if( pNew ){ + pNew->zColl = (char*)&pNew[1]; + memcpy(pNew->zColl, zColl, nColl+1); + } + return pNew; +} + +/* +** An error associated with database handle db has just occurred. Pass +** the error message to callback function xOut. +*/ +static void idxDatabaseError( + sqlite3 *db, /* Database handle */ + char **pzErrmsg /* Write error here */ +){ + *pzErrmsg = sqlite3_mprintf("%s", sqlite3_errmsg(db)); +} + +/* +** Prepare an SQL statement. +*/ +static int idxPrepareStmt( + sqlite3 *db, /* Database handle to compile against */ + sqlite3_stmt **ppStmt, /* OUT: Compiled SQL statement */ + char **pzErrmsg, /* OUT: sqlite3_malloc()ed error message */ + const char *zSql /* SQL statement to compile */ +){ + int rc = sqlite3_prepare_v2(db, zSql, -1, ppStmt, 0); + if( rc!=SQLITE_OK ){ + *ppStmt = 0; + idxDatabaseError(db, pzErrmsg); + } + return rc; +} + +/* +** Prepare an SQL statement using the results of a printf() formatting. +*/ +static int idxPrintfPrepareStmt( + sqlite3 *db, /* Database handle to compile against */ + sqlite3_stmt **ppStmt, /* OUT: Compiled SQL statement */ + char **pzErrmsg, /* OUT: sqlite3_malloc()ed error message */ + const char *zFmt, /* printf() format of SQL statement */ + ... /* Trailing printf() arguments */ +){ + va_list ap; + int rc; + char *zSql; + va_start(ap, zFmt); + zSql = sqlite3_vmprintf(zFmt, ap); + if( zSql==0 ){ + rc = SQLITE_NOMEM; + }else{ + rc = idxPrepareStmt(db, ppStmt, pzErrmsg, zSql); + sqlite3_free(zSql); + } + va_end(ap); + return rc; +} + + +/************************************************************************* +** Beginning of virtual table implementation. +*/ +typedef struct ExpertVtab ExpertVtab; +struct ExpertVtab { + sqlite3_vtab base; + IdxTable *pTab; + sqlite3expert *pExpert; +}; + +typedef struct ExpertCsr ExpertCsr; +struct ExpertCsr { + sqlite3_vtab_cursor base; + sqlite3_stmt *pData; +}; + +static char *expertDequote(const char *zIn){ + int n = STRLEN(zIn); + char *zRet = sqlite3_malloc(n); + + assert( zIn[0]=='\'' ); + assert( zIn[n-1]=='\'' ); + + if( zRet ){ + int iOut = 0; + int iIn = 0; + for(iIn=1; iIn<(n-1); iIn++){ + if( zIn[iIn]=='\'' ){ + assert( zIn[iIn+1]=='\'' ); + iIn++; + } + zRet[iOut++] = zIn[iIn]; + } + zRet[iOut] = '\0'; + } + + return zRet; +} + +/* +** This function is the implementation of both the xConnect and xCreate +** methods of the r-tree virtual table. +** +** argv[0] -> module name +** argv[1] -> database name +** argv[2] -> table name +** argv[...] -> column names... +*/ +static int expertConnect( + sqlite3 *db, + void *pAux, + int argc, const char *const*argv, + sqlite3_vtab **ppVtab, + char **pzErr +){ + sqlite3expert *pExpert = (sqlite3expert*)pAux; + ExpertVtab *p = 0; + int rc; + + if( argc!=4 ){ + *pzErr = sqlite3_mprintf("internal error!"); + rc = SQLITE_ERROR; + }else{ + char *zCreateTable = expertDequote(argv[3]); + if( zCreateTable ){ + rc = sqlite3_declare_vtab(db, zCreateTable); + if( rc==SQLITE_OK ){ + p = idxMalloc(&rc, sizeof(ExpertVtab)); + } + if( rc==SQLITE_OK ){ + p->pExpert = pExpert; + p->pTab = pExpert->pTable; + assert( sqlite3_stricmp(p->pTab->zName, argv[2])==0 ); + } + sqlite3_free(zCreateTable); + }else{ + rc = SQLITE_NOMEM; + } + } + + *ppVtab = (sqlite3_vtab*)p; + return rc; +} + +static int expertDisconnect(sqlite3_vtab *pVtab){ + ExpertVtab *p = (ExpertVtab*)pVtab; + sqlite3_free(p); + return SQLITE_OK; +} + +static int expertBestIndex(sqlite3_vtab *pVtab, sqlite3_index_info *pIdxInfo){ + ExpertVtab *p = (ExpertVtab*)pVtab; + int rc = SQLITE_OK; + int n = 0; + IdxScan *pScan; + const int opmask = + SQLITE_INDEX_CONSTRAINT_EQ | SQLITE_INDEX_CONSTRAINT_GT | + SQLITE_INDEX_CONSTRAINT_LT | SQLITE_INDEX_CONSTRAINT_GE | + SQLITE_INDEX_CONSTRAINT_LE; + + pScan = idxMalloc(&rc, sizeof(IdxScan)); + if( pScan ){ + int i; + + /* Link the new scan object into the list */ + pScan->pTab = p->pTab; + pScan->pNextScan = p->pExpert->pScan; + p->pExpert->pScan = pScan; + + /* Add the constraints to the IdxScan object */ + for(i=0; inConstraint; i++){ + struct sqlite3_index_constraint *pCons = &pIdxInfo->aConstraint[i]; + if( pCons->usable + && pCons->iColumn>=0 + && p->pTab->aCol[pCons->iColumn].iPk==0 + && (pCons->op & opmask) + ){ + IdxConstraint *pNew; + const char *zColl = sqlite3_vtab_collation(pIdxInfo, i); + pNew = idxNewConstraint(&rc, zColl); + if( pNew ){ + pNew->iCol = pCons->iColumn; + if( pCons->op==SQLITE_INDEX_CONSTRAINT_EQ ){ + pNew->pNext = pScan->pEq; + pScan->pEq = pNew; + }else{ + pNew->bRange = 1; + pNew->pNext = pScan->pRange; + pScan->pRange = pNew; + } + } + n++; + pIdxInfo->aConstraintUsage[i].argvIndex = n; + } + } + + /* Add the ORDER BY to the IdxScan object */ + for(i=pIdxInfo->nOrderBy-1; i>=0; i--){ + int iCol = pIdxInfo->aOrderBy[i].iColumn; + if( iCol>=0 ){ + IdxConstraint *pNew = idxNewConstraint(&rc, p->pTab->aCol[iCol].zColl); + if( pNew ){ + pNew->iCol = iCol; + pNew->bDesc = pIdxInfo->aOrderBy[i].desc; + pNew->pNext = pScan->pOrder; + pNew->pLink = pScan->pOrder; + pScan->pOrder = pNew; + n++; + } + } + } + } + + pIdxInfo->estimatedCost = 1000000.0 / (n+1); + return rc; +} + +static int expertUpdate( + sqlite3_vtab *pVtab, + int nData, + sqlite3_value **azData, + sqlite_int64 *pRowid +){ + (void)pVtab; + (void)nData; + (void)azData; + (void)pRowid; + return SQLITE_OK; +} + +/* +** Virtual table module xOpen method. +*/ +static int expertOpen(sqlite3_vtab *pVTab, sqlite3_vtab_cursor **ppCursor){ + int rc = SQLITE_OK; + ExpertCsr *pCsr; + (void)pVTab; + pCsr = idxMalloc(&rc, sizeof(ExpertCsr)); + *ppCursor = (sqlite3_vtab_cursor*)pCsr; + return rc; +} + +/* +** Virtual table module xClose method. +*/ +static int expertClose(sqlite3_vtab_cursor *cur){ + ExpertCsr *pCsr = (ExpertCsr*)cur; + sqlite3_finalize(pCsr->pData); + sqlite3_free(pCsr); + return SQLITE_OK; +} + +/* +** Virtual table module xEof method. +** +** Return non-zero if the cursor does not currently point to a valid +** record (i.e if the scan has finished), or zero otherwise. +*/ +static int expertEof(sqlite3_vtab_cursor *cur){ + ExpertCsr *pCsr = (ExpertCsr*)cur; + return pCsr->pData==0; +} + +/* +** Virtual table module xNext method. +*/ +static int expertNext(sqlite3_vtab_cursor *cur){ + ExpertCsr *pCsr = (ExpertCsr*)cur; + int rc = SQLITE_OK; + + assert( pCsr->pData ); + rc = sqlite3_step(pCsr->pData); + if( rc!=SQLITE_ROW ){ + rc = sqlite3_finalize(pCsr->pData); + pCsr->pData = 0; + }else{ + rc = SQLITE_OK; + } + + return rc; +} + +/* +** Virtual table module xRowid method. +*/ +static int expertRowid(sqlite3_vtab_cursor *cur, sqlite_int64 *pRowid){ + (void)cur; + *pRowid = 0; + return SQLITE_OK; +} + +/* +** Virtual table module xColumn method. +*/ +static int expertColumn(sqlite3_vtab_cursor *cur, sqlite3_context *ctx, int i){ + ExpertCsr *pCsr = (ExpertCsr*)cur; + sqlite3_value *pVal; + pVal = sqlite3_column_value(pCsr->pData, i); + if( pVal ){ + sqlite3_result_value(ctx, pVal); + } + return SQLITE_OK; +} + +/* +** Virtual table module xFilter method. +*/ +static int expertFilter( + sqlite3_vtab_cursor *cur, + int idxNum, const char *idxStr, + int argc, sqlite3_value **argv +){ + ExpertCsr *pCsr = (ExpertCsr*)cur; + ExpertVtab *pVtab = (ExpertVtab*)(cur->pVtab); + sqlite3expert *pExpert = pVtab->pExpert; + int rc; + + (void)idxNum; + (void)idxStr; + (void)argc; + (void)argv; + rc = sqlite3_finalize(pCsr->pData); + pCsr->pData = 0; + if( rc==SQLITE_OK ){ + rc = idxPrintfPrepareStmt(pExpert->db, &pCsr->pData, &pVtab->base.zErrMsg, + "SELECT * FROM main.%Q WHERE sample()", pVtab->pTab->zName + ); + } + + if( rc==SQLITE_OK ){ + rc = expertNext(cur); + } + return rc; +} + +static int idxRegisterVtab(sqlite3expert *p){ + static sqlite3_module expertModule = { + 2, /* iVersion */ + expertConnect, /* xCreate - create a table */ + expertConnect, /* xConnect - connect to an existing table */ + expertBestIndex, /* xBestIndex - Determine search strategy */ + expertDisconnect, /* xDisconnect - Disconnect from a table */ + expertDisconnect, /* xDestroy - Drop a table */ + expertOpen, /* xOpen - open a cursor */ + expertClose, /* xClose - close a cursor */ + expertFilter, /* xFilter - configure scan constraints */ + expertNext, /* xNext - advance a cursor */ + expertEof, /* xEof */ + expertColumn, /* xColumn - read data */ + expertRowid, /* xRowid - read data */ + expertUpdate, /* xUpdate - write data */ + 0, /* xBegin - begin transaction */ + 0, /* xSync - sync transaction */ + 0, /* xCommit - commit transaction */ + 0, /* xRollback - rollback transaction */ + 0, /* xFindFunction - function overloading */ + 0, /* xRename - rename the table */ + 0, /* xSavepoint */ + 0, /* xRelease */ + 0, /* xRollbackTo */ + }; + + return sqlite3_create_module(p->dbv, "expert", &expertModule, (void*)p); +} +/* +** End of virtual table implementation. +*************************************************************************/ +/* +** Finalize SQL statement pStmt. If (*pRc) is SQLITE_OK when this function +** is called, set it to the return value of sqlite3_finalize() before +** returning. Otherwise, discard the sqlite3_finalize() return value. +*/ +static void idxFinalize(int *pRc, sqlite3_stmt *pStmt){ + int rc = sqlite3_finalize(pStmt); + if( *pRc==SQLITE_OK ) *pRc = rc; +} + +/* +** Attempt to allocate an IdxTable structure corresponding to table zTab +** in the main database of connection db. If successful, set (*ppOut) to +** point to the new object and return SQLITE_OK. Otherwise, return an +** SQLite error code and set (*ppOut) to NULL. In this case *pzErrmsg may be +** set to point to an error string. +** +** It is the responsibility of the caller to eventually free either the +** IdxTable object or error message using sqlite3_free(). +*/ +static int idxGetTableInfo( + sqlite3 *db, /* Database connection to read details from */ + const char *zTab, /* Table name */ + IdxTable **ppOut, /* OUT: New object (if successful) */ + char **pzErrmsg /* OUT: Error message (if not) */ +){ + sqlite3_stmt *p1 = 0; + int nCol = 0; + int nTab = STRLEN(zTab); + int nByte = sizeof(IdxTable) + nTab + 1; + IdxTable *pNew = 0; + int rc, rc2; + char *pCsr = 0; + + rc = idxPrintfPrepareStmt(db, &p1, pzErrmsg, "PRAGMA table_info=%Q", zTab); + while( rc==SQLITE_OK && SQLITE_ROW==sqlite3_step(p1) ){ + const char *zCol = (const char*)sqlite3_column_text(p1, 1); + nByte += 1 + STRLEN(zCol); + rc = sqlite3_table_column_metadata( + db, "main", zTab, zCol, 0, &zCol, 0, 0, 0 + ); + nByte += 1 + STRLEN(zCol); + nCol++; + } + rc2 = sqlite3_reset(p1); + if( rc==SQLITE_OK ) rc = rc2; + + nByte += sizeof(IdxColumn) * nCol; + if( rc==SQLITE_OK ){ + pNew = idxMalloc(&rc, nByte); + } + if( rc==SQLITE_OK ){ + pNew->aCol = (IdxColumn*)&pNew[1]; + pNew->nCol = nCol; + pCsr = (char*)&pNew->aCol[nCol]; + } + + nCol = 0; + while( rc==SQLITE_OK && SQLITE_ROW==sqlite3_step(p1) ){ + const char *zCol = (const char*)sqlite3_column_text(p1, 1); + int nCopy = STRLEN(zCol) + 1; + pNew->aCol[nCol].zName = pCsr; + pNew->aCol[nCol].iPk = sqlite3_column_int(p1, 5); + memcpy(pCsr, zCol, nCopy); + pCsr += nCopy; + + rc = sqlite3_table_column_metadata( + db, "main", zTab, zCol, 0, &zCol, 0, 0, 0 + ); + if( rc==SQLITE_OK ){ + nCopy = STRLEN(zCol) + 1; + pNew->aCol[nCol].zColl = pCsr; + memcpy(pCsr, zCol, nCopy); + pCsr += nCopy; + } + + nCol++; + } + idxFinalize(&rc, p1); + + if( rc!=SQLITE_OK ){ + sqlite3_free(pNew); + pNew = 0; + }else{ + pNew->zName = pCsr; + memcpy(pNew->zName, zTab, nTab+1); + } + + *ppOut = pNew; + return rc; +} + +/* +** This function is a no-op if *pRc is set to anything other than +** SQLITE_OK when it is called. +** +** If *pRc is initially set to SQLITE_OK, then the text specified by +** the printf() style arguments is appended to zIn and the result returned +** in a buffer allocated by sqlite3_malloc(). sqlite3_free() is called on +** zIn before returning. +*/ +static char *idxAppendText(int *pRc, char *zIn, const char *zFmt, ...){ + va_list ap; + char *zAppend = 0; + char *zRet = 0; + int nIn = zIn ? STRLEN(zIn) : 0; + int nAppend = 0; + va_start(ap, zFmt); + if( *pRc==SQLITE_OK ){ + zAppend = sqlite3_vmprintf(zFmt, ap); + if( zAppend ){ + nAppend = STRLEN(zAppend); + zRet = (char*)sqlite3_malloc(nIn + nAppend + 1); + } + if( zAppend && zRet ){ + if( nIn ) memcpy(zRet, zIn, nIn); + memcpy(&zRet[nIn], zAppend, nAppend+1); + }else{ + sqlite3_free(zRet); + zRet = 0; + *pRc = SQLITE_NOMEM; + } + sqlite3_free(zAppend); + sqlite3_free(zIn); + } + va_end(ap); + return zRet; +} + +/* +** Return true if zId must be quoted in order to use it as an SQL +** identifier, or false otherwise. +*/ +static int idxIdentifierRequiresQuotes(const char *zId){ + int i; + for(i=0; zId[i]; i++){ + if( !(zId[i]=='_') + && !(zId[i]>='0' && zId[i]<='9') + && !(zId[i]>='a' && zId[i]<='z') + && !(zId[i]>='A' && zId[i]<='Z') + ){ + return 1; + } + } + return 0; +} + +/* +** This function appends an index column definition suitable for constraint +** pCons to the string passed as zIn and returns the result. +*/ +static char *idxAppendColDefn( + int *pRc, /* IN/OUT: Error code */ + char *zIn, /* Column defn accumulated so far */ + IdxTable *pTab, /* Table index will be created on */ + IdxConstraint *pCons +){ + char *zRet = zIn; + IdxColumn *p = &pTab->aCol[pCons->iCol]; + if( zRet ) zRet = idxAppendText(pRc, zRet, ", "); + + if( idxIdentifierRequiresQuotes(p->zName) ){ + zRet = idxAppendText(pRc, zRet, "%Q", p->zName); + }else{ + zRet = idxAppendText(pRc, zRet, "%s", p->zName); + } + + if( sqlite3_stricmp(p->zColl, pCons->zColl) ){ + if( idxIdentifierRequiresQuotes(pCons->zColl) ){ + zRet = idxAppendText(pRc, zRet, " COLLATE %Q", pCons->zColl); + }else{ + zRet = idxAppendText(pRc, zRet, " COLLATE %s", pCons->zColl); + } + } + + if( pCons->bDesc ){ + zRet = idxAppendText(pRc, zRet, " DESC"); + } + return zRet; +} + +/* +** Search database dbm for an index compatible with the one idxCreateFromCons() +** would create from arguments pScan, pEq and pTail. If no error occurs and +** such an index is found, return non-zero. Or, if no such index is found, +** return zero. +** +** If an error occurs, set *pRc to an SQLite error code and return zero. +*/ +static int idxFindCompatible( + int *pRc, /* OUT: Error code */ + sqlite3* dbm, /* Database to search */ + IdxScan *pScan, /* Scan for table to search for index on */ + IdxConstraint *pEq, /* List of == constraints */ + IdxConstraint *pTail /* List of range constraints */ +){ + const char *zTbl = pScan->pTab->zName; + sqlite3_stmt *pIdxList = 0; + IdxConstraint *pIter; + int nEq = 0; /* Number of elements in pEq */ + int rc; + + /* Count the elements in list pEq */ + for(pIter=pEq; pIter; pIter=pIter->pLink) nEq++; + + rc = idxPrintfPrepareStmt(dbm, &pIdxList, 0, "PRAGMA index_list=%Q", zTbl); + while( rc==SQLITE_OK && sqlite3_step(pIdxList)==SQLITE_ROW ){ + int bMatch = 1; + IdxConstraint *pT = pTail; + sqlite3_stmt *pInfo = 0; + const char *zIdx = (const char*)sqlite3_column_text(pIdxList, 1); + + /* Zero the IdxConstraint.bFlag values in the pEq list */ + for(pIter=pEq; pIter; pIter=pIter->pLink) pIter->bFlag = 0; + + rc = idxPrintfPrepareStmt(dbm, &pInfo, 0, "PRAGMA index_xInfo=%Q", zIdx); + while( rc==SQLITE_OK && sqlite3_step(pInfo)==SQLITE_ROW ){ + int iIdx = sqlite3_column_int(pInfo, 0); + int iCol = sqlite3_column_int(pInfo, 1); + const char *zColl = (const char*)sqlite3_column_text(pInfo, 4); + + if( iIdxpLink){ + if( pIter->bFlag ) continue; + if( pIter->iCol!=iCol ) continue; + if( sqlite3_stricmp(pIter->zColl, zColl) ) continue; + pIter->bFlag = 1; + break; + } + if( pIter==0 ){ + bMatch = 0; + break; + } + }else{ + if( pT ){ + if( pT->iCol!=iCol || sqlite3_stricmp(pT->zColl, zColl) ){ + bMatch = 0; + break; + } + pT = pT->pLink; + } + } + } + idxFinalize(&rc, pInfo); + + if( rc==SQLITE_OK && bMatch ){ + sqlite3_finalize(pIdxList); + return 1; + } + } + idxFinalize(&rc, pIdxList); + + *pRc = rc; + return 0; +} + +static int idxCreateFromCons( + sqlite3expert *p, + IdxScan *pScan, + IdxConstraint *pEq, + IdxConstraint *pTail +){ + sqlite3 *dbm = p->dbm; + int rc = SQLITE_OK; + if( (pEq || pTail) && 0==idxFindCompatible(&rc, dbm, pScan, pEq, pTail) ){ + IdxTable *pTab = pScan->pTab; + char *zCols = 0; + char *zIdx = 0; + IdxConstraint *pCons; + unsigned int h = 0; + const char *zFmt; + + for(pCons=pEq; pCons; pCons=pCons->pLink){ + zCols = idxAppendColDefn(&rc, zCols, pTab, pCons); + } + for(pCons=pTail; pCons; pCons=pCons->pLink){ + zCols = idxAppendColDefn(&rc, zCols, pTab, pCons); + } + + if( rc==SQLITE_OK ){ + /* Hash the list of columns to come up with a name for the index */ + const char *zTable = pScan->pTab->zName; + char *zName; /* Index name */ + int i; + for(i=0; zCols[i]; i++){ + h += ((h<<3) + zCols[i]); + } + zName = sqlite3_mprintf("%s_idx_%08x", zTable, h); + if( zName==0 ){ + rc = SQLITE_NOMEM; + }else{ + if( idxIdentifierRequiresQuotes(zTable) ){ + zFmt = "CREATE INDEX '%q' ON %Q(%s)"; + }else{ + zFmt = "CREATE INDEX %s ON %s(%s)"; + } + zIdx = sqlite3_mprintf(zFmt, zName, zTable, zCols); + if( !zIdx ){ + rc = SQLITE_NOMEM; + }else{ + rc = sqlite3_exec(dbm, zIdx, 0, 0, p->pzErrmsg); + idxHashAdd(&rc, &p->hIdx, zName, zIdx); + } + sqlite3_free(zName); + sqlite3_free(zIdx); + } + } + + sqlite3_free(zCols); + } + return rc; +} + +/* +** Return true if list pList (linked by IdxConstraint.pLink) contains +** a constraint compatible with *p. Otherwise return false. +*/ +static int idxFindConstraint(IdxConstraint *pList, IdxConstraint *p){ + IdxConstraint *pCmp; + for(pCmp=pList; pCmp; pCmp=pCmp->pLink){ + if( p->iCol==pCmp->iCol ) return 1; + } + return 0; +} + +static int idxCreateFromWhere( + sqlite3expert *p, + IdxScan *pScan, /* Create indexes for this scan */ + IdxConstraint *pTail /* range/ORDER BY constraints for inclusion */ +){ + IdxConstraint *p1 = 0; + IdxConstraint *pCon; + int rc; + + /* Gather up all the == constraints. */ + for(pCon=pScan->pEq; pCon; pCon=pCon->pNext){ + if( !idxFindConstraint(p1, pCon) && !idxFindConstraint(pTail, pCon) ){ + pCon->pLink = p1; + p1 = pCon; + } + } + + /* Create an index using the == constraints collected above. And the + ** range constraint/ORDER BY terms passed in by the caller, if any. */ + rc = idxCreateFromCons(p, pScan, p1, pTail); + + /* If no range/ORDER BY passed by the caller, create a version of the + ** index for each range constraint. */ + if( pTail==0 ){ + for(pCon=pScan->pRange; rc==SQLITE_OK && pCon; pCon=pCon->pNext){ + assert( pCon->pLink==0 ); + if( !idxFindConstraint(p1, pCon) && !idxFindConstraint(pTail, pCon) ){ + rc = idxCreateFromCons(p, pScan, p1, pCon); + } + } + } + + return rc; +} + +/* +** Create candidate indexes in database [dbm] based on the data in +** linked-list pScan. +*/ +static int idxCreateCandidates(sqlite3expert *p){ + int rc = SQLITE_OK; + IdxScan *pIter; + + for(pIter=p->pScan; pIter && rc==SQLITE_OK; pIter=pIter->pNextScan){ + rc = idxCreateFromWhere(p, pIter, 0); + if( rc==SQLITE_OK && pIter->pOrder ){ + rc = idxCreateFromWhere(p, pIter, pIter->pOrder); + } + } + + return rc; +} + +/* +** Free all elements of the linked list starting at pConstraint. +*/ +static void idxConstraintFree(IdxConstraint *pConstraint){ + IdxConstraint *pNext; + IdxConstraint *p; + + for(p=pConstraint; p; p=pNext){ + pNext = p->pNext; + sqlite3_free(p); + } +} + +/* +** Free all elements of the linked list starting from pScan up until pLast +** (pLast is not freed). +*/ +static void idxScanFree(IdxScan *pScan, IdxScan *pLast){ + IdxScan *p; + IdxScan *pNext; + for(p=pScan; p!=pLast; p=pNext){ + pNext = p->pNextScan; + idxConstraintFree(p->pOrder); + idxConstraintFree(p->pEq); + idxConstraintFree(p->pRange); + sqlite3_free(p); + } +} + +/* +** Free all elements of the linked list starting from pStatement up +** until pLast (pLast is not freed). +*/ +static void idxStatementFree(IdxStatement *pStatement, IdxStatement *pLast){ + IdxStatement *p; + IdxStatement *pNext; + for(p=pStatement; p!=pLast; p=pNext){ + pNext = p->pNext; + sqlite3_free(p->zEQP); + sqlite3_free(p->zIdx); + sqlite3_free(p); + } +} + +/* +** Free the linked list of IdxTable objects starting at pTab. +*/ +static void idxTableFree(IdxTable *pTab){ + IdxTable *pIter; + IdxTable *pNext; + for(pIter=pTab; pIter; pIter=pNext){ + pNext = pIter->pNext; + sqlite3_free(pIter); + } +} + +/* +** Free the linked list of IdxWrite objects starting at pTab. +*/ +static void idxWriteFree(IdxWrite *pTab){ + IdxWrite *pIter; + IdxWrite *pNext; + for(pIter=pTab; pIter; pIter=pNext){ + pNext = pIter->pNext; + sqlite3_free(pIter); + } +} + + + +/* +** This function is called after candidate indexes have been created. It +** runs all the queries to see which indexes they prefer, and populates +** IdxStatement.zIdx and IdxStatement.zEQP with the results. +*/ +int idxFindIndexes( + sqlite3expert *p, + char **pzErr /* OUT: Error message (sqlite3_malloc) */ +){ + IdxStatement *pStmt; + sqlite3 *dbm = p->dbm; + int rc = SQLITE_OK; + + IdxHash hIdx; + idxHashInit(&hIdx); + + for(pStmt=p->pStatement; rc==SQLITE_OK && pStmt; pStmt=pStmt->pNext){ + IdxHashEntry *pEntry; + sqlite3_stmt *pExplain = 0; + idxHashClear(&hIdx); + rc = idxPrintfPrepareStmt(dbm, &pExplain, pzErr, + "EXPLAIN QUERY PLAN %s", pStmt->zSql + ); + while( rc==SQLITE_OK && sqlite3_step(pExplain)==SQLITE_ROW ){ + int iSelectid = sqlite3_column_int(pExplain, 0); + int iOrder = sqlite3_column_int(pExplain, 1); + int iFrom = sqlite3_column_int(pExplain, 2); + const char *zDetail = (const char*)sqlite3_column_text(pExplain, 3); + int nDetail = STRLEN(zDetail); + int i; + + for(i=0; ihIdx, zIdx, nIdx); + if( zSql ){ + idxHashAdd(&rc, &hIdx, zSql, 0); + if( rc ) goto find_indexes_out; + } + break; + } + } + + pStmt->zEQP = idxAppendText(&rc, pStmt->zEQP, "%d|%d|%d|%s\n", + iSelectid, iOrder, iFrom, zDetail + ); + } + + for(pEntry=hIdx.pFirst; pEntry; pEntry=pEntry->pNext){ + pStmt->zIdx = idxAppendText(&rc, pStmt->zIdx, "%s;\n", pEntry->zKey); + } + + idxFinalize(&rc, pExplain); + } + + find_indexes_out: + idxHashClear(&hIdx); + return rc; +} + +static int idxAuthCallback( + void *pCtx, + int eOp, + const char *z3, + const char *z4, + const char *zDb, + const char *zTrigger +){ + int rc = SQLITE_OK; + (void)z4; + (void)zTrigger; + if( eOp==SQLITE_INSERT || eOp==SQLITE_UPDATE || eOp==SQLITE_DELETE ){ + if( sqlite3_stricmp(zDb, "main")==0 ){ + sqlite3expert *p = (sqlite3expert*)pCtx; + IdxTable *pTab; + for(pTab=p->pTable; pTab; pTab=pTab->pNext){ + if( 0==sqlite3_stricmp(z3, pTab->zName) ) break; + } + if( pTab ){ + IdxWrite *pWrite; + for(pWrite=p->pWrite; pWrite; pWrite=pWrite->pNext){ + if( pWrite->pTab==pTab && pWrite->eOp==eOp ) break; + } + if( pWrite==0 ){ + pWrite = idxMalloc(&rc, sizeof(IdxWrite)); + if( rc==SQLITE_OK ){ + pWrite->pTab = pTab; + pWrite->eOp = eOp; + pWrite->pNext = p->pWrite; + p->pWrite = pWrite; + } + } + } + } + } + return rc; +} + +static int idxProcessOneTrigger( + sqlite3expert *p, + IdxWrite *pWrite, + char **pzErr +){ + static const char *zInt = UNIQUE_TABLE_NAME; + static const char *zDrop = "DROP TABLE " UNIQUE_TABLE_NAME; + IdxTable *pTab = pWrite->pTab; + const char *zTab = pTab->zName; + const char *zSql = + "SELECT 'CREATE TEMP' || substr(sql, 7) FROM sqlite_master " + "WHERE tbl_name = %Q AND type IN ('table', 'trigger') " + "ORDER BY type;"; + sqlite3_stmt *pSelect = 0; + int rc = SQLITE_OK; + char *zWrite = 0; + + /* Create the table and its triggers in the temp schema */ + rc = idxPrintfPrepareStmt(p->db, &pSelect, pzErr, zSql, zTab, zTab); + while( rc==SQLITE_OK && SQLITE_ROW==sqlite3_step(pSelect) ){ + const char *zCreate = (const char*)sqlite3_column_text(pSelect, 0); + rc = sqlite3_exec(p->dbv, zCreate, 0, 0, pzErr); + } + idxFinalize(&rc, pSelect); + + /* Rename the table in the temp schema to zInt */ + if( rc==SQLITE_OK ){ + char *z = sqlite3_mprintf("ALTER TABLE temp.%Q RENAME TO %Q", zTab, zInt); + if( z==0 ){ + rc = SQLITE_NOMEM; + }else{ + rc = sqlite3_exec(p->dbv, z, 0, 0, pzErr); + sqlite3_free(z); + } + } + + switch( pWrite->eOp ){ + case SQLITE_INSERT: { + int i; + zWrite = idxAppendText(&rc, zWrite, "INSERT INTO %Q VALUES(", zInt); + for(i=0; inCol; i++){ + zWrite = idxAppendText(&rc, zWrite, "%s?", i==0 ? "" : ", "); + } + zWrite = idxAppendText(&rc, zWrite, ")"); + break; + } + case SQLITE_UPDATE: { + int i; + zWrite = idxAppendText(&rc, zWrite, "UPDATE %Q SET ", zInt); + for(i=0; inCol; i++){ + zWrite = idxAppendText(&rc, zWrite, "%s%Q=?", i==0 ? "" : ", ", + pTab->aCol[i].zName + ); + } + break; + } + default: { + assert( pWrite->eOp==SQLITE_DELETE ); + if( rc==SQLITE_OK ){ + zWrite = sqlite3_mprintf("DELETE FROM %Q", zInt); + if( zWrite==0 ) rc = SQLITE_NOMEM; + } + } + } + + if( rc==SQLITE_OK ){ + sqlite3_stmt *pX = 0; + rc = sqlite3_prepare_v2(p->dbv, zWrite, -1, &pX, 0); + idxFinalize(&rc, pX); + if( rc!=SQLITE_OK ){ + idxDatabaseError(p->dbv, pzErr); + } + } + sqlite3_free(zWrite); + + if( rc==SQLITE_OK ){ + rc = sqlite3_exec(p->dbv, zDrop, 0, 0, pzErr); + } + + return rc; +} + +static int idxProcessTriggers(sqlite3expert *p, char **pzErr){ + int rc = SQLITE_OK; + IdxWrite *pEnd = 0; + IdxWrite *pFirst = p->pWrite; + + while( rc==SQLITE_OK && pFirst!=pEnd ){ + IdxWrite *pIter; + for(pIter=pFirst; rc==SQLITE_OK && pIter!=pEnd; pIter=pIter->pNext){ + rc = idxProcessOneTrigger(p, pIter, pzErr); + } + pEnd = pFirst; + pFirst = p->pWrite; + } + + return rc; +} + + +static int idxCreateVtabSchema(sqlite3expert *p, char **pzErrmsg){ + int rc = idxRegisterVtab(p); + sqlite3_stmt *pSchema = 0; + + /* For each table in the main db schema: + ** + ** 1) Add an entry to the p->pTable list, and + ** 2) Create the equivalent virtual table in dbv. + */ + rc = idxPrepareStmt(p->db, &pSchema, pzErrmsg, + "SELECT type, name, sql, 1 FROM sqlite_master " + "WHERE type IN ('table','view') AND name NOT LIKE 'sqlite_%%' " + " UNION ALL " + "SELECT type, name, sql, 2 FROM sqlite_master " + "WHERE type = 'trigger'" + " AND tbl_name IN(SELECT name FROM sqlite_master WHERE type = 'view') " + "ORDER BY 4, 1" + ); + while( rc==SQLITE_OK && SQLITE_ROW==sqlite3_step(pSchema) ){ + const char *zType = (const char*)sqlite3_column_text(pSchema, 0); + const char *zName = (const char*)sqlite3_column_text(pSchema, 1); + const char *zSql = (const char*)sqlite3_column_text(pSchema, 2); + + if( zType[0]=='v' || zType[1]=='r' ){ + rc = sqlite3_exec(p->dbv, zSql, 0, 0, pzErrmsg); + }else{ + IdxTable *pTab; + rc = idxGetTableInfo(p->db, zName, &pTab, pzErrmsg); + if( rc==SQLITE_OK ){ + int i; + char *zInner = 0; + char *zOuter = 0; + pTab->pNext = p->pTable; + p->pTable = pTab; + + /* The statement the vtab will pass to sqlite3_declare_vtab() */ + zInner = idxAppendText(&rc, 0, "CREATE TABLE x("); + for(i=0; inCol; i++){ + zInner = idxAppendText(&rc, zInner, "%s%Q COLLATE %s", + (i==0 ? "" : ", "), pTab->aCol[i].zName, pTab->aCol[i].zColl + ); + } + zInner = idxAppendText(&rc, zInner, ")"); + + /* The CVT statement to create the vtab */ + zOuter = idxAppendText(&rc, 0, + "CREATE VIRTUAL TABLE %Q USING expert(%Q)", zName, zInner + ); + if( rc==SQLITE_OK ){ + rc = sqlite3_exec(p->dbv, zOuter, 0, 0, pzErrmsg); + } + sqlite3_free(zInner); + sqlite3_free(zOuter); + } + } + } + idxFinalize(&rc, pSchema); + return rc; +} + +struct IdxSampleCtx { + int iTarget; + double target; /* Target nRet/nRow value */ + double nRow; /* Number of rows seen */ + double nRet; /* Number of rows returned */ +}; + +static void idxSampleFunc( + sqlite3_context *pCtx, + int argc, + sqlite3_value **argv +){ + struct IdxSampleCtx *p = (struct IdxSampleCtx*)sqlite3_user_data(pCtx); + int bRet; + + (void)argv; + assert( argc==0 ); + if( p->nRow==0.0 ){ + bRet = 1; + }else{ + bRet = (p->nRet / p->nRow) <= p->target; + if( bRet==0 ){ + unsigned short rnd; + sqlite3_randomness(2, (void*)&rnd); + bRet = ((int)rnd % 100) <= p->iTarget; + } + } + + sqlite3_result_int(pCtx, bRet); + p->nRow += 1.0; + p->nRet += (double)bRet; +} + +struct IdxRemCtx { + int nSlot; + struct IdxRemSlot { + int eType; /* SQLITE_NULL, INTEGER, REAL, TEXT, BLOB */ + i64 iVal; /* SQLITE_INTEGER value */ + double rVal; /* SQLITE_FLOAT value */ + int nByte; /* Bytes of space allocated at z */ + int n; /* Size of buffer z */ + char *z; /* SQLITE_TEXT/BLOB value */ + } aSlot[1]; +}; + +/* +** Implementation of scalar function rem(). +*/ +static void idxRemFunc( + sqlite3_context *pCtx, + int argc, + sqlite3_value **argv +){ + struct IdxRemCtx *p = (struct IdxRemCtx*)sqlite3_user_data(pCtx); + struct IdxRemSlot *pSlot; + int iSlot; + assert( argc==2 ); + + iSlot = sqlite3_value_int(argv[0]); + assert( iSlot<=p->nSlot ); + pSlot = &p->aSlot[iSlot]; + + switch( pSlot->eType ){ + case SQLITE_NULL: + /* no-op */ + break; + + case SQLITE_INTEGER: + sqlite3_result_int64(pCtx, pSlot->iVal); + break; + + case SQLITE_FLOAT: + sqlite3_result_double(pCtx, pSlot->rVal); + break; + + case SQLITE_BLOB: + sqlite3_result_blob(pCtx, pSlot->z, pSlot->n, SQLITE_TRANSIENT); + break; + + case SQLITE_TEXT: + sqlite3_result_text(pCtx, pSlot->z, pSlot->n, SQLITE_TRANSIENT); + break; + } + + pSlot->eType = sqlite3_value_type(argv[1]); + switch( pSlot->eType ){ + case SQLITE_NULL: + /* no-op */ + break; + + case SQLITE_INTEGER: + pSlot->iVal = sqlite3_value_int64(argv[1]); + break; + + case SQLITE_FLOAT: + pSlot->rVal = sqlite3_value_double(argv[1]); + break; + + case SQLITE_BLOB: + case SQLITE_TEXT: { + int nByte = sqlite3_value_bytes(argv[1]); + if( nByte>pSlot->nByte ){ + char *zNew = (char*)sqlite3_realloc(pSlot->z, nByte*2); + if( zNew==0 ){ + sqlite3_result_error_nomem(pCtx); + return; + } + pSlot->nByte = nByte*2; + pSlot->z = zNew; + } + pSlot->n = nByte; + if( pSlot->eType==SQLITE_BLOB ){ + memcpy(pSlot->z, sqlite3_value_blob(argv[1]), nByte); + }else{ + memcpy(pSlot->z, sqlite3_value_text(argv[1]), nByte); + } + break; + } + } +} + +static int idxLargestIndex(sqlite3 *db, int *pnMax, char **pzErr){ + int rc = SQLITE_OK; + const char *zMax = + "SELECT max(i.seqno) FROM " + " sqlite_master AS s, " + " pragma_index_list(s.name) AS l, " + " pragma_index_info(l.name) AS i " + "WHERE s.type = 'table'"; + sqlite3_stmt *pMax = 0; + + *pnMax = 0; + rc = idxPrepareStmt(db, &pMax, pzErr, zMax); + if( rc==SQLITE_OK && SQLITE_ROW==sqlite3_step(pMax) ){ + *pnMax = sqlite3_column_int(pMax, 0) + 1; + } + idxFinalize(&rc, pMax); + + return rc; +} + +static int idxPopulateOneStat1( + sqlite3expert *p, + sqlite3_stmt *pIndexXInfo, + sqlite3_stmt *pWriteStat, + const char *zTab, + const char *zIdx, + char **pzErr +){ + char *zCols = 0; + char *zOrder = 0; + char *zQuery = 0; + int nCol = 0; + int i; + sqlite3_stmt *pQuery = 0; + int *aStat = 0; + int rc = SQLITE_OK; + + assert( p->iSample>0 ); + + /* Formulate the query text */ + sqlite3_bind_text(pIndexXInfo, 1, zIdx, -1, SQLITE_STATIC); + while( SQLITE_OK==rc && SQLITE_ROW==sqlite3_step(pIndexXInfo) ){ + const char *zComma = zCols==0 ? "" : ", "; + const char *zName = (const char*)sqlite3_column_text(pIndexXInfo, 0); + const char *zColl = (const char*)sqlite3_column_text(pIndexXInfo, 1); + zCols = idxAppendText(&rc, zCols, + "%sx.%Q IS rem(%d, x.%Q) COLLATE %s", zComma, zName, nCol, zName, zColl + ); + zOrder = idxAppendText(&rc, zOrder, "%s%d", zComma, ++nCol); + } + sqlite3_reset(pIndexXInfo); + if( rc==SQLITE_OK ){ + if( p->iSample==100 ){ + zQuery = sqlite3_mprintf( + "SELECT %s FROM %Q x ORDER BY %s", zCols, zTab, zOrder + ); + }else{ + zQuery = sqlite3_mprintf( + "SELECT %s FROM temp."UNIQUE_TABLE_NAME" x ORDER BY %s", zCols, zOrder + ); + } + } + sqlite3_free(zCols); + sqlite3_free(zOrder); + + /* Formulate the query text */ + if( rc==SQLITE_OK ){ + sqlite3 *dbrem = (p->iSample==100 ? p->db : p->dbv); + rc = idxPrepareStmt(dbrem, &pQuery, pzErr, zQuery); + } + sqlite3_free(zQuery); + + if( rc==SQLITE_OK ){ + aStat = (int*)idxMalloc(&rc, sizeof(int)*(nCol+1)); + } + if( rc==SQLITE_OK && SQLITE_ROW==sqlite3_step(pQuery) ){ + IdxHashEntry *pEntry; + char *zStat = 0; + for(i=0; i<=nCol; i++) aStat[i] = 1; + while( rc==SQLITE_OK && SQLITE_ROW==sqlite3_step(pQuery) ){ + aStat[0]++; + for(i=0; ihIdx, zIdx, STRLEN(zIdx)); + if( pEntry ){ + assert( pEntry->zVal2==0 ); + pEntry->zVal2 = zStat; + }else{ + sqlite3_free(zStat); + } + } + sqlite3_free(aStat); + idxFinalize(&rc, pQuery); + + return rc; +} + +static int idxBuildSampleTable(sqlite3expert *p, const char *zTab){ + int rc; + char *zSql; + + rc = sqlite3_exec(p->dbv,"DROP TABLE IF EXISTS temp."UNIQUE_TABLE_NAME,0,0,0); + if( rc!=SQLITE_OK ) return rc; + + zSql = sqlite3_mprintf( + "CREATE TABLE temp." UNIQUE_TABLE_NAME " AS SELECT * FROM %Q", zTab + ); + if( zSql==0 ) return SQLITE_NOMEM; + rc = sqlite3_exec(p->dbv, zSql, 0, 0, 0); + sqlite3_free(zSql); + + return rc; +} + +/* +** This function is called as part of sqlite3_expert_analyze(). Candidate +** indexes have already been created in database sqlite3expert.dbm, this +** function populates sqlite_stat1 table in the same database. +** +** The stat1 data is generated by querying the +*/ +static int idxPopulateStat1(sqlite3expert *p, char **pzErr){ + int rc = SQLITE_OK; + int nMax =0; + struct IdxRemCtx *pCtx = 0; + struct IdxSampleCtx samplectx; + int i; + i64 iPrev = -100000; + sqlite3_stmt *pAllIndex = 0; + sqlite3_stmt *pIndexXInfo = 0; + sqlite3_stmt *pWrite = 0; + + const char *zAllIndex = + "SELECT s.rowid, s.name, l.name FROM " + " sqlite_master AS s, " + " pragma_index_list(s.name) AS l " + "WHERE s.type = 'table'"; + const char *zIndexXInfo = + "SELECT name, coll FROM pragma_index_xinfo(?) WHERE key"; + const char *zWrite = "INSERT INTO sqlite_stat1 VALUES(?, ?, ?)"; + + /* If iSample==0, no sqlite_stat1 data is required. */ + if( p->iSample==0 ) return SQLITE_OK; + + rc = idxLargestIndex(p->dbm, &nMax, pzErr); + if( nMax<=0 || rc!=SQLITE_OK ) return rc; + + rc = sqlite3_exec(p->dbm, "ANALYZE; PRAGMA writable_schema=1", 0, 0, 0); + + if( rc==SQLITE_OK ){ + int nByte = sizeof(struct IdxRemCtx) + (sizeof(struct IdxRemSlot) * nMax); + pCtx = (struct IdxRemCtx*)idxMalloc(&rc, nByte); + } + + if( rc==SQLITE_OK ){ + sqlite3 *dbrem = (p->iSample==100 ? p->db : p->dbv); + rc = sqlite3_create_function( + dbrem, "rem", 2, SQLITE_UTF8, (void*)pCtx, idxRemFunc, 0, 0 + ); + } + if( rc==SQLITE_OK ){ + rc = sqlite3_create_function( + p->db, "sample", 0, SQLITE_UTF8, (void*)&samplectx, idxSampleFunc, 0, 0 + ); + } + + if( rc==SQLITE_OK ){ + pCtx->nSlot = nMax+1; + rc = idxPrepareStmt(p->dbm, &pAllIndex, pzErr, zAllIndex); + } + if( rc==SQLITE_OK ){ + rc = idxPrepareStmt(p->dbm, &pIndexXInfo, pzErr, zIndexXInfo); + } + if( rc==SQLITE_OK ){ + rc = idxPrepareStmt(p->dbm, &pWrite, pzErr, zWrite); + } + + while( rc==SQLITE_OK && SQLITE_ROW==sqlite3_step(pAllIndex) ){ + i64 iRowid = sqlite3_column_int64(pAllIndex, 0); + const char *zTab = (const char*)sqlite3_column_text(pAllIndex, 1); + const char *zIdx = (const char*)sqlite3_column_text(pAllIndex, 2); + if( p->iSample<100 && iPrev!=iRowid ){ + samplectx.target = (double)p->iSample / 100.0; + samplectx.iTarget = p->iSample; + samplectx.nRow = 0.0; + samplectx.nRet = 0.0; + rc = idxBuildSampleTable(p, zTab); + if( rc!=SQLITE_OK ) break; + } + rc = idxPopulateOneStat1(p, pIndexXInfo, pWrite, zTab, zIdx, pzErr); + iPrev = iRowid; + } + if( rc==SQLITE_OK && p->iSample<100 ){ + rc = sqlite3_exec(p->dbv, + "DROP TABLE IF EXISTS temp." UNIQUE_TABLE_NAME, 0,0,0 + ); + } + + idxFinalize(&rc, pAllIndex); + idxFinalize(&rc, pIndexXInfo); + idxFinalize(&rc, pWrite); + + for(i=0; inSlot; i++){ + sqlite3_free(pCtx->aSlot[i].z); + } + sqlite3_free(pCtx); + + if( rc==SQLITE_OK ){ + rc = sqlite3_exec(p->dbm, "ANALYZE sqlite_master", 0, 0, 0); + } + + sqlite3_exec(p->db, "DROP TABLE IF EXISTS temp."UNIQUE_TABLE_NAME,0,0,0); + return rc; +} + +/* +** Allocate a new sqlite3expert object. +*/ +sqlite3expert *sqlite3_expert_new(sqlite3 *db, char **pzErrmsg){ + int rc = SQLITE_OK; + sqlite3expert *pNew; + + pNew = (sqlite3expert*)idxMalloc(&rc, sizeof(sqlite3expert)); + + /* Open two in-memory databases to work with. The "vtab database" (dbv) + ** will contain a virtual table corresponding to each real table in + ** the user database schema, and a copy of each view. It is used to + ** collect information regarding the WHERE, ORDER BY and other clauses + ** of the user's query. + */ + if( rc==SQLITE_OK ){ + pNew->db = db; + pNew->iSample = 100; + rc = sqlite3_open(":memory:", &pNew->dbv); + } + if( rc==SQLITE_OK ){ + rc = sqlite3_open(":memory:", &pNew->dbm); + if( rc==SQLITE_OK ){ + sqlite3_db_config(pNew->dbm, SQLITE_DBCONFIG_TRIGGER_EQP, 1, (int*)0); + } + } + + + /* Copy the entire schema of database [db] into [dbm]. */ + if( rc==SQLITE_OK ){ + sqlite3_stmt *pSql; + rc = idxPrintfPrepareStmt(pNew->db, &pSql, pzErrmsg, + "SELECT sql FROM sqlite_master WHERE name NOT LIKE 'sqlite_%%'" + " AND sql NOT LIKE 'CREATE VIRTUAL %%'" + ); + while( rc==SQLITE_OK && SQLITE_ROW==sqlite3_step(pSql) ){ + const char *zSql = (const char*)sqlite3_column_text(pSql, 0); + rc = sqlite3_exec(pNew->dbm, zSql, 0, 0, pzErrmsg); + } + idxFinalize(&rc, pSql); + } + + /* Create the vtab schema */ + if( rc==SQLITE_OK ){ + rc = idxCreateVtabSchema(pNew, pzErrmsg); + } + + /* Register the auth callback with dbv */ + if( rc==SQLITE_OK ){ + sqlite3_set_authorizer(pNew->dbv, idxAuthCallback, (void*)pNew); + } + + /* If an error has occurred, free the new object and reutrn NULL. Otherwise, + ** return the new sqlite3expert handle. */ + if( rc!=SQLITE_OK ){ + sqlite3_expert_destroy(pNew); + pNew = 0; + } + return pNew; +} + +/* +** Configure an sqlite3expert object. +*/ +int sqlite3_expert_config(sqlite3expert *p, int op, ...){ + int rc = SQLITE_OK; + va_list ap; + va_start(ap, op); + switch( op ){ + case EXPERT_CONFIG_SAMPLE: { + int iVal = va_arg(ap, int); + if( iVal<0 ) iVal = 0; + if( iVal>100 ) iVal = 100; + p->iSample = iVal; + break; + } + default: + rc = SQLITE_NOTFOUND; + break; + } + + va_end(ap); + return rc; +} + +/* +** Add an SQL statement to the analysis. +*/ +int sqlite3_expert_sql( + sqlite3expert *p, /* From sqlite3_expert_new() */ + const char *zSql, /* SQL statement to add */ + char **pzErr /* OUT: Error message (if any) */ +){ + IdxScan *pScanOrig = p->pScan; + IdxStatement *pStmtOrig = p->pStatement; + int rc = SQLITE_OK; + const char *zStmt = zSql; + + if( p->bRun ) return SQLITE_MISUSE; + + while( rc==SQLITE_OK && zStmt && zStmt[0] ){ + sqlite3_stmt *pStmt = 0; + rc = sqlite3_prepare_v2(p->dbv, zStmt, -1, &pStmt, &zStmt); + if( rc==SQLITE_OK ){ + if( pStmt ){ + IdxStatement *pNew; + const char *z = sqlite3_sql(pStmt); + int n = STRLEN(z); + pNew = (IdxStatement*)idxMalloc(&rc, sizeof(IdxStatement) + n+1); + if( rc==SQLITE_OK ){ + pNew->zSql = (char*)&pNew[1]; + memcpy(pNew->zSql, z, n+1); + pNew->pNext = p->pStatement; + if( p->pStatement ) pNew->iId = p->pStatement->iId+1; + p->pStatement = pNew; + } + sqlite3_finalize(pStmt); + } + }else{ + idxDatabaseError(p->dbv, pzErr); + } + } + + if( rc!=SQLITE_OK ){ + idxScanFree(p->pScan, pScanOrig); + idxStatementFree(p->pStatement, pStmtOrig); + p->pScan = pScanOrig; + p->pStatement = pStmtOrig; + } + + return rc; +} + +int sqlite3_expert_analyze(sqlite3expert *p, char **pzErr){ + int rc; + IdxHashEntry *pEntry; + + /* Do trigger processing to collect any extra IdxScan structures */ + rc = idxProcessTriggers(p, pzErr); + + /* Create candidate indexes within the in-memory database file */ + if( rc==SQLITE_OK ){ + rc = idxCreateCandidates(p); + } + + /* Generate the stat1 data */ + if( rc==SQLITE_OK ){ + rc = idxPopulateStat1(p, pzErr); + } + + /* Formulate the EXPERT_REPORT_CANDIDATES text */ + for(pEntry=p->hIdx.pFirst; pEntry; pEntry=pEntry->pNext){ + p->zCandidates = idxAppendText(&rc, p->zCandidates, + "%s;%s%s\n", pEntry->zVal, + pEntry->zVal2 ? " -- stat1: " : "", pEntry->zVal2 + ); + } + + /* Figure out which of the candidate indexes are preferred by the query + ** planner and report the results to the user. */ + if( rc==SQLITE_OK ){ + rc = idxFindIndexes(p, pzErr); + } + + if( rc==SQLITE_OK ){ + p->bRun = 1; + } + return rc; +} + +/* +** Return the total number of statements that have been added to this +** sqlite3expert using sqlite3_expert_sql(). +*/ +int sqlite3_expert_count(sqlite3expert *p){ + int nRet = 0; + if( p->pStatement ) nRet = p->pStatement->iId+1; + return nRet; +} + +/* +** Return a component of the report. +*/ +const char *sqlite3_expert_report(sqlite3expert *p, int iStmt, int eReport){ + const char *zRet = 0; + IdxStatement *pStmt; + + if( p->bRun==0 ) return 0; + for(pStmt=p->pStatement; pStmt && pStmt->iId!=iStmt; pStmt=pStmt->pNext); + switch( eReport ){ + case EXPERT_REPORT_SQL: + if( pStmt ) zRet = pStmt->zSql; + break; + case EXPERT_REPORT_INDEXES: + if( pStmt ) zRet = pStmt->zIdx; + break; + case EXPERT_REPORT_PLAN: + if( pStmt ) zRet = pStmt->zEQP; + break; + case EXPERT_REPORT_CANDIDATES: + zRet = p->zCandidates; + break; + } + return zRet; +} + +/* +** Free an sqlite3expert object. +*/ +void sqlite3_expert_destroy(sqlite3expert *p){ + if( p ){ + sqlite3_close(p->dbm); + sqlite3_close(p->dbv); + idxScanFree(p->pScan, 0); + idxStatementFree(p->pStatement, 0); + idxTableFree(p->pTable); + idxWriteFree(p->pWrite); + idxHashClear(&p->hIdx); + sqlite3_free(p->zCandidates); + sqlite3_free(p); + } +} + +#endif /* ifndef SQLITE_OMIT_VIRTUAL_TABLE */ + +/************************* End ../ext/expert/sqlite3expert.c ********************/ #if defined(SQLITE_ENABLE_SESSION) /* @@ -2182,6 +8523,12 @@ struct SavedModeInfo { int colWidth[100]; /* Column widths prior to ".explain on" */ }; +typedef struct ExpertInfo ExpertInfo; +struct ExpertInfo { + sqlite3expert *pExpert; + int bVerbose; +}; + /* ** State information about the database connection is contained in an ** instance of the following structure. @@ -2189,16 +8536,19 @@ struct SavedModeInfo { typedef struct ShellState ShellState; struct ShellState { sqlite3 *db; /* The database */ - int autoExplain; /* Automatically turn on .explain mode */ - int autoEQP; /* Run EXPLAIN QUERY PLAN prior to seach SQL stmt */ - int statsOn; /* True to display memory stats before each finalize */ - int scanstatsOn; /* True to display scan stats before each finalize */ + u8 autoExplain; /* Automatically turn on .explain mode */ + u8 autoEQP; /* Run EXPLAIN QUERY PLAN prior to seach SQL stmt */ + u8 statsOn; /* True to display memory stats before each finalize */ + u8 scanstatsOn; /* True to display scan stats before each finalize */ + u8 openMode; /* SHELL_OPEN_NORMAL, _APPENDVFS, or _ZIPFILE */ + u8 doXdgOpen; /* Invoke start/open/xdg-open in output_reset() */ int outCount; /* Revert to stdout when reaching zero */ int cnt; /* Number of records displayed so far */ FILE *out; /* Write results here */ FILE *traceOut; /* Output for sqlite3_trace() */ int nErr; /* Number of errors seen */ int mode; /* An output mode setting */ + int modePrior; /* Saved mode */ int cMode; /* temporary output mode for the current query */ int normalMode; /* Output mode before ".explain on" */ int writableSchema; /* True if PRAGMA writable_schema=ON */ @@ -2206,9 +8556,12 @@ struct ShellState { int nCheck; /* Number of ".check" commands run */ unsigned shellFlgs; /* Various flags */ char *zDestTable; /* Name of destination table when MODE_Insert */ + char *zTempFile; /* Temporary file that might need deleting */ char zTestcase[30]; /* Name of current test case */ char colSeparator[20]; /* Column separator character for several modes */ char rowSeparator[20]; /* Row separator character for MODE_Ascii */ + char colSepPrior[20]; /* Saved column separator */ + char rowSepPrior[20]; /* Saved row separator */ int colWidth[100]; /* Requested width of each column when in column mode*/ int actualWidth[100]; /* Actual width of each column */ char nullValue[20]; /* The text to print when a NULL comes back from @@ -2226,8 +8579,25 @@ struct ShellState { int nSession; /* Number of active sessions */ OpenSession aSession[4]; /* Array of sessions. [0] is in focus. */ #endif + ExpertInfo expert; /* Valid if previous command was ".expert OPT..." */ }; + +/* Allowed values for ShellState.autoEQP +*/ +#define AUTOEQP_off 0 +#define AUTOEQP_on 1 +#define AUTOEQP_trigger 2 +#define AUTOEQP_full 3 + +/* Allowed values for ShellState.openMode +*/ +#define SHELL_OPEN_UNSPEC 0 /* No open-mode specified */ +#define SHELL_OPEN_NORMAL 1 /* Normal database file */ +#define SHELL_OPEN_APPENDVFS 2 /* Use appendvfs */ +#define SHELL_OPEN_ZIPFILE 3 /* Use the zipfile virtual table */ +#define SHELL_OPEN_READONLY 4 /* Open a normal database read-only */ + /* ** These are the allowed shellFlgs values */ @@ -2290,11 +8660,6 @@ static const char *modeDescr[] = { #define SEP_Unit "\x1F" #define SEP_Record "\x1E" -/* -** Number of elements in an array -*/ -#define ArraySize(X) (int)(sizeof(X)/sizeof(X[0])) - /* ** A callback for the sqlite3_log() interface. */ @@ -2305,6 +8670,166 @@ static void shellLog(void *pArg, int iErrCode, const char *zMsg){ fflush(p->pLog); } +/* +** SQL function: shell_putsnl(X) +** +** Write the text X to the screen (or whatever output is being directed) +** adding a newline at the end, and then return X. +*/ +static void shellPutsFunc( + sqlite3_context *pCtx, + int nVal, + sqlite3_value **apVal +){ + ShellState *p = (ShellState*)sqlite3_user_data(pCtx); + (void)nVal; + utf8_printf(p->out, "%s\n", sqlite3_value_text(apVal[0])); + sqlite3_result_value(pCtx, apVal[0]); +} + +/* +** SQL function: edit(VALUE) +** edit(VALUE,EDITOR) +** +** These steps: +** +** (1) Write VALUE into a temporary file. +** (2) Run program EDITOR on that temporary file. +** (3) Read the temporary file back and return its content as the result. +** (4) Delete the temporary file +** +** If the EDITOR argument is omitted, use the value in the VISUAL +** environment variable. If still there is no EDITOR, through an error. +** +** Also throw an error if the EDITOR program returns a non-zero exit code. +*/ +#ifndef SQLITE_NOHAVE_SYSTEM +static void editFunc( + sqlite3_context *context, + int argc, + sqlite3_value **argv +){ + const char *zEditor; + char *zTempFile = 0; + sqlite3 *db; + char *zCmd = 0; + int bBin; + int rc; + FILE *f = 0; + sqlite3_int64 sz; + sqlite3_int64 x; + unsigned char *p = 0; + + if( argc==2 ){ + zEditor = (const char*)sqlite3_value_text(argv[1]); + }else{ + zEditor = getenv("VISUAL"); + } + if( zEditor==0 ){ + sqlite3_result_error(context, "no editor for edit()", -1); + return; + } + if( sqlite3_value_type(argv[0])==SQLITE_NULL ){ + sqlite3_result_error(context, "NULL input to edit()", -1); + return; + } + db = sqlite3_context_db_handle(context); + zTempFile = 0; + sqlite3_file_control(db, 0, SQLITE_FCNTL_TEMPFILENAME, &zTempFile); + if( zTempFile==0 ){ + sqlite3_uint64 r = 0; + sqlite3_randomness(sizeof(r), &r); + zTempFile = sqlite3_mprintf("temp%llx", r); + if( zTempFile==0 ){ + sqlite3_result_error_nomem(context); + return; + } + } + bBin = sqlite3_value_type(argv[0])==SQLITE_BLOB; + f = fopen(zTempFile, bBin ? "wb" : "w"); + if( f==0 ){ + sqlite3_result_error(context, "edit() cannot open temp file", -1); + goto edit_func_end; + } + sz = sqlite3_value_bytes(argv[0]); + if( bBin ){ + x = fwrite(sqlite3_value_blob(argv[0]), 1, sz, f); + }else{ + x = fwrite(sqlite3_value_text(argv[0]), 1, sz, f); + } + fclose(f); + f = 0; + if( x!=sz ){ + sqlite3_result_error(context, "edit() could not write the whole file", -1); + goto edit_func_end; + } + zCmd = sqlite3_mprintf("%s \"%s\"", zEditor, zTempFile); + if( zCmd==0 ){ + sqlite3_result_error_nomem(context); + goto edit_func_end; + } + rc = system(zCmd); + sqlite3_free(zCmd); + if( rc ){ + sqlite3_result_error(context, "EDITOR returned non-zero", -1); + goto edit_func_end; + } + f = fopen(zTempFile, bBin ? "rb" : "r"); + if( f==0 ){ + sqlite3_result_error(context, + "edit() cannot reopen temp file after edit", -1); + goto edit_func_end; + } + fseek(f, 0, SEEK_END); + sz = ftell(f); + rewind(f); + p = sqlite3_malloc64( sz+(bBin==0) ); + if( p==0 ){ + sqlite3_result_error_nomem(context); + goto edit_func_end; + } + if( bBin ){ + x = fread(p, 1, sz, f); + }else{ + x = fread(p, 1, sz, f); + p[sz] = 0; + } + fclose(f); + f = 0; + if( x!=sz ){ + sqlite3_result_error(context, "could not read back the whole file", -1); + goto edit_func_end; + } + if( bBin ){ + sqlite3_result_blob64(context, p, sz, sqlite3_free); + }else{ + sqlite3_result_text64(context, (const char*)p, sz, + sqlite3_free, SQLITE_UTF8); + } + p = 0; + +edit_func_end: + if( f ) fclose(f); + unlink(zTempFile); + sqlite3_free(zTempFile); + sqlite3_free(p); +} +#endif /* SQLITE_NOHAVE_SYSTEM */ + +/* +** Save or restore the current output mode +*/ +static void outputModePush(ShellState *p){ + p->modePrior = p->mode; + memcpy(p->colSepPrior, p->colSeparator, sizeof(p->colSeparator)); + memcpy(p->rowSepPrior, p->rowSeparator, sizeof(p->rowSeparator)); +} +static void outputModePop(ShellState *p){ + p->mode = p->modePrior; + memcpy(p->colSeparator, p->colSepPrior, sizeof(p->colSeparator)); + memcpy(p->rowSeparator, p->rowSepPrior, sizeof(p->rowSeparator)); +} + /* ** Output the given string as a hex-encoded blob (eg. X'1234' ) */ @@ -2550,12 +9075,9 @@ static void output_csv(ShellState *p, const char *z, int bSep){ } } if( i==0 ){ - putc('"', out); - for(i=0; z[i]; i++){ - if( z[i]=='"' ) putc('"', out); - putc(z[i], out); - } - putc('"', out); + char *zQuoted = sqlite3_mprintf("\"%w\"", z); + utf8_printf(out, "%s", zQuoted); + sqlite3_free(zQuoted); }else{ utf8_printf(out, "%s", z); } @@ -2565,7 +9087,6 @@ static void output_csv(ShellState *p, const char *z, int bSep){ } } -#ifdef SIGINT /* ** This routine runs when the user presses Ctrl-C */ @@ -2575,6 +9096,20 @@ static void interrupt_handler(int NotUsed){ if( seenInterrupt>2 ) exit(1); if( globalDb ) sqlite3_interrupt(globalDb); } + +#if (defined(_WIN32) || defined(WIN32)) && !defined(_WIN32_WCE) +/* +** This routine runs for console events (e.g. Ctrl-C) on Win32 +*/ +static BOOL WINAPI ConsoleCtrlHandler( + DWORD dwCtrlType /* One of the CTRL_*_EVENT constants */ +){ + if( dwCtrlType==CTRL_C_EVENT ){ + interrupt_handler(0); + return TRUE; + } + return FALSE; +} #endif #ifndef SQLITE_OMIT_AUTHORIZATION @@ -2644,6 +9179,22 @@ static void printSchemaLineN(FILE *out, char *z, int n, const char *zTail){ z[n] = c; } +/* +** Return true if string z[] has nothing but whitespace and comments to the +** end of the first line. +*/ +static int wsToEol(const char *z){ + int i; + for(i=0; z[i]; i++){ + if( z[i]=='\n' ) return 1; + if( IsSpace(z[i]) ) continue; + if( z[i]=='-' && z[i+1]=='-' ) return 1; + return 0; + } + return 1; +} + + /* ** This is the callback routine that the shell ** invokes for each row of a query result. @@ -2783,13 +9334,15 @@ static int shell_callback( while( j>0 && IsSpace(z[j-1]) ){ j--; } z[j] = 0; if( strlen30(z)>=79 ){ - for(i=j=0; (c = z[i])!=0; i++){ + for(i=j=0; (c = z[i])!=0; i++){ /* Copy changes from z[i] back to z[j] */ if( c==cEnd ){ cEnd = 0; }else if( c=='"' || c=='\'' || c=='`' ){ cEnd = c; }else if( c=='[' ){ cEnd = ']'; + }else if( c=='-' && z[i+1]=='-' ){ + cEnd = '\n'; }else if( c=='(' ){ nParen++; }else if( c==')' ){ @@ -2800,7 +9353,9 @@ static int shell_callback( } } z[j++] = c; - if( nParen==1 && (c=='(' || c==',' || c=='\n') ){ + if( nParen==1 && cEnd==0 + && (c=='(' || c=='\n' || (c==',' && !wsToEol(z+i+1))) + ){ if( c=='\n' ) j--; printSchemaLineN(p->out, z, j, "\n "); j = 0; @@ -3198,7 +9753,7 @@ static void displayLinuxIoStats(FILE *out){ }; int i; for(i=0; iout==0 ) return 0; + out = pArg->out; - if( pArg && pArg->out ){ - displayStatLine(pArg, "Memory Used:", - "%lld (max %lld) bytes", SQLITE_STATUS_MEMORY_USED, bReset); - displayStatLine(pArg, "Number of Outstanding Allocations:", - "%lld (max %lld)", SQLITE_STATUS_MALLOC_COUNT, bReset); - if( pArg->shellFlgs & SHFLG_Pagecache ){ - displayStatLine(pArg, "Number of Pcache Pages Used:", - "%lld (max %lld) pages", SQLITE_STATUS_PAGECACHE_USED, bReset); - } - displayStatLine(pArg, "Number of Pcache Overflow Bytes:", - "%lld (max %lld) bytes", SQLITE_STATUS_PAGECACHE_OVERFLOW, bReset); - displayStatLine(pArg, "Largest Allocation:", - "%lld bytes", SQLITE_STATUS_MALLOC_SIZE, bReset); - displayStatLine(pArg, "Largest Pcache Allocation:", - "%lld bytes", SQLITE_STATUS_PAGECACHE_SIZE, bReset); -#ifdef YYTRACKMAXSTACKDEPTH - displayStatLine(pArg, "Deepest Parser Stack:", - "%lld (max %lld)", SQLITE_STATUS_PARSER_STACK, bReset); + if( pArg->pStmt && (pArg->statsOn & 2) ){ + int nCol, i, x; + sqlite3_stmt *pStmt = pArg->pStmt; + char z[100]; + nCol = sqlite3_column_count(pStmt); + raw_printf(out, "%-36s %d\n", "Number of output columns:", nCol); + for(i=0; iout && db ){ + displayStatLine(pArg, "Memory Used:", + "%lld (max %lld) bytes", SQLITE_STATUS_MEMORY_USED, bReset); + displayStatLine(pArg, "Number of Outstanding Allocations:", + "%lld (max %lld)", SQLITE_STATUS_MALLOC_COUNT, bReset); + if( pArg->shellFlgs & SHFLG_Pagecache ){ + displayStatLine(pArg, "Number of Pcache Pages Used:", + "%lld (max %lld) pages", SQLITE_STATUS_PAGECACHE_USED, bReset); + } + displayStatLine(pArg, "Number of Pcache Overflow Bytes:", + "%lld (max %lld) bytes", SQLITE_STATUS_PAGECACHE_OVERFLOW, bReset); + displayStatLine(pArg, "Largest Allocation:", + "%lld bytes", SQLITE_STATUS_MALLOC_SIZE, bReset); + displayStatLine(pArg, "Largest Pcache Allocation:", + "%lld bytes", SQLITE_STATUS_PAGECACHE_SIZE, bReset); +#ifdef YYTRACKMAXSTACKDEPTH + displayStatLine(pArg, "Deepest Parser Stack:", + "%lld (max %lld)", SQLITE_STATUS_PARSER_STACK, bReset); +#endif + + if( db ){ if( pArg->shellFlgs & SHFLG_Lookaside ){ iHiwtr = iCur = -1; sqlite3_db_status(db, SQLITE_DBSTATUS_LOOKASIDE_USED, @@ -3302,6 +9882,9 @@ static int display_stats( sqlite3_db_status(db, SQLITE_DBSTATUS_CACHE_WRITE, &iCur, &iHiwtr, 1); raw_printf(pArg->out, "Page cache writes: %d\n", iCur); iHiwtr = iCur = -1; + sqlite3_db_status(db, SQLITE_DBSTATUS_CACHE_SPILL, &iCur, &iHiwtr, 1); + raw_printf(pArg->out, "Page cache spills: %d\n", iCur); + iHiwtr = iCur = -1; sqlite3_db_status(db, SQLITE_DBSTATUS_SCHEMA_USED, &iCur, &iHiwtr, bReset); raw_printf(pArg->out, "Schema Heap Usage: %d bytes\n", iCur); @@ -3311,7 +9894,7 @@ static int display_stats( iCur); } - if( pArg && pArg->out && db && pArg->pStmt ){ + if( pArg->pStmt ){ iCur = sqlite3_stmt_status(pArg->pStmt, SQLITE_STMTSTATUS_FULLSCAN_STEP, bReset); raw_printf(pArg->out, "Fullscan Steps: %d\n", iCur); @@ -3321,6 +9904,12 @@ static int display_stats( raw_printf(pArg->out, "Autoindex Inserts: %d\n", iCur); iCur = sqlite3_stmt_status(pArg->pStmt, SQLITE_STMTSTATUS_VM_STEP, bReset); raw_printf(pArg->out, "Virtual Machine Steps: %d\n", iCur); + iCur = sqlite3_stmt_status(pArg->pStmt, SQLITE_STMTSTATUS_REPREPARE, bReset); + raw_printf(pArg->out, "Reprepare operations: %d\n", iCur); + iCur = sqlite3_stmt_status(pArg->pStmt, SQLITE_STMTSTATUS_RUN, bReset); + raw_printf(pArg->out, "Number of times run: %d\n", iCur); + iCur = sqlite3_stmt_status(pArg->pStmt, SQLITE_STMTSTATUS_MEMUSED, bReset); + raw_printf(pArg->out, "Memory used by prepared stmt: %d\n", iCur); } #ifdef __linux__ @@ -3536,8 +10125,7 @@ static void restore_debug_trace_modes(void){ */ static void exec_prepared_stmt( ShellState *pArg, /* Pointer to ShellState */ - sqlite3_stmt *pStmt, /* Statment to run */ - int (*xCallback)(void*,int,char**,char**,int*) /* Callback function */ + sqlite3_stmt *pStmt /* Statment to run */ ){ int rc; @@ -3547,58 +10135,182 @@ static void exec_prepared_stmt( rc = sqlite3_step(pStmt); /* if we have a result set... */ if( SQLITE_ROW == rc ){ - /* if we have a callback... */ - if( xCallback ){ - /* allocate space for col name ptr, value ptr, and type */ - int nCol = sqlite3_column_count(pStmt); - void *pData = sqlite3_malloc64(3*nCol*sizeof(const char*) + 1); - if( !pData ){ - rc = SQLITE_NOMEM; - }else{ - char **azCols = (char **)pData; /* Names of result columns */ - char **azVals = &azCols[nCol]; /* Results */ - int *aiTypes = (int *)&azVals[nCol]; /* Result types */ - int i, x; - assert(sizeof(int) <= sizeof(char *)); - /* save off ptrs to column names */ - for(i=0; icMode==MODE_Insert ){ - azVals[i] = ""; - }else{ - azVals[i] = (char*)sqlite3_column_text(pStmt, i); - } - if( !azVals[i] && (aiTypes[i]!=SQLITE_NULL) ){ - rc = SQLITE_NOMEM; - break; /* from for */ - } - } /* end for */ - - /* if data and types extracted successfully... */ - if( SQLITE_ROW == rc ){ - /* call the supplied callback with the result row data */ - if( xCallback(pArg, nCol, azVals, azCols, aiTypes) ){ - rc = SQLITE_ABORT; - }else{ - rc = sqlite3_step(pStmt); - } - } - } while( SQLITE_ROW == rc ); - sqlite3_free(pData); - } + /* allocate space for col name ptr, value ptr, and type */ + int nCol = sqlite3_column_count(pStmt); + void *pData = sqlite3_malloc64(3*nCol*sizeof(const char*) + 1); + if( !pData ){ + rc = SQLITE_NOMEM; }else{ + char **azCols = (char **)pData; /* Names of result columns */ + char **azVals = &azCols[nCol]; /* Results */ + int *aiTypes = (int *)&azVals[nCol]; /* Result types */ + int i, x; + assert(sizeof(int) <= sizeof(char *)); + /* save off ptrs to column names */ + for(i=0; icMode==MODE_Insert ){ + azVals[i] = ""; + }else{ + azVals[i] = (char*)sqlite3_column_text(pStmt, i); + } + if( !azVals[i] && (aiTypes[i]!=SQLITE_NULL) ){ + rc = SQLITE_NOMEM; + break; /* from for */ + } + } /* end for */ + + /* if data and types extracted successfully... */ + if( SQLITE_ROW == rc ){ + /* call the supplied callback with the result row data */ + if( shell_callback(pArg, nCol, azVals, azCols, aiTypes) ){ + rc = SQLITE_ABORT; + }else{ + rc = sqlite3_step(pStmt); + } + } + } while( SQLITE_ROW == rc ); + sqlite3_free(pData); } } } +#ifndef SQLITE_OMIT_VIRTUALTABLE +/* +** This function is called to process SQL if the previous shell command +** was ".expert". It passes the SQL in the second argument directly to +** the sqlite3expert object. +** +** If successful, SQLITE_OK is returned. Otherwise, an SQLite error +** code. In this case, (*pzErr) may be set to point to a buffer containing +** an English language error message. It is the responsibility of the +** caller to eventually free this buffer using sqlite3_free(). +*/ +static int expertHandleSQL( + ShellState *pState, + const char *zSql, + char **pzErr +){ + assert( pState->expert.pExpert ); + assert( pzErr==0 || *pzErr==0 ); + return sqlite3_expert_sql(pState->expert.pExpert, zSql, pzErr); +} + +/* +** This function is called either to silently clean up the object +** created by the ".expert" command (if bCancel==1), or to generate a +** report from it and then clean it up (if bCancel==0). +** +** If successful, SQLITE_OK is returned. Otherwise, an SQLite error +** code. In this case, (*pzErr) may be set to point to a buffer containing +** an English language error message. It is the responsibility of the +** caller to eventually free this buffer using sqlite3_free(). +*/ +static int expertFinish( + ShellState *pState, + int bCancel, + char **pzErr +){ + int rc = SQLITE_OK; + sqlite3expert *p = pState->expert.pExpert; + assert( p ); + assert( bCancel || pzErr==0 || *pzErr==0 ); + if( bCancel==0 ){ + FILE *out = pState->out; + int bVerbose = pState->expert.bVerbose; + + rc = sqlite3_expert_analyze(p, pzErr); + if( rc==SQLITE_OK ){ + int nQuery = sqlite3_expert_count(p); + int i; + + if( bVerbose ){ + const char *zCand = sqlite3_expert_report(p,0,EXPERT_REPORT_CANDIDATES); + raw_printf(out, "-- Candidates -----------------------------\n"); + raw_printf(out, "%s\n", zCand); + } + for(i=0; iexpert.pExpert = 0; + return rc; +} + +/* +** Implementation of ".expert" dot command. +*/ +static int expertDotCommand( + ShellState *pState, /* Current shell tool state */ + char **azArg, /* Array of arguments passed to dot command */ + int nArg /* Number of entries in azArg[] */ +){ + int rc = SQLITE_OK; + char *zErr = 0; + int i; + int iSample = 0; + + assert( pState->expert.pExpert==0 ); + memset(&pState->expert, 0, sizeof(ExpertInfo)); + + for(i=1; rc==SQLITE_OK && i=2 && 0==strncmp(z, "-verbose", n) ){ + pState->expert.bVerbose = 1; + } + else if( n>=2 && 0==strncmp(z, "-sample", n) ){ + if( i==(nArg-1) ){ + raw_printf(stderr, "option requires an argument: %s\n", z); + rc = SQLITE_ERROR; + }else{ + iSample = (int)integerValue(azArg[++i]); + if( iSample<0 || iSample>100 ){ + raw_printf(stderr, "value out of range: %s\n", azArg[i]); + rc = SQLITE_ERROR; + } + } + } + else{ + raw_printf(stderr, "unknown option: %s\n", z); + rc = SQLITE_ERROR; + } + } + + if( rc==SQLITE_OK ){ + pState->expert.pExpert = sqlite3_expert_new(pState->db, &zErr); + if( pState->expert.pExpert==0 ){ + raw_printf(stderr, "sqlite3_expert_new: %s\n", zErr); + rc = SQLITE_ERROR; + }else{ + sqlite3_expert_config( + pState->expert.pExpert, EXPERT_CONFIG_SAMPLE, iSample + ); + } + } + + return rc; +} +#endif /* ifndef SQLITE_OMIT_VIRTUALTABLE */ + /* ** Execute a statement or set of statements. Print ** any result rows/columns depending on the current mode @@ -3609,22 +10321,27 @@ static void exec_prepared_stmt( ** and callback data argument. */ static int shell_exec( - sqlite3 *db, /* An open database */ - const char *zSql, /* SQL to be evaluated */ - int (*xCallback)(void*,int,char**,char**,int*), /* Callback function */ - /* (not the same as sqlite3_exec) */ ShellState *pArg, /* Pointer to ShellState */ + const char *zSql, /* SQL to be evaluated */ char **pzErrMsg /* Error msg written here */ ){ sqlite3_stmt *pStmt = NULL; /* Statement to execute. */ int rc = SQLITE_OK; /* Return Code */ int rc2; const char *zLeftover; /* Tail of unprocessed SQL */ + sqlite3 *db = pArg->db; if( pzErrMsg ){ *pzErrMsg = NULL; } +#ifndef SQLITE_OMIT_VIRTUALTABLE + if( pArg->expert.pExpert ){ + rc = expertHandleSQL(pArg, zSql, pzErrMsg); + return expertFinish(pArg, (rc!=SQLITE_OK), pzErrMsg); + } +#endif + while( zSql[0] && (SQLITE_OK == rc) ){ static const char *zStmtSql; rc = sqlite3_prepare_v2(db, zSql, -1, &pStmt, &zLeftover); @@ -3658,7 +10375,12 @@ static int shell_exec( if( pArg && pArg->autoEQP && sqlite3_strlike("EXPLAIN%",zStmtSql,0)!=0 ){ sqlite3_stmt *pExplain; char *zEQP; + int triggerEQP = 0; disable_debug_trace_modes(); + sqlite3_db_config(db, SQLITE_DBCONFIG_TRIGGER_EQP, -1, &triggerEQP); + if( pArg->autoEQP>=AUTOEQP_trigger ){ + sqlite3_db_config(db, SQLITE_DBCONFIG_TRIGGER_EQP, 1, 0); + } zEQP = sqlite3_mprintf("EXPLAIN QUERY PLAN %s", zStmtSql); rc = sqlite3_prepare_v2(db, zEQP, -1, &pExplain, 0); if( rc==SQLITE_OK ){ @@ -3671,19 +10393,25 @@ static int shell_exec( } sqlite3_finalize(pExplain); sqlite3_free(zEQP); - if( pArg->autoEQP>=2 ){ + if( pArg->autoEQP>=AUTOEQP_full ){ /* Also do an EXPLAIN for ".eqp full" mode */ zEQP = sqlite3_mprintf("EXPLAIN %s", zStmtSql); rc = sqlite3_prepare_v2(db, zEQP, -1, &pExplain, 0); if( rc==SQLITE_OK ){ pArg->cMode = MODE_Explain; explain_data_prepare(pArg, pExplain); - exec_prepared_stmt(pArg, pExplain, xCallback); + exec_prepared_stmt(pArg, pExplain); explain_data_delete(pArg); } sqlite3_finalize(pExplain); sqlite3_free(zEQP); } + if( pArg->autoEQP>=AUTOEQP_trigger && triggerEQP==0 ){ + sqlite3_db_config(db, SQLITE_DBCONFIG_TRIGGER_EQP, 0, 0); + /* Reprepare pStmt before reactiving trace modes */ + sqlite3_finalize(pStmt); + sqlite3_prepare_v2(db, zSql, -1, &pStmt, 0); + } restore_debug_trace_modes(); } @@ -3703,7 +10431,7 @@ static int shell_exec( } } - exec_prepared_stmt(pArg, pStmt, xCallback); + exec_prepared_stmt(pArg, pStmt); explain_data_delete(pArg); /* print usage stats if stats on */ @@ -3966,11 +10694,11 @@ static int dump_callback(void *pArg, int nArg, char **azArg, char **azNotUsed){ savedMode = p->mode; p->zDestTable = sTable.z; p->mode = p->cMode = MODE_Insert; - rc = shell_exec(p->db, sSelect.z, shell_callback, p, 0); + rc = shell_exec(p, sSelect.z, 0); if( (rc&0xff)==SQLITE_CORRUPT ){ raw_printf(p->out, "/****** CORRUPTION ERROR *******/\n"); toggleSelectOrder(p->db); - shell_exec(p->db, sSelect.z, shell_callback, p, 0); + shell_exec(p, sSelect.z, 0); toggleSelectOrder(p->db); } p->zDestTable = savedDestTable; @@ -4024,6 +10752,9 @@ static int run_schema_dump_query( ** Text of a help message */ static char zHelp[] = +#if defined(SQLITE_HAVE_ZLIB) && !defined(SQLITE_OMIT_VIRTUALTABLE) + ".archive ... Manage SQL archives: \".archive --help\" for details\n" +#endif #ifndef SQLITE_OMIT_AUTHORIZATION ".auth ON|OFF Show authorizer callbacks\n" #endif @@ -4041,7 +10772,9 @@ static char zHelp[] = " LIKE pattern TABLE.\n" ".echo on|off Turn command echo on or off\n" ".eqp on|off|full Enable or disable automatic EXPLAIN QUERY PLAN\n" + ".excel Display the output of next command in a spreadsheet\n" ".exit Exit this program\n" + ".expert EXPERIMENTAL. Suggest indexes for specified queries\n" /* Because explain mode comes on automatically now, the ".explain" mode ** is removed from the help screen. It is still supported for legacy, however */ /*".explain ?on|off|auto? Turn EXPLAIN output mode on or off or to automatic\n"*/ @@ -4077,10 +10810,13 @@ static char zHelp[] = " tabs Tab-separated values\n" " tcl TCL list elements\n" ".nullvalue STRING Use STRING in place of NULL values\n" - ".once FILENAME Output for the next SQL command only to FILENAME\n" + ".once (-e|-x|FILE) Output for the next SQL command only to FILE\n" + " or invoke system text editor (-e) or spreadsheet (-x)\n" + " on the output.\n" ".open ?OPTIONS? ?FILE? Close existing database and reopen FILE\n" " The --new option starts with an empty file\n" - ".output ?FILENAME? Send output to FILENAME or stdout\n" + " Other options: --readonly --append --zip\n" + ".output ?FILE? Send output to FILE or stdout\n" ".print STRING... Print literal STRING\n" ".prompt MAIN CONTINUE Replace the standard prompts\n" ".quit Exit this program\n" @@ -4097,10 +10833,14 @@ static char zHelp[] = ".session CMD ... Create or control sessions\n" #endif ".sha3sum ?OPTIONS...? Compute a SHA3 hash of database content\n" +#ifndef SQLITE_NOHAVE_SYSTEM ".shell CMD ARGS... Run CMD ARGS... in a system shell\n" +#endif ".show Show the current values for various settings\n" ".stats ?on|off? Show stats or turn stats on or off\n" +#ifndef SQLITE_NOHAVE_SYSTEM ".system CMD ARGS... Run CMD ARGS... in a system shell\n" +#endif ".tables ?TABLE? List names of tables\n" " If TABLE specified, only list tables matching\n" " LIKE pattern TABLE.\n" @@ -4226,6 +10966,42 @@ static int session_filter(void *pCtx, const char *zTab){ } #endif +/* +** Try to deduce the type of file for zName based on its content. Return +** one of the SHELL_OPEN_* constants. +** +** If the file does not exist or is empty but its name looks like a ZIP +** archive and the dfltZip flag is true, then assume it is a ZIP archive. +** Otherwise, assume an ordinary database regardless of the filename if +** the type cannot be determined from content. +*/ +static int deduceDatabaseType(const char *zName, int dfltZip){ + FILE *f = fopen(zName, "rb"); + size_t n; + int rc = SHELL_OPEN_UNSPEC; + char zBuf[100]; + if( f==0 ){ + if( dfltZip && sqlite3_strlike("%.zip",zName,0)==0 ) return SHELL_OPEN_ZIPFILE; + return SHELL_OPEN_NORMAL; + } + fseek(f, -25, SEEK_END); + n = fread(zBuf, 25, 1, f); + if( n==1 && memcmp(zBuf, "Start-Of-SQLite3-", 17)==0 ){ + rc = SHELL_OPEN_APPENDVFS; + }else{ + fseek(f, -22, SEEK_END); + n = fread(zBuf, 22, 1, f); + if( n==1 && zBuf[0]==0x50 && zBuf[1]==0x4b && zBuf[2]==0x05 + && zBuf[3]==0x06 ){ + rc = SHELL_OPEN_ZIPFILE; + }else if( n==0 && dfltZip && sqlite3_strlike("%.zip",zName,0)==0 ){ + return SHELL_OPEN_ZIPFILE; + } + } + fclose(f); + return rc; +} + /* ** Make sure the database is open. If it is not, then open it. If ** the database fails to open, print an error message and exit. @@ -4233,7 +11009,29 @@ static int session_filter(void *pCtx, const char *zTab){ static void open_db(ShellState *p, int keepAlive){ if( p->db==0 ){ sqlite3_initialize(); - sqlite3_open(p->zDbFilename, &p->db); + if( p->openMode==SHELL_OPEN_UNSPEC && access(p->zDbFilename,0)==0 ){ + p->openMode = (u8)deduceDatabaseType(p->zDbFilename, 0); + } + switch( p->openMode ){ + case SHELL_OPEN_APPENDVFS: { + sqlite3_open_v2(p->zDbFilename, &p->db, + SQLITE_OPEN_READWRITE|SQLITE_OPEN_CREATE, "apndvfs"); + break; + } + case SHELL_OPEN_ZIPFILE: { + sqlite3_open(":memory:", &p->db); + break; + } + case SHELL_OPEN_READONLY: { + sqlite3_open_v2(p->zDbFilename, &p->db, SQLITE_OPEN_READONLY, 0); + break; + } + case SHELL_OPEN_UNSPEC: + case SHELL_OPEN_NORMAL: { + sqlite3_open(p->zDbFilename, &p->db); + break; + } + } globalDb = p->db; if( p->db==0 || SQLITE_OK!=sqlite3_errcode(p->db) ){ utf8_printf(stderr,"Error: unable to open database \"%s\": %s\n", @@ -4247,8 +11045,28 @@ static void open_db(ShellState *p, int keepAlive){ sqlite3_fileio_init(p->db, 0, 0); sqlite3_shathree_init(p->db, 0, 0); sqlite3_completion_init(p->db, 0, 0); - sqlite3_create_function(p->db, "shell_add_schema", 2, SQLITE_UTF8, 0, +#ifdef SQLITE_HAVE_ZLIB + sqlite3_zipfile_init(p->db, 0, 0); + sqlite3_sqlar_init(p->db, 0, 0); +#endif + sqlite3_create_function(p->db, "shell_add_schema", 3, SQLITE_UTF8, 0, shellAddSchemaName, 0, 0); + sqlite3_create_function(p->db, "shell_module_schema", 1, SQLITE_UTF8, 0, + shellModuleSchema, 0, 0); + sqlite3_create_function(p->db, "shell_putsnl", 1, SQLITE_UTF8, p, + shellPutsFunc, 0, 0); +#ifndef SQLITE_NOHAVE_SYSTEM + sqlite3_create_function(p->db, "edit", 1, SQLITE_UTF8, 0, + editFunc, 0, 0); + sqlite3_create_function(p->db, "edit", 2, SQLITE_UTF8, 0, + editFunc, 0, 0); +#endif + if( p->openMode==SHELL_OPEN_ZIPFILE ){ + char *zSql = sqlite3_mprintf( + "CREATE VIRTUAL TABLE zip USING zipfile(%Q);", p->zDbFilename); + sqlite3_exec(p->db, zSql, 0, 0, 0); + sqlite3_free(zSql); + } } } @@ -4286,7 +11104,7 @@ static char **readline_completion(const char *zText, int iStart, int iEnd){ ** Linenoise completion callback */ static void linenoise_completion(const char *zLine, linenoiseCompletions *lc){ - int nLine = (int)strlen(zLine); + int nLine = strlen30(zLine); int i, iStart; sqlite3_stmt *pStmt = 0; char *zSql; @@ -4376,63 +11194,6 @@ static void resolve_backslashes(char *z){ if( j='0' && c<='9' ) return c - '0'; - if( c>='a' && c<='f' ) return c - 'a' + 10; - if( c>='A' && c<='F' ) return c - 'A' + 10; - return -1; -} - -/* -** Interpret zArg as an integer value, possibly with suffixes. -*/ -static sqlite3_int64 integerValue(const char *zArg){ - sqlite3_int64 v = 0; - static const struct { char *zSuffix; int iMult; } aMult[] = { - { "KiB", 1024 }, - { "MiB", 1024*1024 }, - { "GiB", 1024*1024*1024 }, - { "KB", 1000 }, - { "MB", 1000000 }, - { "GB", 1000000000 }, - { "K", 1000 }, - { "M", 1000000 }, - { "G", 1000000000 }, - }; - int i; - int isNeg = 0; - if( zArg[0]=='-' ){ - isNeg = 1; - zArg++; - }else if( zArg[0]=='+' ){ - zArg++; - } - if( zArg[0]=='0' && zArg[1]=='x' ){ - int x; - zArg += 2; - while( (x = hexDigitValue(zArg[0]))>=0 ){ - v = (v<<4) + x; - zArg++; - } - }else{ - while( IsDigit(zArg[0]) ){ - v = v*10 + zArg[0] - '0'; - zArg++; - } - } - for(i=0; i0 && z[i-1]==';' ){ i--; } utf8_printf(f, "%.*s;\n", i, z); } return 0; } #endif -#endif /* ** A no-op routine that runs with the ".breakpoint" doc-command. This is @@ -4701,7 +11460,7 @@ static void tryToCloneData( char *zInsert = 0; int rc; int i, j, n; - int nTable = (int)strlen(zTable); + int nTable = strlen30(zTable); int k = 0; int cnt = 0; const int spinRate = 10000; @@ -4722,7 +11481,7 @@ static void tryToCloneData( } sqlite3_snprintf(200+nTable,zInsert, "INSERT OR IGNORE INTO \"%s\" VALUES(?", zTable); - i = (int)strlen(zInsert); + i = strlen30(zInsert); for(j=1; jdoXdgOpen flag is set, that means the output was being +** redirected to a temporary file named by p->zTempFile. In that case, +** launch start/open/xdg-open on that temporary file. */ static void output_reset(ShellState *p){ if( p->outfile[0]=='|' ){ @@ -4910,6 +11673,26 @@ static void output_reset(ShellState *p){ #endif }else{ output_file_close(p->out); +#ifndef SQLITE_NOHAVE_SYSTEM + if( p->doXdgOpen ){ + const char *zXdgOpenCmd = +#if defined(_WIN32) + "start"; +#elif defined(__APPLE__) + "open"; +#else + "xdg-open"; +#endif + char *zCmd; + zCmd = sqlite3_mprintf("%s %s", zXdgOpenCmd, p->zTempFile); + if( system(zCmd) ){ + utf8_printf(stderr, "Failed: [%s]\n", zCmd); + } + sqlite3_free(zCmd); + outputModePop(p); + p->doXdgOpen = 0; + } +#endif /* !defined(SQLITE_NOHAVE_SYSTEM) */ } p->outfile[0] = 0; p->out = stdout; @@ -5168,6 +11951,41 @@ int shellDeleteFile(const char *zFilename){ return rc; } +/* +** Try to delete the temporary file (if there is one) and free the +** memory used to hold the name of the temp file. +*/ +static void clearTempFile(ShellState *p){ + if( p->zTempFile==0 ) return; + if( p->doXdgOpen ) return; + if( shellDeleteFile(p->zTempFile) ) return; + sqlite3_free(p->zTempFile); + p->zTempFile = 0; +} + +/* +** Create a new temp file name with the given suffix. +*/ +static void newTempFile(ShellState *p, const char *zSuffix){ + clearTempFile(p); + sqlite3_free(p->zTempFile); + p->zTempFile = 0; + if( p->db ){ + sqlite3_file_control(p->db, 0, SQLITE_FCNTL_TEMPFILENAME, &p->zTempFile); + } + if( p->zTempFile==0 ){ + sqlite3_uint64 r; + sqlite3_randomness(sizeof(r), &r); + p->zTempFile = sqlite3_mprintf("temp%llx.%s", r, zSuffix); + }else{ + p->zTempFile = sqlite3_mprintf("%z.%s", p->zTempFile, zSuffix); + } + if( p->zTempFile==0 ){ + raw_printf(stderr, "out of memory\n"); + exit(1); + } +} + /* ** The implementation of SQL scalar function fkey_collate_clause(), used @@ -5245,10 +12063,10 @@ static int lintFkeyIndexes( ** ** 0. The text of an SQL statement similar to: ** - ** "EXPLAIN QUERY PLAN SELECT rowid FROM child_table WHERE child_key=?" + ** "EXPLAIN QUERY PLAN SELECT 1 FROM child_table WHERE child_key=?" ** - ** This is the same SELECT that the foreign keys implementation needs - ** to run internally on child tables. If there is an index that can + ** This SELECT is similar to the one that the foreign keys implementation + ** needs to run internally on child tables. If there is an index that can ** be used to optimize this query, then it can also be used by the FK ** implementation to optimize DELETE or UPDATE statements on the parent ** table. @@ -5276,7 +12094,7 @@ static int lintFkeyIndexes( */ const char *zSql = "SELECT " - " 'EXPLAIN QUERY PLAN SELECT rowid FROM ' || quote(s.name) || ' WHERE '" + " 'EXPLAIN QUERY PLAN SELECT 1 FROM ' || quote(s.name) || ' WHERE '" " || group_concat(quote(s.name) || '.' || quote(f.[from]) || '=?' " " || fkey_collate_clause(" " f.[table], COALESCE(f.[to], p.[name]), s.name, f.[from]),' AND ')" @@ -5304,7 +12122,7 @@ static int lintFkeyIndexes( const char *zGlobIPK = "SEARCH TABLE * USING INTEGER PRIMARY KEY (rowid=?)"; for(i=2; i1 && sqlite3_strnicmp("-verbose", azArg[i], n)==0 ){ bVerbose = 1; } @@ -5407,7 +12225,7 @@ static int lintDotCommand( int nArg /* Number of entries in azArg[] */ ){ int n; - n = (nArg>=2 ? (int)strlen(azArg[1]) : 0); + n = (nArg>=2 ? strlen30(azArg[1]) : 0); if( n<1 || sqlite3_strnicmp(azArg[1], "fkey-indexes", n) ) goto usage; return lintFkeyIndexes(pState, azArg, nArg); @@ -5418,6 +12236,754 @@ static int lintDotCommand( return SQLITE_ERROR; } +#if !defined(SQLITE_OMIT_VIRTUALTABLE) && defined(SQLITE_HAVE_ZLIB) +/********************************************************************************* +** The ".archive" or ".ar" command. +*/ +static void shellPrepare( + sqlite3 *db, + int *pRc, + const char *zSql, + sqlite3_stmt **ppStmt +){ + *ppStmt = 0; + if( *pRc==SQLITE_OK ){ + int rc = sqlite3_prepare_v2(db, zSql, -1, ppStmt, 0); + if( rc!=SQLITE_OK ){ + raw_printf(stderr, "sql error: %s (%d)\n", + sqlite3_errmsg(db), sqlite3_errcode(db) + ); + *pRc = rc; + } + } +} + +static void shellPreparePrintf( + sqlite3 *db, + int *pRc, + sqlite3_stmt **ppStmt, + const char *zFmt, + ... +){ + *ppStmt = 0; + if( *pRc==SQLITE_OK ){ + va_list ap; + char *z; + va_start(ap, zFmt); + z = sqlite3_vmprintf(zFmt, ap); + if( z==0 ){ + *pRc = SQLITE_NOMEM; + }else{ + shellPrepare(db, pRc, z, ppStmt); + sqlite3_free(z); + } + } +} + +static void shellFinalize( + int *pRc, + sqlite3_stmt *pStmt +){ + if( pStmt ){ + sqlite3 *db = sqlite3_db_handle(pStmt); + int rc = sqlite3_finalize(pStmt); + if( *pRc==SQLITE_OK ){ + if( rc!=SQLITE_OK ){ + raw_printf(stderr, "SQL error: %s\n", sqlite3_errmsg(db)); + } + *pRc = rc; + } + } +} + +static void shellReset( + int *pRc, + sqlite3_stmt *pStmt +){ + int rc = sqlite3_reset(pStmt); + if( *pRc==SQLITE_OK ){ + if( rc!=SQLITE_OK ){ + sqlite3 *db = sqlite3_db_handle(pStmt); + raw_printf(stderr, "SQL error: %s\n", sqlite3_errmsg(db)); + } + *pRc = rc; + } +} +/* +** Structure representing a single ".ar" command. +*/ +typedef struct ArCommand ArCommand; +struct ArCommand { + u8 eCmd; /* An AR_CMD_* value */ + u8 bVerbose; /* True if --verbose */ + u8 bZip; /* True if the archive is a ZIP */ + u8 bDryRun; /* True if --dry-run */ + u8 bAppend; /* True if --append */ + int nArg; /* Number of command arguments */ + char *zSrcTable; /* "sqlar", "zipfile($file)" or "zip" */ + const char *zFile; /* --file argument, or NULL */ + const char *zDir; /* --directory argument, or NULL */ + char **azArg; /* Array of command arguments */ + ShellState *p; /* Shell state */ + sqlite3 *db; /* Database containing the archive */ +}; + +/* +** Print a usage message for the .ar command to stderr and return SQLITE_ERROR. +*/ +static int arUsage(FILE *f){ + raw_printf(f, +"\n" +"Usage: .ar [OPTION...] [FILE...]\n" +"The .ar command manages sqlar archives.\n" +"\n" +"Examples:\n" +" .ar -cf archive.sar foo bar # Create archive.sar from files foo and bar\n" +" .ar -tf archive.sar # List members of archive.sar\n" +" .ar -xvf archive.sar # Verbosely extract files from archive.sar\n" +"\n" +"Each command line must feature exactly one command option:\n" +" -c, --create Create a new archive\n" +" -u, --update Update or add files to an existing archive\n" +" -t, --list List contents of archive\n" +" -x, --extract Extract files from archive\n" +"\n" +"And zero or more optional options:\n" +" -v, --verbose Print each filename as it is processed\n" +" -f FILE, --file FILE Operate on archive FILE (default is current db)\n" +" -a FILE, --append FILE Operate on FILE opened using the apndvfs VFS\n" +" -C DIR, --directory DIR Change to directory DIR to read/extract files\n" +" -n, --dryrun Show the SQL that would have occurred\n" +"\n" +"See also: http://sqlite.org/cli.html#sqlar_archive_support\n" +"\n" +); + return SQLITE_ERROR; +} + +/* +** Print an error message for the .ar command to stderr and return +** SQLITE_ERROR. +*/ +static int arErrorMsg(const char *zFmt, ...){ + va_list ap; + char *z; + va_start(ap, zFmt); + z = sqlite3_vmprintf(zFmt, ap); + va_end(ap); + raw_printf(stderr, "Error: %s (try \".ar --help\")\n", z); + sqlite3_free(z); + return SQLITE_ERROR; +} + +/* +** Values for ArCommand.eCmd. +*/ +#define AR_CMD_CREATE 1 +#define AR_CMD_EXTRACT 2 +#define AR_CMD_LIST 3 +#define AR_CMD_UPDATE 4 +#define AR_CMD_HELP 5 + +/* +** Other (non-command) switches. +*/ +#define AR_SWITCH_VERBOSE 6 +#define AR_SWITCH_FILE 7 +#define AR_SWITCH_DIRECTORY 8 +#define AR_SWITCH_APPEND 9 +#define AR_SWITCH_DRYRUN 10 + +static int arProcessSwitch(ArCommand *pAr, int eSwitch, const char *zArg){ + switch( eSwitch ){ + case AR_CMD_CREATE: + case AR_CMD_EXTRACT: + case AR_CMD_LIST: + case AR_CMD_UPDATE: + case AR_CMD_HELP: + if( pAr->eCmd ){ + return arErrorMsg("multiple command options"); + } + pAr->eCmd = eSwitch; + break; + + case AR_SWITCH_DRYRUN: + pAr->bDryRun = 1; + break; + case AR_SWITCH_VERBOSE: + pAr->bVerbose = 1; + break; + case AR_SWITCH_APPEND: + pAr->bAppend = 1; + /* Fall thru into --file */ + case AR_SWITCH_FILE: + pAr->zFile = zArg; + break; + case AR_SWITCH_DIRECTORY: + pAr->zDir = zArg; + break; + } + + return SQLITE_OK; +} + +/* +** Parse the command line for an ".ar" command. The results are written into +** structure (*pAr). SQLITE_OK is returned if the command line is parsed +** successfully, otherwise an error message is written to stderr and +** SQLITE_ERROR returned. +*/ +static int arParseCommand( + char **azArg, /* Array of arguments passed to dot command */ + int nArg, /* Number of entries in azArg[] */ + ArCommand *pAr /* Populate this object */ +){ + struct ArSwitch { + const char *zLong; + char cShort; + u8 eSwitch; + u8 bArg; + } aSwitch[] = { + { "create", 'c', AR_CMD_CREATE, 0 }, + { "extract", 'x', AR_CMD_EXTRACT, 0 }, + { "list", 't', AR_CMD_LIST, 0 }, + { "update", 'u', AR_CMD_UPDATE, 0 }, + { "help", 'h', AR_CMD_HELP, 0 }, + { "verbose", 'v', AR_SWITCH_VERBOSE, 0 }, + { "file", 'f', AR_SWITCH_FILE, 1 }, + { "append", 'a', AR_SWITCH_APPEND, 1 }, + { "directory", 'C', AR_SWITCH_DIRECTORY, 1 }, + { "dryrun", 'n', AR_SWITCH_DRYRUN, 0 }, + }; + int nSwitch = sizeof(aSwitch) / sizeof(struct ArSwitch); + struct ArSwitch *pEnd = &aSwitch[nSwitch]; + + if( nArg<=1 ){ + return arUsage(stderr); + }else{ + char *z = azArg[1]; + memset(pAr, 0, sizeof(ArCommand)); + + if( z[0]!='-' ){ + /* Traditional style [tar] invocation */ + int i; + int iArg = 2; + for(i=0; z[i]; i++){ + const char *zArg = 0; + struct ArSwitch *pOpt; + for(pOpt=&aSwitch[0]; pOptcShort ) break; + } + if( pOpt==pEnd ){ + return arErrorMsg("unrecognized option: %c", z[i]); + } + if( pOpt->bArg ){ + if( iArg>=nArg ){ + return arErrorMsg("option requires an argument: %c",z[i]); + } + zArg = azArg[iArg++]; + } + if( arProcessSwitch(pAr, pOpt->eSwitch, zArg) ) return SQLITE_ERROR; + } + pAr->nArg = nArg-iArg; + if( pAr->nArg>0 ){ + pAr->azArg = &azArg[iArg]; + } + }else{ + /* Non-traditional invocation */ + int iArg; + for(iArg=1; iArgazArg = &azArg[iArg]; + pAr->nArg = nArg-iArg; + break; + } + n = strlen30(z); + + if( z[1]!='-' ){ + int i; + /* One or more short options */ + for(i=1; icShort ) break; + } + if( pOpt==pEnd ){ + return arErrorMsg("unrecognized option: %c\n", z[i]); + } + if( pOpt->bArg ){ + if( i<(n-1) ){ + zArg = &z[i+1]; + i = n; + }else{ + if( iArg>=(nArg-1) ){ + return arErrorMsg("option requires an argument: %c\n",z[i]); + } + zArg = azArg[++iArg]; + } + } + if( arProcessSwitch(pAr, pOpt->eSwitch, zArg) ) return SQLITE_ERROR; + } + }else if( z[2]=='\0' ){ + /* A -- option, indicating that all remaining command line words + ** are command arguments. */ + pAr->azArg = &azArg[iArg+1]; + pAr->nArg = nArg-iArg-1; + break; + }else{ + /* A long option */ + const char *zArg = 0; /* Argument for option, if any */ + struct ArSwitch *pMatch = 0; /* Matching option */ + struct ArSwitch *pOpt; /* Iterator */ + for(pOpt=&aSwitch[0]; pOptzLong; + if( (n-2)<=strlen30(zLong) && 0==memcmp(&z[2], zLong, n-2) ){ + if( pMatch ){ + return arErrorMsg("ambiguous option: %s",z); + }else{ + pMatch = pOpt; + } + } + } + + if( pMatch==0 ){ + return arErrorMsg("unrecognized option: %s", z); + } + if( pMatch->bArg ){ + if( iArg>=(nArg-1) ){ + return arErrorMsg("option requires an argument: %s", z); + } + zArg = azArg[++iArg]; + } + if( arProcessSwitch(pAr, pMatch->eSwitch, zArg) ) return SQLITE_ERROR; + } + } + } + } + + return SQLITE_OK; +} + +/* +** This function assumes that all arguments within the ArCommand.azArg[] +** array refer to archive members, as for the --extract or --list commands. +** It checks that each of them are present. If any specified file is not +** present in the archive, an error is printed to stderr and an error +** code returned. Otherwise, if all specified arguments are present in +** the archive, SQLITE_OK is returned. +** +** This function strips any trailing '/' characters from each argument. +** This is consistent with the way the [tar] command seems to work on +** Linux. +*/ +static int arCheckEntries(ArCommand *pAr){ + int rc = SQLITE_OK; + if( pAr->nArg ){ + int i, j; + sqlite3_stmt *pTest = 0; + + shellPreparePrintf(pAr->db, &rc, &pTest, + "SELECT name FROM %s WHERE name=$name", + pAr->zSrcTable + ); + j = sqlite3_bind_parameter_index(pTest, "$name"); + for(i=0; inArg && rc==SQLITE_OK; i++){ + char *z = pAr->azArg[i]; + int n = strlen30(z); + int bOk = 0; + while( n>0 && z[n-1]=='/' ) n--; + z[n] = '\0'; + sqlite3_bind_text(pTest, j, z, -1, SQLITE_STATIC); + if( SQLITE_ROW==sqlite3_step(pTest) ){ + bOk = 1; + } + shellReset(&rc, pTest); + if( rc==SQLITE_OK && bOk==0 ){ + utf8_printf(stderr, "not found in archive: %s\n", z); + rc = SQLITE_ERROR; + } + } + shellFinalize(&rc, pTest); + } + return rc; +} + +/* +** Format a WHERE clause that can be used against the "sqlar" table to +** identify all archive members that match the command arguments held +** in (*pAr). Leave this WHERE clause in (*pzWhere) before returning. +** The caller is responsible for eventually calling sqlite3_free() on +** any non-NULL (*pzWhere) value. +*/ +static void arWhereClause( + int *pRc, + ArCommand *pAr, + char **pzWhere /* OUT: New WHERE clause */ +){ + char *zWhere = 0; + if( *pRc==SQLITE_OK ){ + if( pAr->nArg==0 ){ + zWhere = sqlite3_mprintf("1"); + }else{ + int i; + const char *zSep = ""; + for(i=0; inArg; i++){ + const char *z = pAr->azArg[i]; + zWhere = sqlite3_mprintf( + "%z%s name = '%q' OR substr(name,1,%d) = '%q/'", + zWhere, zSep, z, strlen30(z)+1, z + ); + if( zWhere==0 ){ + *pRc = SQLITE_NOMEM; + break; + } + zSep = " OR "; + } + } + } + *pzWhere = zWhere; +} + +/* +** Implementation of .ar "lisT" command. +*/ +static int arListCommand(ArCommand *pAr){ + const char *zSql = "SELECT %s FROM %s WHERE %s"; + const char *azCols[] = { + "name", + "lsmode(mode), sz, datetime(mtime, 'unixepoch'), name" + }; + + char *zWhere = 0; + sqlite3_stmt *pSql = 0; + int rc; + + rc = arCheckEntries(pAr); + arWhereClause(&rc, pAr, &zWhere); + + shellPreparePrintf(pAr->db, &rc, &pSql, zSql, azCols[pAr->bVerbose], + pAr->zSrcTable, zWhere); + if( pAr->bDryRun ){ + utf8_printf(pAr->p->out, "%s\n", sqlite3_sql(pSql)); + }else{ + while( rc==SQLITE_OK && SQLITE_ROW==sqlite3_step(pSql) ){ + if( pAr->bVerbose ){ + utf8_printf(pAr->p->out, "%s % 10d %s %s\n", + sqlite3_column_text(pSql, 0), + sqlite3_column_int(pSql, 1), + sqlite3_column_text(pSql, 2), + sqlite3_column_text(pSql, 3) + ); + }else{ + utf8_printf(pAr->p->out, "%s\n", sqlite3_column_text(pSql, 0)); + } + } + } + shellFinalize(&rc, pSql); + return rc; +} + + +/* +** Implementation of .ar "eXtract" command. +*/ +static int arExtractCommand(ArCommand *pAr){ + const char *zSql1 = + "SELECT " + " ($dir || name)," + " writefile(($dir || name), %s, mode, mtime) " + "FROM %s WHERE (%s) AND (data IS NULL OR $dirOnly = 0)"; + + const char *azExtraArg[] = { + "sqlar_uncompress(data, sz)", + "data" + }; + + sqlite3_stmt *pSql = 0; + int rc = SQLITE_OK; + char *zDir = 0; + char *zWhere = 0; + int i, j; + + /* If arguments are specified, check that they actually exist within + ** the archive before proceeding. And formulate a WHERE clause to + ** match them. */ + rc = arCheckEntries(pAr); + arWhereClause(&rc, pAr, &zWhere); + + if( rc==SQLITE_OK ){ + if( pAr->zDir ){ + zDir = sqlite3_mprintf("%s/", pAr->zDir); + }else{ + zDir = sqlite3_mprintf(""); + } + if( zDir==0 ) rc = SQLITE_NOMEM; + } + + shellPreparePrintf(pAr->db, &rc, &pSql, zSql1, + azExtraArg[pAr->bZip], pAr->zSrcTable, zWhere + ); + + if( rc==SQLITE_OK ){ + j = sqlite3_bind_parameter_index(pSql, "$dir"); + sqlite3_bind_text(pSql, j, zDir, -1, SQLITE_STATIC); + + /* Run the SELECT statement twice. The first time, writefile() is called + ** for all archive members that should be extracted. The second time, + ** only for the directories. This is because the timestamps for + ** extracted directories must be reset after they are populated (as + ** populating them changes the timestamp). */ + for(i=0; i<2; i++){ + j = sqlite3_bind_parameter_index(pSql, "$dirOnly"); + sqlite3_bind_int(pSql, j, i); + if( pAr->bDryRun ){ + utf8_printf(pAr->p->out, "%s\n", sqlite3_sql(pSql)); + }else{ + while( rc==SQLITE_OK && SQLITE_ROW==sqlite3_step(pSql) ){ + if( i==0 && pAr->bVerbose ){ + utf8_printf(pAr->p->out, "%s\n", sqlite3_column_text(pSql, 0)); + } + } + } + shellReset(&rc, pSql); + } + shellFinalize(&rc, pSql); + } + + sqlite3_free(zDir); + sqlite3_free(zWhere); + return rc; +} + +/* +** Run the SQL statement in zSql. Or if doing a --dryrun, merely print it out. +*/ +static int arExecSql(ArCommand *pAr, const char *zSql){ + int rc; + if( pAr->bDryRun ){ + utf8_printf(pAr->p->out, "%s\n", zSql); + rc = SQLITE_OK; + }else{ + char *zErr = 0; + rc = sqlite3_exec(pAr->db, zSql, 0, 0, &zErr); + if( zErr ){ + utf8_printf(stdout, "ERROR: %s\n", zErr); + sqlite3_free(zErr); + } + } + return rc; +} + + +/* +** Implementation of .ar "create" and "update" commands. +** +** Create the "sqlar" table in the database if it does not already exist. +** Then add each file in the azFile[] array to the archive. Directories +** are added recursively. If argument bVerbose is non-zero, a message is +** printed on stdout for each file archived. +** +** The create command is the same as update, except that it drops +** any existing "sqlar" table before beginning. +*/ +static int arCreateOrUpdateCommand( + ArCommand *pAr, /* Command arguments and options */ + int bUpdate /* true for a --create. false for --update */ +){ + const char *zCreate = + "CREATE TABLE IF NOT EXISTS sqlar(\n" + " name TEXT PRIMARY KEY, -- name of the file\n" + " mode INT, -- access permissions\n" + " mtime INT, -- last modification time\n" + " sz INT, -- original file size\n" + " data BLOB -- compressed content\n" + ")"; + const char *zDrop = "DROP TABLE IF EXISTS sqlar"; + const char *zInsertFmt[2] = { + "REPLACE INTO %s(name,mode,mtime,sz,data)\n" + " SELECT\n" + " %s,\n" + " mode,\n" + " mtime,\n" + " CASE substr(lsmode(mode),1,1)\n" + " WHEN '-' THEN length(data)\n" + " WHEN 'd' THEN 0\n" + " ELSE -1 END,\n" + " sqlar_compress(data)\n" + " FROM fsdir(%Q,%Q)\n" + " WHERE lsmode(mode) NOT LIKE '?%%';", + "REPLACE INTO %s(name,mode,mtime,data)\n" + " SELECT\n" + " %s,\n" + " mode,\n" + " mtime,\n" + " data\n" + " FROM fsdir(%Q,%Q)\n" + " WHERE lsmode(mode) NOT LIKE '?%%';" + }; + int i; /* For iterating through azFile[] */ + int rc; /* Return code */ + const char *zTab = 0; /* SQL table into which to insert */ + char *zSql; + char zTemp[50]; + + arExecSql(pAr, "PRAGMA page_size=512"); + rc = arExecSql(pAr, "SAVEPOINT ar;"); + if( rc!=SQLITE_OK ) return rc; + zTemp[0] = 0; + if( pAr->bZip ){ + /* Initialize the zipfile virtual table, if necessary */ + if( pAr->zFile ){ + sqlite3_uint64 r; + sqlite3_randomness(sizeof(r),&r); + sqlite3_snprintf(sizeof(zTemp),zTemp,"zip%016llx",r); + zTab = zTemp; + zSql = sqlite3_mprintf( + "CREATE VIRTUAL TABLE temp.%s USING zipfile(%Q)", + zTab, pAr->zFile + ); + rc = arExecSql(pAr, zSql); + sqlite3_free(zSql); + }else{ + zTab = "zip"; + } + }else{ + /* Initialize the table for an SQLAR */ + zTab = "sqlar"; + if( bUpdate==0 ){ + rc = arExecSql(pAr, zDrop); + if( rc!=SQLITE_OK ) goto end_ar_transaction; + } + rc = arExecSql(pAr, zCreate); + } + for(i=0; inArg && rc==SQLITE_OK; i++){ + char *zSql2 = sqlite3_mprintf(zInsertFmt[pAr->bZip], zTab, + pAr->bVerbose ? "shell_putsnl(name)" : "name", + pAr->azArg[i], pAr->zDir); + rc = arExecSql(pAr, zSql2); + sqlite3_free(zSql2); + } +end_ar_transaction: + if( rc!=SQLITE_OK ){ + arExecSql(pAr, "ROLLBACK TO ar; RELEASE ar;"); + }else{ + rc = arExecSql(pAr, "RELEASE ar;"); + if( pAr->bZip && pAr->zFile ){ + zSql = sqlite3_mprintf("DROP TABLE %s", zTemp); + arExecSql(pAr, zSql); + sqlite3_free(zSql); + } + } + return rc; +} + +/* +** Implementation of ".ar" dot command. +*/ +static int arDotCommand( + ShellState *pState, /* Current shell tool state */ + char **azArg, /* Array of arguments passed to dot command */ + int nArg /* Number of entries in azArg[] */ +){ + ArCommand cmd; + int rc; + memset(&cmd, 0, sizeof(cmd)); + rc = arParseCommand(azArg, nArg, &cmd); + if( rc==SQLITE_OK ){ + int eDbType = SHELL_OPEN_UNSPEC; + cmd.p = pState; + cmd.db = pState->db; + if( cmd.zFile ){ + eDbType = deduceDatabaseType(cmd.zFile, 1); + }else{ + eDbType = pState->openMode; + } + if( eDbType==SHELL_OPEN_ZIPFILE ){ + if( cmd.eCmd==AR_CMD_EXTRACT || cmd.eCmd==AR_CMD_LIST ){ + if( cmd.zFile==0 ){ + cmd.zSrcTable = sqlite3_mprintf("zip"); + }else{ + cmd.zSrcTable = sqlite3_mprintf("zipfile(%Q)", cmd.zFile); + } + } + cmd.bZip = 1; + }else if( cmd.zFile ){ + int flags; + if( cmd.bAppend ) eDbType = SHELL_OPEN_APPENDVFS; + if( cmd.eCmd==AR_CMD_CREATE || cmd.eCmd==AR_CMD_UPDATE ){ + flags = SQLITE_OPEN_READWRITE|SQLITE_OPEN_CREATE; + }else{ + flags = SQLITE_OPEN_READONLY; + } + cmd.db = 0; + if( cmd.bDryRun ){ + utf8_printf(pState->out, "-- open database '%s'%s\n", cmd.zFile, + eDbType==SHELL_OPEN_APPENDVFS ? " using 'apndvfs'" : ""); + } + rc = sqlite3_open_v2(cmd.zFile, &cmd.db, flags, + eDbType==SHELL_OPEN_APPENDVFS ? "apndvfs" : 0); + if( rc!=SQLITE_OK ){ + utf8_printf(stderr, "cannot open file: %s (%s)\n", + cmd.zFile, sqlite3_errmsg(cmd.db) + ); + goto end_ar_command; + } + sqlite3_fileio_init(cmd.db, 0, 0); + sqlite3_sqlar_init(cmd.db, 0, 0); + sqlite3_create_function(cmd.db, "shell_putsnl", 1, SQLITE_UTF8, cmd.p, + shellPutsFunc, 0, 0); + + } + if( cmd.zSrcTable==0 && cmd.bZip==0 ){ + if( cmd.eCmd!=AR_CMD_CREATE + && sqlite3_table_column_metadata(cmd.db,0,"sqlar","name",0,0,0,0,0) + ){ + utf8_printf(stderr, "database does not contain an 'sqlar' table\n"); + rc = SQLITE_ERROR; + goto end_ar_command; + } + cmd.zSrcTable = sqlite3_mprintf("sqlar"); + } + + switch( cmd.eCmd ){ + case AR_CMD_CREATE: + rc = arCreateOrUpdateCommand(&cmd, 0); + break; + + case AR_CMD_EXTRACT: + rc = arExtractCommand(&cmd); + break; + + case AR_CMD_LIST: + rc = arListCommand(&cmd); + break; + + case AR_CMD_HELP: + arUsage(pState->out); + break; + + default: + assert( cmd.eCmd==AR_CMD_UPDATE ); + rc = arCreateOrUpdateCommand(&cmd, 1); + break; + } + } +end_ar_command: + if( cmd.db!=pState->db ){ + sqlite3_close(cmd.db); + } + sqlite3_free(cmd.zSrcTable); + + return rc; +} +/* End of the ".archive" or ".ar" command logic +**********************************************************************************/ +#endif /* !defined(SQLITE_OMIT_VIRTUALTABLE) && defined(SQLITE_HAVE_ZLIB) */ + /* ** If an input line begins with "." then invoke this routine to @@ -5432,6 +12998,12 @@ static int do_meta_command(char *zLine, ShellState *p){ int rc = 0; char *azArg[50]; +#ifndef SQLITE_OMIT_VIRTUALTABLE + if( p->expert.pExpert ){ + expertFinish(p, 1, 0); + } +#endif + /* Parse the input line into tokens. */ while( zLine[h] && nArg=3 && strncmp(azArg[0], "backup", n)==0) || (c=='s' && n>=3 && strncmp(azArg[0], "save", n)==0) ){ @@ -5747,12 +13327,14 @@ static int do_meta_command(char *zLine, ShellState *p){ if( c=='e' && strncmp(azArg[0], "eqp", n)==0 ){ if( nArg==2 ){ if( strcmp(azArg[1],"full")==0 ){ - p->autoEQP = 2; + p->autoEQP = AUTOEQP_full; + }else if( strcmp(azArg[1],"trigger")==0 ){ + p->autoEQP = AUTOEQP_trigger; }else{ - p->autoEQP = booleanValue(azArg[1]); + p->autoEQP = (u8)booleanValue(azArg[1]); } }else{ - raw_printf(stderr, "Usage: .eqp on|off|full\n"); + raw_printf(stderr, "Usage: .eqp off|on|trigger|full\n"); rc = 1; } }else @@ -5786,6 +13368,13 @@ static int do_meta_command(char *zLine, ShellState *p){ } }else +#ifndef SQLITE_OMIT_VIRTUALTABLE + if( c=='e' && strncmp(azArg[0], "expert", n)==0 ){ + open_db(p, 0); + expertDotCommand(p, azArg, nArg); + }else +#endif + if( c=='f' && strncmp(azArg[0], "fullschema", n)==0 ){ ShellState data; char *zErrMsg = 0; @@ -5829,14 +13418,11 @@ static int do_meta_command(char *zLine, ShellState *p){ callback, &data, &zErrMsg); data.cMode = data.mode = MODE_Insert; data.zDestTable = "sqlite_stat1"; - shell_exec(p->db, "SELECT * FROM sqlite_stat1", - shell_callback, &data,&zErrMsg); + shell_exec(p, "SELECT * FROM sqlite_stat1", &zErrMsg); data.zDestTable = "sqlite_stat3"; - shell_exec(p->db, "SELECT * FROM sqlite_stat3", - shell_callback, &data,&zErrMsg); + shell_exec(p, "SELECT * FROM sqlite_stat3", &zErrMsg); data.zDestTable = "sqlite_stat4"; - shell_exec(p->db, "SELECT * FROM sqlite_stat4", - shell_callback, &data, &zErrMsg); + shell_exec(p, "SELECT * FROM sqlite_stat4", &zErrMsg); raw_printf(p->out, "ANALYZE sqlite_master;\n"); } }else @@ -6240,13 +13826,13 @@ static int do_meta_command(char *zLine, ShellState *p){ }else{ const char *zFile = azArg[1]; output_file_close(p->pLog); - p->pLog = output_file_open(zFile); + p->pLog = output_file_open(zFile, 0); } }else if( c=='m' && strncmp(azArg[0], "mode", n)==0 ){ const char *zMode = nArg>=2 ? azArg[1] : ""; - int n2 = (int)strlen(zMode); + int n2 = strlen30(zMode); int c2 = zMode[0]; if( c2=='l' && n2>2 && strncmp(azArg[1],"lines",n2)==0 ){ p->mode = MODE_Line; @@ -6311,11 +13897,20 @@ static int do_meta_command(char *zLine, ShellState *p){ p->zDbFilename = 0; sqlite3_free(p->zFreeOnClose); p->zFreeOnClose = 0; + p->openMode = SHELL_OPEN_UNSPEC; /* Check for command-line arguments */ for(iName=1; iNameopenMode = SHELL_OPEN_ZIPFILE; +#endif + }else if( optionMatch(z, "append") ){ + p->openMode = SHELL_OPEN_APPENDVFS; + }else if( optionMatch(z, "readonly") ){ + p->openMode = SHELL_OPEN_READONLY; }else if( z[0]=='-' ){ utf8_printf(stderr, "unknown option: %s\n", z); rc = 1; @@ -6342,18 +13937,27 @@ static int do_meta_command(char *zLine, ShellState *p){ } }else - if( c=='o' - && (strncmp(azArg[0], "output", n)==0 || strncmp(azArg[0], "once", n)==0) + if( (c=='o' + && (strncmp(azArg[0], "output", n)==0||strncmp(azArg[0], "once", n)==0)) + || (c=='e' && n==5 && strcmp(azArg[0],"excel")==0) ){ const char *zFile = nArg>=2 ? azArg[1] : "stdout"; + int bTxtMode = 0; + if( azArg[0][0]=='e' ){ + /* Transform the ".excel" command into ".once -x" */ + nArg = 2; + azArg[0] = "once"; + zFile = azArg[1] = "-x"; + n = 4; + } if( nArg>2 ){ - utf8_printf(stderr, "Usage: .%s FILE\n", azArg[0]); + utf8_printf(stderr, "Usage: .%s [-e|-x|FILE]\n", azArg[0]); rc = 1; goto meta_command_exit; } if( n>1 && strncmp(azArg[0], "once", n)==0 ){ if( nArg<2 ){ - raw_printf(stderr, "Usage: .once FILE\n"); + raw_printf(stderr, "Usage: .once (-e|-x|FILE)\n"); rc = 1; goto meta_command_exit; } @@ -6362,6 +13966,23 @@ static int do_meta_command(char *zLine, ShellState *p){ p->outCount = 0; } output_reset(p); + if( zFile[0]=='-' && zFile[1]=='-' ) zFile++; +#ifndef SQLITE_NOHAVE_SYSTEM + if( strcmp(zFile, "-e")==0 || strcmp(zFile, "-x")==0 ){ + p->doXdgOpen = 1; + outputModePush(p); + if( zFile[1]=='x' ){ + newTempFile(p, "csv"); + p->mode = MODE_Csv; + sqlite3_snprintf(sizeof(p->colSeparator), p->colSeparator, SEP_Comma); + sqlite3_snprintf(sizeof(p->rowSeparator), p->rowSeparator, SEP_CrLf); + }else{ + newTempFile(p, "txt"); + bTxtMode = 1; + } + zFile = p->zTempFile; + } +#endif /* SQLITE_NOHAVE_SYSTEM */ if( zFile[0]=='|' ){ #ifdef SQLITE_OMIT_POPEN raw_printf(stderr, "Error: pipes are not supported in this OS\n"); @@ -6378,7 +13999,7 @@ static int do_meta_command(char *zLine, ShellState *p){ } #endif }else{ - p->out = output_file_open(zFile); + p->out = output_file_open(zFile, bTxtMode); if( p->out==0 ){ if( strcmp(zFile,"off")!=0 ){ utf8_printf(stderr,"Error: cannot write to \"%s\"\n", zFile); @@ -6481,10 +14102,9 @@ static int do_meta_command(char *zLine, ShellState *p){ sqlite3_close(pSrc); }else - if( c=='s' && strncmp(azArg[0], "scanstats", n)==0 ){ if( nArg==2 ){ - p->scanstatsOn = booleanValue(azArg[1]); + p->scanstatsOn = (u8)booleanValue(azArg[1]); #ifndef SQLITE_ENABLE_STMT_SCANSTATUS raw_printf(stderr, "Warning: .scanstats not available in this build.\n"); #endif @@ -6498,59 +14118,48 @@ static int do_meta_command(char *zLine, ShellState *p){ ShellText sSelect; ShellState data; char *zErrMsg = 0; - const char *zDiv = 0; + const char *zDiv = "("; + const char *zName = 0; int iSchema = 0; + int bDebug = 0; + int ii; open_db(p, 0); memcpy(&data, p, sizeof(data)); data.showHeader = 0; data.cMode = data.mode = MODE_Semi; initText(&sSelect); - if( nArg>=2 && optionMatch(azArg[1], "indent") ){ - data.cMode = data.mode = MODE_Pretty; - nArg--; - if( nArg==2 ) azArg[1] = azArg[2]; - } - if( nArg==2 && azArg[1][0]!='-' ){ - int i; - for(i=0; azArg[1][i]; i++) azArg[1][i] = ToLower(azArg[1][i]); - if( strcmp(azArg[1],"sqlite_master")==0 ){ - char *new_argv[2], *new_colv[2]; - new_argv[0] = "CREATE TABLE sqlite_master (\n" - " type text,\n" - " name text,\n" - " tbl_name text,\n" - " rootpage integer,\n" - " sql text\n" - ")"; - new_argv[1] = 0; - new_colv[0] = "sql"; - new_colv[1] = 0; - callback(&data, 1, new_argv, new_colv); - rc = SQLITE_OK; - }else if( strcmp(azArg[1],"sqlite_temp_master")==0 ){ - char *new_argv[2], *new_colv[2]; - new_argv[0] = "CREATE TEMP TABLE sqlite_temp_master (\n" - " type text,\n" - " name text,\n" - " tbl_name text,\n" - " rootpage integer,\n" - " sql text\n" - ")"; - new_argv[1] = 0; - new_colv[0] = "sql"; - new_colv[1] = 0; - callback(&data, 1, new_argv, new_colv); - rc = SQLITE_OK; + for(ii=1; ii1 ){ - char *zQarg = sqlite3_mprintf("%Q", azArg[1]); - if( strchr(azArg[1], '.') ){ + if( zName ){ + char *zQarg = sqlite3_mprintf("%Q", zName); + int bGlob = strchr(zName, '*') != 0 || strchr(zName, '?') != 0 || + strchr(zName, '[') != 0; + if( strchr(zName, '.') ){ appendText(&sSelect, "lower(printf('%s.%s',sname,tbl_name))", 0); }else{ appendText(&sSelect, "lower(tbl_name)", 0); } - appendText(&sSelect, strchr(azArg[1], '*') ? " GLOB " : " LIKE ", 0); + appendText(&sSelect, bGlob ? " GLOB " : " LIKE ", 0); appendText(&sSelect, zQarg, 0); + if( !bGlob ){ + appendText(&sSelect, " ESCAPE '\\' ", 0); + } appendText(&sSelect, " AND ", 0); sqlite3_free(zQarg); } appendText(&sSelect, "type!='meta' AND sql IS NOT NULL" " ORDER BY snum, rowid", 0); - rc = sqlite3_exec(p->db, sSelect.z, callback, &data, &zErrMsg); + if( bDebug ){ + utf8_printf(p->out, "SQL: %s;\n", sSelect.z); + }else{ + rc = sqlite3_exec(p->db, sSelect.z, callback, &data, &zErrMsg); + } freeText(&sSelect); } if( zErrMsg ){ @@ -7007,7 +14630,7 @@ static int do_meta_command(char *zLine, ShellState *p){ }else{ zLike = z; bSeparate = 1; - if( sqlite3_strlike("sqlite_%", zLike, 0)==0 ) bSchema = 1; + if( sqlite3_strlike("sqlite\\_%", zLike, '\\')==0 ) bSchema = 1; } } if( bSchema ){ @@ -7074,11 +14697,12 @@ static int do_meta_command(char *zLine, ShellState *p){ if( bDebug ){ utf8_printf(p->out, "%s\n", zSql); }else{ - shell_exec(p->db, zSql, shell_callback, p, 0); + shell_exec(p, zSql, 0); } sqlite3_free(zSql); }else +#ifndef SQLITE_NOHAVE_SYSTEM if( c=='s' && (strncmp(azArg[0], "shell", n)==0 || strncmp(azArg[0],"system",n)==0) ){ @@ -7098,9 +14722,10 @@ static int do_meta_command(char *zLine, ShellState *p){ sqlite3_free(zCmd); if( x ) raw_printf(stderr, "System command returns %d\n", x); }else +#endif /* !defined(SQLITE_NOHAVE_SYSTEM) */ if( c=='s' && strncmp(azArg[0], "show", n)==0 ){ - static const char *azBool[] = { "off", "on", "full", "unk" }; + static const char *azBool[] = { "off", "on", "trigger", "full"}; int i; if( nArg!=1 ){ raw_printf(stderr, "Usage: .show\n"); @@ -7137,7 +14762,7 @@ static int do_meta_command(char *zLine, ShellState *p){ if( c=='s' && strncmp(azArg[0], "stats", n)==0 ){ if( nArg==2 ){ - p->statsOn = booleanValue(azArg[1]); + p->statsOn = (u8)booleanValue(azArg[1]); }else if( nArg==1 ){ display_stats(p->db, p, 0); }else{ @@ -7257,7 +14882,7 @@ static int do_meta_command(char *zLine, ShellState *p){ /* Begin redirecting output to the file "testcase-out.txt" */ if( c=='t' && strcmp(azArg[0],"testcase")==0 ){ output_reset(p); - p->out = output_file_open("testcase-out.txt"); + p->out = output_file_open("testcase-out.txt", 0); if( p->out==0 ){ raw_printf(stderr, "Error: cannot open 'testcase-out.txt'\n"); } @@ -7269,49 +14894,80 @@ static int do_meta_command(char *zLine, ShellState *p){ }else #ifndef SQLITE_UNTESTABLE - if( c=='t' && n>=8 && strncmp(azArg[0], "testctrl", n)==0 && nArg>=2 ){ + if( c=='t' && n>=8 && strncmp(azArg[0], "testctrl", n)==0 ){ static const struct { const char *zCtrlName; /* Name of a test-control option */ int ctrlCode; /* Integer code for that option */ + const char *zUsage; /* Usage notes */ } aCtrl[] = { - { "prng_save", SQLITE_TESTCTRL_PRNG_SAVE }, - { "prng_restore", SQLITE_TESTCTRL_PRNG_RESTORE }, - { "prng_reset", SQLITE_TESTCTRL_PRNG_RESET }, - { "bitvec_test", SQLITE_TESTCTRL_BITVEC_TEST }, - { "fault_install", SQLITE_TESTCTRL_FAULT_INSTALL }, - { "benign_malloc_hooks", SQLITE_TESTCTRL_BENIGN_MALLOC_HOOKS }, - { "pending_byte", SQLITE_TESTCTRL_PENDING_BYTE }, - { "assert", SQLITE_TESTCTRL_ASSERT }, - { "always", SQLITE_TESTCTRL_ALWAYS }, - { "reserve", SQLITE_TESTCTRL_RESERVE }, - { "optimizations", SQLITE_TESTCTRL_OPTIMIZATIONS }, - { "iskeyword", SQLITE_TESTCTRL_ISKEYWORD }, - { "byteorder", SQLITE_TESTCTRL_BYTEORDER }, - { "never_corrupt", SQLITE_TESTCTRL_NEVER_CORRUPT }, - { "imposter", SQLITE_TESTCTRL_IMPOSTER }, + { "always", SQLITE_TESTCTRL_ALWAYS, "BOOLEAN" }, + { "assert", SQLITE_TESTCTRL_ASSERT, "BOOLEAN" }, + /*{ "benign_malloc_hooks",SQLITE_TESTCTRL_BENIGN_MALLOC_HOOKS, "" },*/ + /*{ "bitvec_test", SQLITE_TESTCTRL_BITVEC_TEST, "" },*/ + { "byteorder", SQLITE_TESTCTRL_BYTEORDER, "" }, + /*{ "fault_install", SQLITE_TESTCTRL_FAULT_INSTALL, "" }, */ + { "imposter", SQLITE_TESTCTRL_IMPOSTER, "SCHEMA ON/OFF ROOTPAGE"}, +#ifdef SQLITE_N_KEYWORD + { "iskeyword", SQLITE_TESTCTRL_ISKEYWORD, "IDENTIFIER" }, +#endif + { "localtime_fault", SQLITE_TESTCTRL_LOCALTIME_FAULT,"BOOLEAN" }, + { "never_corrupt", SQLITE_TESTCTRL_NEVER_CORRUPT, "BOOLEAN" }, + { "optimizations", SQLITE_TESTCTRL_OPTIMIZATIONS, "DISABLE-MASK" }, +#ifdef YYCOVERAGE + { "parser_coverage", SQLITE_TESTCTRL_PARSER_COVERAGE, "" }, +#endif + { "pending_byte", SQLITE_TESTCTRL_PENDING_BYTE, "OFFSET " }, + { "prng_reset", SQLITE_TESTCTRL_PRNG_RESET, "" }, + { "prng_restore", SQLITE_TESTCTRL_PRNG_RESTORE, "" }, + { "prng_save", SQLITE_TESTCTRL_PRNG_SAVE, "" }, + { "reserve", SQLITE_TESTCTRL_RESERVE, "BYTES-OF-RESERVE" }, }; int testctrl = -1; - int rc2 = 0; + int iCtrl = -1; + int rc2 = 0; /* 0: usage. 1: %d 2: %x 3: no-output */ + int isOk = 0; int i, n2; + const char *zCmd = 0; + open_db(p, 0); + zCmd = nArg>=2 ? azArg[1] : "help"; + + /* The argument can optionally begin with "-" or "--" */ + if( zCmd[0]=='-' && zCmd[1] ){ + zCmd++; + if( zCmd[0]=='-' && zCmd[1] ) zCmd++; + } + + /* --help lists all test-controls */ + if( strcmp(zCmd,"help")==0 ){ + utf8_printf(p->out, "Available test-controls:\n"); + for(i=0; iout, " .testctrl %s %s\n", + aCtrl[i].zCtrlName, aCtrl[i].zUsage); + } + rc = 1; + goto meta_command_exit; + } /* convert testctrl text option to value. allow any unique prefix ** of the option name, or a numerical value. */ - n2 = strlen30(azArg[1]); + n2 = strlen30(zCmd); for(i=0; iSQLITE_TESTCTRL_LAST) ){ - utf8_printf(stderr,"Error: invalid testctrl option: %s\n", azArg[1]); + if( testctrl<0 ){ + utf8_printf(stderr,"Error: unknown test-control: %s\n" + "Use \".testctrl --help\" for help\n", zCmd); }else{ switch(testctrl){ @@ -7321,10 +14977,7 @@ static int do_meta_command(char *zLine, ShellState *p){ if( nArg==3 ){ int opt = (int)strtol(azArg[2], 0, 0); rc2 = sqlite3_test_control(testctrl, p->db, opt); - raw_printf(p->out, "%d (0x%08x)\n", rc2, rc2); - } else { - utf8_printf(stderr,"Error: testctrl %s takes a single int option\n", - azArg[1]); + isOk = 3; } break; @@ -7335,10 +14988,7 @@ static int do_meta_command(char *zLine, ShellState *p){ case SQLITE_TESTCTRL_BYTEORDER: if( nArg==2 ){ rc2 = sqlite3_test_control(testctrl); - raw_printf(p->out, "%d (0x%08x)\n", rc2, rc2); - } else { - utf8_printf(stderr,"Error: testctrl %s takes no options\n", - azArg[1]); + isOk = testctrl==SQLITE_TESTCTRL_BYTEORDER ? 1 : 3; } break; @@ -7347,24 +14997,27 @@ static int do_meta_command(char *zLine, ShellState *p){ if( nArg==3 ){ unsigned int opt = (unsigned int)integerValue(azArg[2]); rc2 = sqlite3_test_control(testctrl, opt); - raw_printf(p->out, "%d (0x%08x)\n", rc2, rc2); - } else { - utf8_printf(stderr,"Error: testctrl %s takes a single unsigned" - " int option\n", azArg[1]); + isOk = 3; } break; /* sqlite3_test_control(int, int) */ case SQLITE_TESTCTRL_ASSERT: case SQLITE_TESTCTRL_ALWAYS: + if( nArg==3 ){ + int opt = booleanValue(azArg[2]); + rc2 = sqlite3_test_control(testctrl, opt); + isOk = 1; + } + break; + + /* sqlite3_test_control(int, int) */ + case SQLITE_TESTCTRL_LOCALTIME_FAULT: case SQLITE_TESTCTRL_NEVER_CORRUPT: if( nArg==3 ){ int opt = booleanValue(azArg[2]); rc2 = sqlite3_test_control(testctrl, opt); - raw_printf(p->out, "%d (0x%08x)\n", rc2, rc2); - } else { - utf8_printf(stderr,"Error: testctrl %s takes a single int option\n", - azArg[1]); + isOk = 3; } break; @@ -7374,11 +15027,7 @@ static int do_meta_command(char *zLine, ShellState *p){ if( nArg==3 ){ const char *opt = azArg[2]; rc2 = sqlite3_test_control(testctrl, opt); - raw_printf(p->out, "%d (0x%08x)\n", rc2, rc2); - } else { - utf8_printf(stderr, - "Error: testctrl %s takes a single char * option\n", - azArg[1]); + isOk = 1; } break; #endif @@ -7389,22 +15038,27 @@ static int do_meta_command(char *zLine, ShellState *p){ azArg[2], integerValue(azArg[3]), integerValue(azArg[4])); - raw_printf(p->out, "%d (0x%08x)\n", rc2, rc2); - }else{ - raw_printf(stderr,"Usage: .testctrl imposter dbName onoff tnum\n"); + isOk = 3; } break; - case SQLITE_TESTCTRL_BITVEC_TEST: - case SQLITE_TESTCTRL_FAULT_INSTALL: - case SQLITE_TESTCTRL_BENIGN_MALLOC_HOOKS: - default: - utf8_printf(stderr, - "Error: CLI support for testctrl %s not implemented\n", - azArg[1]); - break; +#ifdef YYCOVERAGE + case SQLITE_TESTCTRL_PARSER_COVERAGE: + if( nArg==2 ){ + sqlite3_test_control(testctrl, p->out); + isOk = 3; + } +#endif } } + if( isOk==0 && iCtrl>=0 ){ + utf8_printf(p->out, "Usage: .testctrl %s %s\n", zCmd, aCtrl[iCtrl].zUsage); + rc = 1; + }else if( isOk==1 ){ + raw_printf(p->out, "%d\n", rc2); + }else if( isOk==2 ){ + raw_printf(p->out, "0x%08x\n", rc2); + } }else #endif /* !defined(SQLITE_UNTESTABLE) */ @@ -7434,7 +15088,7 @@ static int do_meta_command(char *zLine, ShellState *p){ goto meta_command_exit; } output_file_close(p->traceOut); - p->traceOut = output_file_open(azArg[1]); + p->traceOut = output_file_open(azArg[1], 0); #if !defined(SQLITE_OMIT_TRACE) && !defined(SQLITE_OMIT_FLOATING_POINT) if( p->traceOut==0 ){ sqlite3_trace_v2(p->db, 0, 0, 0); @@ -7458,8 +15112,7 @@ static int do_meta_command(char *zLine, ShellState *p){ rc = 1; goto meta_command_exit; } - rc = sqlite3_user_authenticate(p->db, azArg[2], azArg[3], - (int)strlen(azArg[3])); + rc = sqlite3_user_authenticate(p->db, azArg[2], azArg[3], strlen30(azArg[3])); if( rc ){ utf8_printf(stderr, "Authentication failed for user %s\n", azArg[2]); rc = 1; @@ -7470,8 +15123,7 @@ static int do_meta_command(char *zLine, ShellState *p){ rc = 1; goto meta_command_exit; } - rc = sqlite3_user_add(p->db, azArg[2], - azArg[3], (int)strlen(azArg[3]), + rc = sqlite3_user_add(p->db, azArg[2], azArg[3], strlen30(azArg[3]), booleanValue(azArg[4])); if( rc ){ raw_printf(stderr, "User-Add failed: %d\n", rc); @@ -7483,8 +15135,7 @@ static int do_meta_command(char *zLine, ShellState *p){ rc = 1; goto meta_command_exit; } - rc = sqlite3_user_change(p->db, azArg[2], - azArg[3], (int)strlen(azArg[3]), + rc = sqlite3_user_change(p->db, azArg[2], azArg[3], strlen30(azArg[3]), booleanValue(azArg[4])); if( rc ){ raw_printf(stderr, "User-Edit failed: %d\n", rc); @@ -7512,6 +15163,20 @@ static int do_meta_command(char *zLine, ShellState *p){ if( c=='v' && strncmp(azArg[0], "version", n)==0 ){ utf8_printf(p->out, "SQLite %s %s\n" /*extra-version-info*/, sqlite3_libversion(), sqlite3_sourceid()); +#if SQLITE_HAVE_ZLIB + utf8_printf(p->out, "zlib version %s\n", zlibVersion()); +#endif +#define CTIMEOPT_VAL_(opt) #opt +#define CTIMEOPT_VAL(opt) CTIMEOPT_VAL_(opt) +#if defined(__clang__) && defined(__clang_major__) + utf8_printf(p->out, "clang-" CTIMEOPT_VAL(__clang_major__) "." + CTIMEOPT_VAL(__clang_minor__) "." + CTIMEOPT_VAL(__clang_patchlevel__) "\n"); +#elif defined(_MSC_VER) + utf8_printf(p->out, "msvc-" CTIMEOPT_VAL(_MSC_VER) "\n"); +#elif defined(__GNUC__) && defined(__VERSION__) + utf8_printf(p->out, "gcc-" __VERSION__ "\n"); +#endif }else if( c=='v' && strncmp(azArg[0], "vfsinfo", n)==0 ){ @@ -7637,6 +15302,16 @@ static int line_is_command_terminator(const char *zLine){ return 0; } +/* +** We need a default sqlite3_complete() implementation to use in case +** the shell is compiled with SQLITE_OMIT_COMPLETE. The default assumes +** any arbitrary text is a complete SQL statement. This is not very +** user-friendly, but it does seem to work. +*/ +#ifdef SQLITE_OMIT_COMPLETE +int sqlite3_complete(const char *zSql){ return 1; } +#endif + /* ** Return true if zSql is a complete SQL statement. Return false if it ** ends in the middle of a string literal or C-style comment. @@ -7661,7 +15336,7 @@ static int runOneSqlLine(ShellState *p, char *zSql, FILE *in, int startline){ open_db(p, 0); if( ShellHasFlag(p,SHFLG_Backslash) ) resolve_backslashes(zSql); BEGIN_TIMER; - rc = shell_exec(p->db, zSql, shell_callback, p, &zErrMsg); + rc = shell_exec(p, zSql, &zErrMsg); END_TIMER; if( rc || zErrMsg ){ char zPrefix[100]; @@ -7767,6 +15442,8 @@ static int process_input(ShellState *p, FILE *in){ if( p->outCount ){ output_reset(p); p->outCount = 0; + }else{ + clearTempFile(p); } }else if( nSql && _all_whitespace(zSql) ){ if( ShellHasFlag(p, SHFLG_Echo) ) printf("%s\n", zSql); @@ -7891,6 +15568,10 @@ static void process_sqliterc( ** Show available command line options */ static const char zOptions[] = +#if defined(SQLITE_HAVE_ZLIB) && !defined(SQLITE_OMIT_VIRTUALTABLE) + " -A ARGS... run \".archive ARGS\" and exit\n" +#endif + " -append append the database to the end of the file\n" " -ascii set output mode to 'ascii'\n" " -bail stop after hitting an error\n" " -batch force batch I/O\n" @@ -7917,6 +15598,7 @@ static const char zOptions[] = " -nullvalue TEXT set text string for NULL values. Default ''\n" " -pagecache SIZE N use N slots of SZ bytes each for page cache memory\n" " -quote set output mode to 'quote'\n" + " -readonly open the database read-only\n" " -separator SEP set output column separator. Default: '|'\n" " -stats print memory stats before each finalize\n" " -version show SQLite version\n" @@ -7924,6 +15606,9 @@ static const char zOptions[] = #ifdef SQLITE_ENABLE_VFSTRACE " -vfstrace enable tracing of all VFS calls\n" #endif +#ifdef SQLITE_HAVE_ZLIB + " -zip open the file as a ZIP Archive\n" +#endif ; static void usage(int showDetail){ utf8_printf(stderr, @@ -8026,21 +15711,39 @@ int SQLITE_CDECL wmain(int argc, wchar_t **wargv){ } #endif main_init(&data); + + /* On Windows, we must translate command-line arguments into UTF-8. + ** The SQLite memory allocator subsystem has to be enabled in order to + ** do this. But we want to run an sqlite3_shutdown() afterwards so that + ** subsequent sqlite3_config() calls will work. So copy all results into + ** memory that does not come from the SQLite memory allocator. + */ #if !SQLITE_SHELL_IS_UTF8 sqlite3_initialize(); - argv = sqlite3_malloc64(sizeof(argv[0])*argc); + argv = malloc(sizeof(argv[0])*argc); if( argv==0 ){ raw_printf(stderr, "out of memory\n"); exit(1); } for(i=0; i=1 && argv && argv[0] ); Argv0 = argv[0]; @@ -8049,6 +15752,8 @@ int SQLITE_CDECL wmain(int argc, wchar_t **wargv){ */ #ifdef SIGINT signal(SIGINT, interrupt_handler); +#elif (defined(_WIN32) || defined(WIN32)) && !defined(_WIN32_WCE) + SetConsoleCtrlHandler(ConsoleCtrlHandler, TRUE); #endif #ifdef SQLITE_SHELL_DBNAME_PROC @@ -8158,6 +15863,20 @@ int SQLITE_CDECL wmain(int argc, wchar_t **wargv){ utf8_printf(stderr, "no such VFS: \"%s\"\n", argv[i]); exit(1); } +#ifdef SQLITE_HAVE_ZLIB + }else if( strcmp(z,"-zip")==0 ){ + data.openMode = SHELL_OPEN_ZIPFILE; +#endif + }else if( strcmp(z,"-append")==0 ){ + data.openMode = SHELL_OPEN_APPENDVFS; + }else if( strcmp(z,"-readonly")==0 ){ + data.openMode = SHELL_OPEN_READONLY; +#if !defined(SQLITE_OMIT_VIRTUALTABLE) && defined(SQLITE_HAVE_ZLIB) + }else if( strncmp(z, "-A",2)==0 ){ + /* All remaining command-line arguments are passed to the ".archive" + ** command, so ignore them */ + break; +#endif } } if( data.zDbFilename==0 ){ @@ -8170,6 +15889,7 @@ int SQLITE_CDECL wmain(int argc, wchar_t **wargv){ #endif } data.out = stdout; + sqlite3_appendvfs_init(0,0,0); /* Go ahead and open the database file if it already exists. If the ** file does not exist, delay opening it. This prevents empty database @@ -8210,6 +15930,14 @@ int SQLITE_CDECL wmain(int argc, wchar_t **wargv){ }else if( strcmp(z,"-csv")==0 ){ data.mode = MODE_Csv; memcpy(data.colSeparator,",",2); +#ifdef SQLITE_HAVE_ZLIB + }else if( strcmp(z,"-zip")==0 ){ + data.openMode = SHELL_OPEN_ZIPFILE; +#endif + }else if( strcmp(z,"-append")==0 ){ + data.openMode = SHELL_OPEN_APPENDVFS; + }else if( strcmp(z,"-readonly")==0 ){ + data.openMode = SHELL_OPEN_READONLY; }else if( strcmp(z,"-ascii")==0 ){ data.mode = MODE_Ascii; sqlite3_snprintf(sizeof(data.colSeparator), data.colSeparator, @@ -8232,9 +15960,9 @@ int SQLITE_CDECL wmain(int argc, wchar_t **wargv){ }else if( strcmp(z,"-echo")==0 ){ ShellSetFlag(&data, SHFLG_Echo); }else if( strcmp(z,"-eqp")==0 ){ - data.autoEQP = 1; + data.autoEQP = AUTOEQP_on; }else if( strcmp(z,"-eqpfull")==0 ){ - data.autoEQP = 2; + data.autoEQP = AUTOEQP_full; }else if( strcmp(z,"-stats")==0 ){ data.statsOn = 1; }else if( strcmp(z,"-scanstats")==0 ){ @@ -8287,7 +16015,7 @@ int SQLITE_CDECL wmain(int argc, wchar_t **wargv){ if( rc && bail_on_error ) return rc==2 ? 0 : rc; }else{ open_db(&data, 0); - rc = shell_exec(data.db, z, shell_callback, &data, &zErrMsg); + rc = shell_exec(&data, z, &zErrMsg); if( zErrMsg!=0 ){ utf8_printf(stderr,"Error: %s\n", zErrMsg); if( bail_on_error ) return rc!=0 ? rc : 1; @@ -8296,6 +16024,23 @@ int SQLITE_CDECL wmain(int argc, wchar_t **wargv){ if( bail_on_error ) return rc; } } +#if !defined(SQLITE_OMIT_VIRTUALTABLE) && defined(SQLITE_HAVE_ZLIB) + }else if( strncmp(z, "-A", 2)==0 ){ + if( nCmd>0 ){ + utf8_printf(stderr, "Error: cannot mix regular SQL or dot-commands" + " with \"%s\"\n", z); + return 1; + } + open_db(&data, 0); + if( z[2] ){ + argv[i] = &z[2]; + arDotCommand(&data, argv+(i-1), argc-(i-1)); + }else{ + arDotCommand(&data, argv+i, argc-i); + } + readStdin = 0; + break; +#endif }else{ utf8_printf(stderr,"%s: Error: unknown option: %s\n", Argv0, z); raw_printf(stderr,"Use -help for a list of options.\n"); @@ -8315,7 +16060,7 @@ int SQLITE_CDECL wmain(int argc, wchar_t **wargv){ if( rc ) return rc==2 ? 0 : rc; }else{ open_db(&data, 0); - rc = shell_exec(data.db, azCmd[i], shell_callback, &data, &zErrMsg); + rc = shell_exec(&data, azCmd[i], &zErrMsg); if( zErrMsg!=0 ){ utf8_printf(stderr,"Error: %s\n", zErrMsg); return rc!=0 ? rc : 1; @@ -8374,9 +16119,12 @@ int SQLITE_CDECL wmain(int argc, wchar_t **wargv){ } sqlite3_free(data.zFreeOnClose); find_home_dir(1); + output_reset(&data); + data.doXdgOpen = 0; + clearTempFile(&data); #if !SQLITE_SHELL_IS_UTF8 - for(i=0; i[[SQLITE_FCNTL_LOCK_TIMEOUT]] +** The [SQLITE_FCNTL_LOCK_TIMEOUT] opcode causes attempts to obtain +** a file lock using the xLock or xShmLock methods of the VFS to wait +** for up to M milliseconds before failing, where M is the single +** unsigned integer parameter. ** */ #define SQLITE_FCNTL_LOCKSTATE 1 @@ -2118,6 +2128,7 @@ struct sqlite3_io_methods { #define SQLITE_FCNTL_BEGIN_ATOMIC_WRITE 31 #define SQLITE_FCNTL_COMMIT_ATOMIC_WRITE 32 #define SQLITE_FCNTL_ROLLBACK_ATOMIC_WRITE 33 +#define SQLITE_FCNTL_LOCK_TIMEOUT 34 /* deprecated names */ #define SQLITE_GET_LOCKPROXYFILE SQLITE_FCNTL_GET_LOCKPROXYFILE @@ -2155,12 +2166,18 @@ typedef struct sqlite3_api_routines sqlite3_api_routines; ** in the name of the object stands for "virtual file system". See ** the [VFS | VFS documentation] for further information. ** -** The value of the iVersion field is initially 1 but may be larger in -** future versions of SQLite. Additional fields may be appended to this -** object when the iVersion value is increased. Note that the structure -** of the sqlite3_vfs object changes in the transaction between -** SQLite version 3.5.9 and 3.6.0 and yet the iVersion field was not -** modified. +** The VFS interface is sometimes extended by adding new methods onto +** the end. Each time such an extension occurs, the iVersion field +** is incremented. The iVersion value started out as 1 in +** SQLite [version 3.5.0] on [dateof:3.5.0], then increased to 2 +** with SQLite [version 3.7.0] on [dateof:3.7.0], and then increased +** to 3 with SQLite [version 3.7.6] on [dateof:3.7.6]. Additional fields +** may be appended to the sqlite3_vfs object and the iVersion value +** may increase again in future versions of SQLite. +** Note that the structure +** of the sqlite3_vfs object changes in the transition from +** SQLite [version 3.5.9] to [version 3.6.0] on [dateof:3.6.0] +** and yet the iVersion field was not modified. ** ** The szOsFile field is the size of the subclassed [sqlite3_file] ** structure used by this VFS. mxPathname is the maximum length of @@ -3068,8 +3085,9 @@ struct sqlite3_mem_methods { ** connections at all to the database. If so, it performs a checkpoint ** operation before closing the connection. This option may be used to ** override this behaviour. The first parameter passed to this operation -** is an integer - non-zero to disable checkpoints-on-close, or zero (the -** default) to enable them. The second parameter is a pointer to an integer +** is an integer - positive to disable checkpoints-on-close, or zero (the +** default) to enable them, and negative to leave the setting unchanged. +** The second parameter is a pointer to an integer ** into which is written 0 or 1 to indicate whether checkpoints-on-close ** have been disabled - 0 if they are not disabled, 1 if they are. ** @@ -3083,8 +3101,24 @@ struct sqlite3_mem_methods { ** slower. But the QPSG has the advantage of more predictable behavior. With ** the QPSG active, SQLite will always use the same query plan in the field as ** was used during testing in the lab. +** The first argument to this setting is an integer which is 0 to disable +** the QPSG, positive to enable QPSG, or negative to leave the setting +** unchanged. The second parameter is a pointer to an integer into which +** is written 0 or 1 to indicate whether the QPSG is disabled or enabled +** following this call. ** ** +**
SQLITE_DBCONFIG_TRIGGER_EQP
+**
By default, the output of EXPLAIN QUERY PLAN commands does not +** include output for any operations performed by trigger programs. This +** option is used to set or clear (the default) a flag that governs this +** behavior. The first parameter passed to this operation is an integer - +** positive to enable output for trigger programs, or zero to disable it, +** or negative to leave the setting unchanged. +** The second parameter is a pointer to an integer into which is written +** 0 or 1 to indicate whether output-for-triggers has been disabled - 0 if +** it is not disabled, 1 if it is. +**
** */ #define SQLITE_DBCONFIG_MAINDBNAME 1000 /* const char* */ @@ -3095,7 +3129,8 @@ struct sqlite3_mem_methods { #define SQLITE_DBCONFIG_ENABLE_LOAD_EXTENSION 1005 /* int int* */ #define SQLITE_DBCONFIG_NO_CKPT_ON_CLOSE 1006 /* int int* */ #define SQLITE_DBCONFIG_ENABLE_QPSG 1007 /* int int* */ - +#define SQLITE_DBCONFIG_TRIGGER_EQP 1008 /* int int* */ +#define SQLITE_DBCONFIG_MAX 1008 /* Largest DBCONFIG */ /* ** CAPI3REF: Enable Or Disable Extended Result Codes @@ -3501,16 +3536,16 @@ SQLITE_API void sqlite3_free_table(char **result); ** ** These routines are work-alikes of the "printf()" family of functions ** from the standard C library. -** These routines understand most of the common K&R formatting options, -** plus some additional non-standard formats, detailed below. -** Note that some of the more obscure formatting options from recent -** C-library standards are omitted from this implementation. +** These routines understand most of the common formatting options from +** the standard library printf() +** plus some additional non-standard formats ([%q], [%Q], [%w], and [%z]). +** See the [built-in printf()] documentation for details. ** ** ^The sqlite3_mprintf() and sqlite3_vmprintf() routines write their -** results into memory obtained from [sqlite3_malloc()]. +** results into memory obtained from [sqlite3_malloc64()]. ** The strings returned by these two routines should be ** released by [sqlite3_free()]. ^Both routines return a -** NULL pointer if [sqlite3_malloc()] is unable to allocate enough +** NULL pointer if [sqlite3_malloc64()] is unable to allocate enough ** memory to hold the resulting string. ** ** ^(The sqlite3_snprintf() routine is similar to "snprintf()" from @@ -3534,71 +3569,7 @@ SQLITE_API void sqlite3_free_table(char **result); ** ** ^The sqlite3_vsnprintf() routine is a varargs version of sqlite3_snprintf(). ** -** These routines all implement some additional formatting -** options that are useful for constructing SQL statements. -** All of the usual printf() formatting options apply. In addition, there -** is are "%q", "%Q", "%w" and "%z" options. -** -** ^(The %q option works like %s in that it substitutes a nul-terminated -** string from the argument list. But %q also doubles every '\'' character. -** %q is designed for use inside a string literal.)^ By doubling each '\'' -** character it escapes that character and allows it to be inserted into -** the string. -** -** For example, assume the string variable zText contains text as follows: -** -**
-**  char *zText = "It's a happy day!";
-** 
-** -** One can use this text in an SQL statement as follows: -** -**
-**  char *zSQL = sqlite3_mprintf("INSERT INTO table VALUES('%q')", zText);
-**  sqlite3_exec(db, zSQL, 0, 0, 0);
-**  sqlite3_free(zSQL);
-** 
-** -** Because the %q format string is used, the '\'' character in zText -** is escaped and the SQL generated is as follows: -** -**
-**  INSERT INTO table1 VALUES('It''s a happy day!')
-** 
-** -** This is correct. Had we used %s instead of %q, the generated SQL -** would have looked like this: -** -**
-**  INSERT INTO table1 VALUES('It's a happy day!');
-** 
-** -** This second example is an SQL syntax error. As a general rule you should -** always use %q instead of %s when inserting text into a string literal. -** -** ^(The %Q option works like %q except it also adds single quotes around -** the outside of the total string. Additionally, if the parameter in the -** argument list is a NULL pointer, %Q substitutes the text "NULL" (without -** single quotes).)^ So, for example, one could say: -** -**
-**  char *zSQL = sqlite3_mprintf("INSERT INTO table VALUES(%Q)", zText);
-**  sqlite3_exec(db, zSQL, 0, 0, 0);
-**  sqlite3_free(zSQL);
-** 
-** -** The code above will render a correct SQL statement in the zSQL -** variable even if the zText variable is a NULL pointer. -** -** ^(The "%w" formatting option is like "%q" except that it expects to -** be contained within double-quotes instead of single quotes, and it -** escapes the double-quote character instead of the single-quote -** character.)^ The "%w" formatting option is intended for safely inserting -** table and column names into a constructed SQL statement. -** -** ^(The "%z" formatting option works like "%s" but with the -** addition that after the string has been read and copied into -** the result, [sqlite3_free()] is called on the input string.)^ +** See also: [built-in printf()], [printf() SQL function] */ SQLITE_API char *sqlite3_mprintf(const char*,...); SQLITE_API char *sqlite3_vmprintf(const char*, va_list); @@ -3956,8 +3927,8 @@ SQLITE_API SQLITE_DEPRECATED void *sqlite3_profile(sqlite3*, ** KEYWORDS: SQLITE_TRACE ** ** These constants identify classes of events that can be monitored -** using the [sqlite3_trace_v2()] tracing logic. The third argument -** to [sqlite3_trace_v2()] is an OR-ed combination of one or more of +** using the [sqlite3_trace_v2()] tracing logic. The M argument +** to [sqlite3_trace_v2(D,M,X,P)] is an OR-ed combination of one or more of ** the following constants. ^The first argument to the trace callback ** is one of the following constants. ** @@ -4664,13 +4635,13 @@ SQLITE_API int sqlite3_limit(sqlite3*, int id, int newVal); ** or [GLOB] operator or if the parameter is compared to an indexed column ** and the [SQLITE_ENABLE_STAT3] compile-time option is enabled. ** +** ** **

^sqlite3_prepare_v3() differs from sqlite3_prepare_v2() only in having ** the extra prepFlags parameter, which is a bit array consisting of zero or ** more of the [SQLITE_PREPARE_PERSISTENT|SQLITE_PREPARE_*] flags. ^The ** sqlite3_prepare_v2() interface works exactly the same as ** sqlite3_prepare_v3() with a zero prepFlags parameter. -** */ SQLITE_API int sqlite3_prepare( sqlite3 *db, /* Database handle */ @@ -5803,6 +5774,9 @@ SQLITE_API SQLITE_DEPRECATED int sqlite3_memory_alarm(void(*)(void*,sqlite3_int6 ** datatype of the value ** sqlite3_value_numeric_type   ** →  Best numeric datatype of the value +** sqlite3_value_nochange   +** →  True if the column is unchanged in an UPDATE +** against a virtual table. ** ** ** Details: @@ -5851,6 +5825,19 @@ SQLITE_API SQLITE_DEPRECATED int sqlite3_memory_alarm(void(*)(void*,sqlite3_int6 ** then the conversion is performed. Otherwise no conversion occurs. ** The [SQLITE_INTEGER | datatype] after conversion is returned.)^ ** +** ^Within the [xUpdate] method of a [virtual table], the +** sqlite3_value_nochange(X) interface returns true if and only if +** the column corresponding to X is unchanged by the UPDATE operation +** that the xUpdate method call was invoked to implement and if +** and the prior [xColumn] method call that was invoked to extracted +** the value for that column returned without setting a result (probably +** because it queried [sqlite3_vtab_nochange()] and found that the column +** was unchanging). ^Within an [xUpdate] method, any value for which +** sqlite3_value_nochange(X) is true will in all other respects appear +** to be a NULL value. If sqlite3_value_nochange(X) is invoked anywhere other +** than within an [xUpdate] method call for an UPDATE statement, then +** the return value is arbitrary and meaningless. +** ** Please pay particular attention to the fact that the pointer returned ** from [sqlite3_value_blob()], [sqlite3_value_text()], or ** [sqlite3_value_text16()] can be invalidated by a subsequent call to @@ -5873,6 +5860,7 @@ SQLITE_API int sqlite3_value_bytes(sqlite3_value*); SQLITE_API int sqlite3_value_bytes16(sqlite3_value*); SQLITE_API int sqlite3_value_type(sqlite3_value*); SQLITE_API int sqlite3_value_numeric_type(sqlite3_value*); +SQLITE_API int sqlite3_value_nochange(sqlite3_value*); /* ** CAPI3REF: Finding The Subtype Of SQL Values @@ -7975,9 +7963,9 @@ SQLITE_API sqlite3_mutex *sqlite3_db_mutex(sqlite3*); ** the xFileControl method. ^The return value of the xFileControl ** method becomes the return value of this routine. ** -** ^The SQLITE_FCNTL_FILE_POINTER value for the op parameter causes +** ^The [SQLITE_FCNTL_FILE_POINTER] value for the op parameter causes ** a pointer to the underlying [sqlite3_file] object to be written into -** the space pointed to by the 4th parameter. ^The SQLITE_FCNTL_FILE_POINTER +** the space pointed to by the 4th parameter. ^The [SQLITE_FCNTL_FILE_POINTER] ** case is a short-circuit path which does not actually invoke the ** underlying sqlite3_io_methods.xFileControl method. ** @@ -7989,7 +7977,7 @@ SQLITE_API sqlite3_mutex *sqlite3_db_mutex(sqlite3*); ** an incorrect zDbName and an SQLITE_ERROR return from the underlying ** xFileControl method. ** -** See also: [SQLITE_FCNTL_LOCKSTATE] +** See also: [file control opcodes] */ SQLITE_API int sqlite3_file_control(sqlite3*, const char *zDbName, int op, void*); @@ -8046,7 +8034,8 @@ SQLITE_API int sqlite3_test_control(int op, ...); #define SQLITE_TESTCTRL_ISINIT 23 #define SQLITE_TESTCTRL_SORTER_MMAP 24 #define SQLITE_TESTCTRL_IMPOSTER 25 -#define SQLITE_TESTCTRL_LAST 25 +#define SQLITE_TESTCTRL_PARSER_COVERAGE 26 +#define SQLITE_TESTCTRL_LAST 26 /* Largest TESTCTRL */ /* ** CAPI3REF: SQLite Runtime Status @@ -8281,6 +8270,15 @@ SQLITE_API int sqlite3_db_status(sqlite3*, int op, int *pCur, int *pHiwtr, int r ** highwater mark associated with SQLITE_DBSTATUS_CACHE_WRITE is always 0. ** ** +** [[SQLITE_DBSTATUS_CACHE_SPILL]] ^(

SQLITE_DBSTATUS_CACHE_SPILL
+**
This parameter returns the number of dirty cache entries that have +** been written to disk in the middle of a transaction due to the page +** cache overflowing. Transactions are more efficient if they are written +** to disk all at once. When pages spill mid-transaction, that introduces +** additional overhead. This parameter can be used help identify +** inefficiencies that can be resolve by increasing the cache size. +**
+** ** [[SQLITE_DBSTATUS_DEFERRED_FKS]] ^(
SQLITE_DBSTATUS_DEFERRED_FKS
**
This parameter returns zero for the current value if and only if ** all foreign key constraints (deferred or immediate) have been @@ -8300,7 +8298,8 @@ SQLITE_API int sqlite3_db_status(sqlite3*, int op, int *pCur, int *pHiwtr, int r #define SQLITE_DBSTATUS_CACHE_WRITE 9 #define SQLITE_DBSTATUS_DEFERRED_FKS 10 #define SQLITE_DBSTATUS_CACHE_USED_SHARED 11 -#define SQLITE_DBSTATUS_MAX 11 /* Largest defined DBSTATUS */ +#define SQLITE_DBSTATUS_CACHE_SPILL 12 +#define SQLITE_DBSTATUS_MAX 12 /* Largest defined DBSTATUS */ /* @@ -9300,6 +9299,40 @@ SQLITE_API int sqlite3_vtab_config(sqlite3*, int op, ...); */ SQLITE_API int sqlite3_vtab_on_conflict(sqlite3 *); +/* +** CAPI3REF: Determine If Virtual Table Column Access Is For UPDATE +** +** If the sqlite3_vtab_nochange(X) routine is called within the [xColumn] +** method of a [virtual table], then it returns true if and only if the +** column is being fetched as part of an UPDATE operation during which the +** column value will not change. Applications might use this to substitute +** a lighter-weight value to return that the corresponding [xUpdate] method +** understands as a "no-change" value. +** +** If the [xColumn] method calls sqlite3_vtab_nochange() and finds that +** the column is not changed by the UPDATE statement, they the xColumn +** method can optionally return without setting a result, without calling +** any of the [sqlite3_result_int|sqlite3_result_xxxxx() interfaces]. +** In that case, [sqlite3_value_nochange(X)] will return true for the +** same column in the [xUpdate] method. +*/ +SQLITE_API int sqlite3_vtab_nochange(sqlite3_context*); + +/* +** CAPI3REF: Determine The Collation For a Virtual Table Constraint +** +** This function may only be called from within a call to the [xBestIndex] +** method of a [virtual table]. +** +** The first argument must be the sqlite3_index_info object that is the +** first parameter to the xBestIndex() method. The second argument must be +** an index into the aConstraint[] array belonging to the sqlite3_index_info +** structure passed to xBestIndex. This function returns a pointer to a buffer +** containing the name of the collation sequence for the corresponding +** constraint. +*/ +SQLITE_API SQLITE_EXPERIMENTAL const char *sqlite3_vtab_collation(sqlite3_index_info*,int); + /* ** CAPI3REF: Conflict resolution modes ** KEYWORDS: {conflict resolution mode} @@ -9746,6 +9779,128 @@ SQLITE_API SQLITE_EXPERIMENTAL int sqlite3_snapshot_cmp( */ SQLITE_API SQLITE_EXPERIMENTAL int sqlite3_snapshot_recover(sqlite3 *db, const char *zDb); +/* +** CAPI3REF: Serialize a database +** +** The sqlite3_serialize(D,S,P,F) interface returns a pointer to memory +** that is a serialization of the S database on [database connection] D. +** If P is not a NULL pointer, then the size of the database in bytes +** is written into *P. +** +** For an ordinary on-disk database file, the serialization is just a +** copy of the disk file. For an in-memory database or a "TEMP" database, +** the serialization is the same sequence of bytes which would be written +** to disk if that database where backed up to disk. +** +** The usual case is that sqlite3_serialize() copies the serialization of +** the database into memory obtained from [sqlite3_malloc64()] and returns +** a pointer to that memory. The caller is responsible for freeing the +** returned value to avoid a memory leak. However, if the F argument +** contains the SQLITE_SERIALIZE_NOCOPY bit, then no memory allocations +** are made, and the sqlite3_serialize() function will return a pointer +** to the contiguous memory representation of the database that SQLite +** is currently using for that database, or NULL if the no such contiguous +** memory representation of the database exists. A contiguous memory +** representation of the database will usually only exist if there has +** been a prior call to [sqlite3_deserialize(D,S,...)] with the same +** values of D and S. +** The size of the database is written into *P even if the +** SQLITE_SERIALIZE_NOCOPY bit is set but no contigious copy +** of the database exists. +** +** A call to sqlite3_serialize(D,S,P,F) might return NULL even if the +** SQLITE_SERIALIZE_NOCOPY bit is omitted from argument F if a memory +** allocation error occurs. +** +** This interface is only available if SQLite is compiled with the +** [SQLITE_ENABLE_DESERIALIZE] option. +*/ +SQLITE_API unsigned char *sqlite3_serialize( + sqlite3 *db, /* The database connection */ + const char *zSchema, /* Which DB to serialize. ex: "main", "temp", ... */ + sqlite3_int64 *piSize, /* Write size of the DB here, if not NULL */ + unsigned int mFlags /* Zero or more SQLITE_SERIALIZE_* flags */ +); + +/* +** CAPI3REF: Flags for sqlite3_serialize +** +** Zero or more of the following constants can be OR-ed together for +** the F argument to [sqlite3_serialize(D,S,P,F)]. +** +** SQLITE_SERIALIZE_NOCOPY means that [sqlite3_serialize()] will return +** a pointer to contiguous in-memory database that it is currently using, +** without making a copy of the database. If SQLite is not currently using +** a contiguous in-memory database, then this option causes +** [sqlite3_serialize()] to return a NULL pointer. SQLite will only be +** using a contiguous in-memory database if it has been initialized by a +** prior call to [sqlite3_deserialize()]. +*/ +#define SQLITE_SERIALIZE_NOCOPY 0x001 /* Do no memory allocations */ + +/* +** CAPI3REF: Deserialize a database +** +** The sqlite3_deserialize(D,S,P,N,M,F) interface causes the +** [database connection] D to disconnect from database S and then +** reopen S as an in-memory database based on the serialization contained +** in P. The serialized database P is N bytes in size. M is the size of +** the buffer P, which might be larger than N. If M is larger than N, and +** the SQLITE_DESERIALIZE_READONLY bit is not set in F, then SQLite is +** permitted to add content to the in-memory database as long as the total +** size does not exceed M bytes. +** +** If the SQLITE_DESERIALIZE_FREEONCLOSE bit is set in F, then SQLite will +** invoke sqlite3_free() on the serialization buffer when the database +** connection closes. If the SQLITE_DESERIALIZE_RESIZEABLE bit is set, then +** SQLite will try to increase the buffer size using sqlite3_realloc64() +** if writes on the database cause it to grow larger than M bytes. +** +** The sqlite3_deserialize() interface will fail with SQLITE_BUSY if the +** database is currently in a read transaction or is involved in a backup +** operation. +** +** If sqlite3_deserialize(D,S,P,N,M,F) fails for any reason and if the +** SQLITE_DESERIALIZE_FREEONCLOSE bit is set in argument F, then +** [sqlite3_free()] is invoked on argument P prior to returning. +** +** This interface is only available if SQLite is compiled with the +** [SQLITE_ENABLE_DESERIALIZE] option. +*/ +SQLITE_API int sqlite3_deserialize( + sqlite3 *db, /* The database connection */ + const char *zSchema, /* Which DB to reopen with the deserialization */ + unsigned char *pData, /* The serialized database content */ + sqlite3_int64 szDb, /* Number bytes in the deserialization */ + sqlite3_int64 szBuf, /* Total size of buffer pData[] */ + unsigned mFlags /* Zero or more SQLITE_DESERIALIZE_* flags */ +); + +/* +** CAPI3REF: Flags for sqlite3_deserialize() +** +** The following are allowed values for 6th argument (the F argument) to +** the [sqlite3_deserialize(D,S,P,N,M,F)] interface. +** +** The SQLITE_DESERIALIZE_FREEONCLOSE means that the database serialization +** in the P argument is held in memory obtained from [sqlite3_malloc64()] +** and that SQLite should take ownership of this memory and automatically +** free it when it has finished using it. Without this flag, the caller +** is resposible for freeing any dynamically allocated memory. +** +** The SQLITE_DESERIALIZE_RESIZEABLE flag means that SQLite is allowed to +** grow the size of the database using calls to [sqlite3_realloc64()]. This +** flag should only be used if SQLITE_DESERIALIZE_FREEONCLOSE is also used. +** Without this flag, the deserialized database cannot increase in size beyond +** the number of bytes specified by the M parameter. +** +** The SQLITE_DESERIALIZE_READONLY flag means that the deserialized database +** should be treated as read-only. +*/ +#define SQLITE_DESERIALIZE_FREEONCLOSE 1 /* Call sqlite3_free() on close */ +#define SQLITE_DESERIALIZE_RESIZEABLE 2 /* Resize using sqlite3_realloc64() */ +#define SQLITE_DESERIALIZE_READONLY 4 /* Database is read-only */ + /* ** Undo the hack that converts floating point types to integer for ** builds on processors without floating point support. @@ -9893,16 +10048,23 @@ extern "C" { /* ** CAPI3REF: Session Object Handle +** +** An instance of this object is a [session] that can be used to +** record changes to a database. */ typedef struct sqlite3_session sqlite3_session; /* ** CAPI3REF: Changeset Iterator Handle +** +** An instance of this object acts as a cursor for iterating +** over the elements of a [changeset] or [patchset]. */ typedef struct sqlite3_changeset_iter sqlite3_changeset_iter; /* ** CAPI3REF: Create A New Session Object +** CONSTRUCTOR: sqlite3_session ** ** Create a new session object attached to database handle db. If successful, ** a pointer to the new object is written to *ppSession and SQLITE_OK is @@ -9939,6 +10101,7 @@ SQLITE_API int sqlite3session_create( /* ** CAPI3REF: Delete A Session Object +** DESTRUCTOR: sqlite3_session ** ** Delete a session object previously allocated using ** [sqlite3session_create()]. Once a session object has been deleted, the @@ -9954,6 +10117,7 @@ SQLITE_API void sqlite3session_delete(sqlite3_session *pSession); /* ** CAPI3REF: Enable Or Disable A Session Object +** METHOD: sqlite3_session ** ** Enable or disable the recording of changes by a session object. When ** enabled, a session object records changes made to the database. When @@ -9973,6 +10137,7 @@ SQLITE_API int sqlite3session_enable(sqlite3_session *pSession, int bEnable); /* ** CAPI3REF: Set Or Clear the Indirect Change Flag +** METHOD: sqlite3_session ** ** Each change recorded by a session object is marked as either direct or ** indirect. A change is marked as indirect if either: @@ -10002,6 +10167,7 @@ SQLITE_API int sqlite3session_indirect(sqlite3_session *pSession, int bIndirect) /* ** CAPI3REF: Attach A Table To A Session Object +** METHOD: sqlite3_session ** ** If argument zTab is not NULL, then it is the name of a table to attach ** to the session object passed as the first argument. All subsequent changes @@ -10027,6 +10193,35 @@ SQLITE_API int sqlite3session_indirect(sqlite3_session *pSession, int bIndirect) ** ** SQLITE_OK is returned if the call completes without error. Or, if an error ** occurs, an SQLite error code (e.g. SQLITE_NOMEM) is returned. +** +**

Special sqlite_stat1 Handling

+** +** As of SQLite version 3.22.0, the "sqlite_stat1" table is an exception to +** some of the rules above. In SQLite, the schema of sqlite_stat1 is: +**
+**        CREATE TABLE sqlite_stat1(tbl,idx,stat)  
+**  
+** +** Even though sqlite_stat1 does not have a PRIMARY KEY, changes are +** recorded for it as if the PRIMARY KEY is (tbl,idx). Additionally, changes +** are recorded for rows for which (idx IS NULL) is true. However, for such +** rows a zero-length blob (SQL value X'') is stored in the changeset or +** patchset instead of a NULL value. This allows such changesets to be +** manipulated by legacy implementations of sqlite3changeset_invert(), +** concat() and similar. +** +** The sqlite3changeset_apply() function automatically converts the +** zero-length blob back to a NULL value when updating the sqlite_stat1 +** table. However, if the application calls sqlite3changeset_new(), +** sqlite3changeset_old() or sqlite3changeset_conflict on a changeset +** iterator directly (including on a changeset iterator passed to a +** conflict-handler callback) then the X'' value is returned. The application +** must translate X'' to NULL itself if required. +** +** Legacy (older than 3.22.0) versions of the sessions module cannot capture +** changes made to the sqlite_stat1 table. Legacy versions of the +** sqlite3changeset_apply() function silently ignore any modifications to the +** sqlite_stat1 table that are part of a changeset or patchset. */ SQLITE_API int sqlite3session_attach( sqlite3_session *pSession, /* Session object */ @@ -10035,6 +10230,7 @@ SQLITE_API int sqlite3session_attach( /* ** CAPI3REF: Set a table filter on a Session Object. +** METHOD: sqlite3_session ** ** The second argument (xFilter) is the "filter callback". For changes to rows ** in tables that are not attached to the Session object, the filter is called @@ -10053,6 +10249,7 @@ SQLITE_API void sqlite3session_table_filter( /* ** CAPI3REF: Generate A Changeset From A Session Object +** METHOD: sqlite3_session ** ** Obtain a changeset containing changes to the tables attached to the ** session object passed as the first argument. If successful, @@ -10162,7 +10359,8 @@ SQLITE_API int sqlite3session_changeset( ); /* -** CAPI3REF: Load The Difference Between Tables Into A Session +** CAPI3REF: Load The Difference Between Tables Into A Session +** METHOD: sqlite3_session ** ** If it is not already attached to the session object passed as the first ** argument, this function attaches table zTbl in the same manner as the @@ -10227,6 +10425,7 @@ SQLITE_API int sqlite3session_diff( /* ** CAPI3REF: Generate A Patchset From A Session Object +** METHOD: sqlite3_session ** ** The differences between a patchset and a changeset are that: ** @@ -10278,6 +10477,7 @@ SQLITE_API int sqlite3session_isempty(sqlite3_session *pSession); /* ** CAPI3REF: Create An Iterator To Traverse A Changeset +** CONSTRUCTOR: sqlite3_changeset_iter ** ** Create an iterator used to iterate through the contents of a changeset. ** If successful, *pp is set to point to the iterator handle and SQLITE_OK @@ -10318,6 +10518,7 @@ SQLITE_API int sqlite3changeset_start( /* ** CAPI3REF: Advance A Changeset Iterator +** METHOD: sqlite3_changeset_iter ** ** This function may only be used with iterators created by function ** [sqlite3changeset_start()]. If it is called on an iterator passed to @@ -10342,6 +10543,7 @@ SQLITE_API int sqlite3changeset_next(sqlite3_changeset_iter *pIter); /* ** CAPI3REF: Obtain The Current Operation From A Changeset Iterator +** METHOD: sqlite3_changeset_iter ** ** The pIter argument passed to this function may either be an iterator ** passed to a conflict-handler by [sqlite3changeset_apply()], or an iterator @@ -10376,6 +10578,7 @@ SQLITE_API int sqlite3changeset_op( /* ** CAPI3REF: Obtain The Primary Key Definition Of A Table +** METHOD: sqlite3_changeset_iter ** ** For each modified table, a changeset includes the following: ** @@ -10407,6 +10610,7 @@ SQLITE_API int sqlite3changeset_pk( /* ** CAPI3REF: Obtain old.* Values From A Changeset Iterator +** METHOD: sqlite3_changeset_iter ** ** The pIter argument passed to this function may either be an iterator ** passed to a conflict-handler by [sqlite3changeset_apply()], or an iterator @@ -10437,6 +10641,7 @@ SQLITE_API int sqlite3changeset_old( /* ** CAPI3REF: Obtain new.* Values From A Changeset Iterator +** METHOD: sqlite3_changeset_iter ** ** The pIter argument passed to this function may either be an iterator ** passed to a conflict-handler by [sqlite3changeset_apply()], or an iterator @@ -10470,6 +10675,7 @@ SQLITE_API int sqlite3changeset_new( /* ** CAPI3REF: Obtain Conflicting Row Values From A Changeset Iterator +** METHOD: sqlite3_changeset_iter ** ** This function should only be used with iterator objects passed to a ** conflict-handler callback by [sqlite3changeset_apply()] with either @@ -10497,6 +10703,7 @@ SQLITE_API int sqlite3changeset_conflict( /* ** CAPI3REF: Determine The Number Of Foreign Key Constraint Violations +** METHOD: sqlite3_changeset_iter ** ** This function may only be called with an iterator passed to an ** SQLITE_CHANGESET_FOREIGN_KEY conflict handler callback. In this case @@ -10513,6 +10720,7 @@ SQLITE_API int sqlite3changeset_fk_conflicts( /* ** CAPI3REF: Finalize A Changeset Iterator +** METHOD: sqlite3_changeset_iter ** ** This function is used to finalize an iterator allocated with ** [sqlite3changeset_start()]. @@ -10529,6 +10737,7 @@ SQLITE_API int sqlite3changeset_fk_conflicts( ** to that error is returned by this function. Otherwise, SQLITE_OK is ** returned. This is to allow the following pattern (pseudo-code): ** +**
 **   sqlite3changeset_start();
 **   while( SQLITE_ROW==sqlite3changeset_next() ){
 **     // Do something with change.
@@ -10537,6 +10746,7 @@ SQLITE_API int sqlite3changeset_fk_conflicts(
 **   if( rc!=SQLITE_OK ){
 **     // An error has occurred 
 **   }
+** 
*/ SQLITE_API int sqlite3changeset_finalize(sqlite3_changeset_iter *pIter); @@ -10584,6 +10794,7 @@ SQLITE_API int sqlite3changeset_invert( ** sqlite3_changegroup object. Calling it produces similar results as the ** following code fragment: ** +**
 **   sqlite3_changegroup *pGrp;
 **   rc = sqlite3_changegroup_new(&pGrp);
 **   if( rc==SQLITE_OK ) rc = sqlite3changegroup_add(pGrp, nA, pA);
@@ -10594,6 +10805,7 @@ SQLITE_API int sqlite3changeset_invert(
 **     *ppOut = 0;
 **     *pnOut = 0;
 **   }
+** 
** ** Refer to the sqlite3_changegroup documentation below for details. */ @@ -10609,11 +10821,15 @@ SQLITE_API int sqlite3changeset_concat( /* ** CAPI3REF: Changegroup Handle +** +** A changegroup is an object used to combine two or more +** [changesets] or [patchsets] */ typedef struct sqlite3_changegroup sqlite3_changegroup; /* ** CAPI3REF: Create A New Changegroup Object +** CONSTRUCTOR: sqlite3_changegroup ** ** An sqlite3_changegroup object is used to combine two or more changesets ** (or patchsets) into a single changeset (or patchset). A single changegroup @@ -10651,6 +10867,7 @@ SQLITE_API int sqlite3changegroup_new(sqlite3_changegroup **pp); /* ** CAPI3REF: Add A Changeset To A Changegroup +** METHOD: sqlite3_changegroup ** ** Add all changes within the changeset (or patchset) in buffer pData (size ** nData bytes) to the changegroup. @@ -10728,6 +10945,7 @@ SQLITE_API int sqlite3changegroup_add(sqlite3_changegroup*, int nData, void *pDa /* ** CAPI3REF: Obtain A Composite Changeset From A Changegroup +** METHOD: sqlite3_changegroup ** ** Obtain a buffer containing a changeset (or patchset) representing the ** current contents of the changegroup. If the inputs to the changegroup @@ -10758,25 +10976,25 @@ SQLITE_API int sqlite3changegroup_output( /* ** CAPI3REF: Delete A Changegroup Object +** DESTRUCTOR: sqlite3_changegroup */ SQLITE_API void sqlite3changegroup_delete(sqlite3_changegroup*); /* ** CAPI3REF: Apply A Changeset To A Database ** -** Apply a changeset to a database. This function attempts to update the -** "main" database attached to handle db with the changes found in the -** changeset passed via the second and third arguments. +** Apply a changeset or patchset to a database. These functions attempt to +** update the "main" database attached to handle db with the changes found in +** the changeset passed via the second and third arguments. ** -** The fourth argument (xFilter) passed to this function is the "filter +** The fourth argument (xFilter) passed to these functions is the "filter ** callback". If it is not NULL, then for each table affected by at least one ** change in the changeset, the filter callback is invoked with ** the table name as the second argument, and a copy of the context pointer -** passed as the sixth argument to this function as the first. If the "filter -** callback" returns zero, then no attempt is made to apply any changes to -** the table. Otherwise, if the return value is non-zero or the xFilter -** argument to this function is NULL, all changes related to the table are -** attempted. +** passed as the sixth argument as the first. If the "filter callback" +** returns zero, then no attempt is made to apply any changes to the table. +** Otherwise, if the return value is non-zero or the xFilter argument to +** is NULL, all changes related to the table are attempted. ** ** For each table that is not excluded by the filter callback, this function ** tests that the target database contains a compatible table. A table is @@ -10821,7 +11039,7 @@ SQLITE_API void sqlite3changegroup_delete(sqlite3_changegroup*); ** **
**
DELETE Changes
-** For each DELETE change, this function checks if the target database +** For each DELETE change, the function checks if the target database ** contains a row with the same primary key value (or values) as the ** original row values stored in the changeset. If it does, and the values ** stored in all non-primary key columns also match the values stored in @@ -10866,7 +11084,7 @@ SQLITE_API void sqlite3changegroup_delete(sqlite3_changegroup*); ** [SQLITE_CHANGESET_REPLACE]. ** **
UPDATE Changes
-** For each UPDATE change, this function checks if the target database +** For each UPDATE change, the function checks if the target database ** contains a row with the same primary key value (or values) as the ** original row values stored in the changeset. If it does, and the values ** stored in all modified non-primary key columns also match the values @@ -10897,11 +11115,28 @@ SQLITE_API void sqlite3changegroup_delete(sqlite3_changegroup*); ** This can be used to further customize the applications conflict ** resolution strategy. ** -** All changes made by this function are enclosed in a savepoint transaction. +** All changes made by these functions are enclosed in a savepoint transaction. ** If any other error (aside from a constraint failure when attempting to ** write to the target database) occurs, then the savepoint transaction is ** rolled back, restoring the target database to its original state, and an ** SQLite error code returned. +** +** If the output parameters (ppRebase) and (pnRebase) are non-NULL and +** the input is a changeset (not a patchset), then sqlite3changeset_apply_v2() +** may set (*ppRebase) to point to a "rebase" that may be used with the +** sqlite3_rebaser APIs buffer before returning. In this case (*pnRebase) +** is set to the size of the buffer in bytes. It is the responsibility of the +** caller to eventually free any such buffer using sqlite3_free(). The buffer +** is only allocated and populated if one or more conflicts were encountered +** while applying the patchset. See comments surrounding the sqlite3_rebaser +** APIs for further details. +** +** The behavior of sqlite3changeset_apply_v2() and its streaming equivalent +** may be modified by passing a combination of +** [SQLITE_CHANGESETAPPLY_NOSAVEPOINT | supported flags] as the 9th parameter. +** +** Note that the sqlite3changeset_apply_v2() API is still experimental +** and therefore subject to change. */ SQLITE_API int sqlite3changeset_apply( sqlite3 *db, /* Apply change to "main" db of this handle */ @@ -10918,6 +11153,41 @@ SQLITE_API int sqlite3changeset_apply( ), void *pCtx /* First argument passed to xConflict */ ); +SQLITE_API int sqlite3changeset_apply_v2( + sqlite3 *db, /* Apply change to "main" db of this handle */ + int nChangeset, /* Size of changeset in bytes */ + void *pChangeset, /* Changeset blob */ + int(*xFilter)( + void *pCtx, /* Copy of sixth arg to _apply() */ + const char *zTab /* Table name */ + ), + int(*xConflict)( + void *pCtx, /* Copy of sixth arg to _apply() */ + int eConflict, /* DATA, MISSING, CONFLICT, CONSTRAINT */ + sqlite3_changeset_iter *p /* Handle describing change and conflict */ + ), + void *pCtx, /* First argument passed to xConflict */ + void **ppRebase, int *pnRebase, /* OUT: Rebase data */ + int flags /* Combination of SESSION_APPLY_* flags */ +); + +/* +** CAPI3REF: Flags for sqlite3changeset_apply_v2 +** +** The following flags may passed via the 9th parameter to +** [sqlite3changeset_apply_v2] and [sqlite3changeset_apply_v2_strm]: +** +**
+**
SQLITE_CHANGESETAPPLY_NOSAVEPOINT
+** Usually, the sessions module encloses all operations performed by +** a single call to apply_v2() or apply_v2_strm() in a [SAVEPOINT]. The +** SAVEPOINT is committed if the changeset or patchset is successfully +** applied, or rolled back if an error occurs. Specifying this flag +** causes the sessions module to omit this savepoint. In this case, if the +** caller has an open transaction or savepoint when apply_v2() is called, +** it may revert the partially applied changeset by rolling it back. +*/ +#define SQLITE_CHANGESETAPPLY_NOSAVEPOINT 0x0001 /* ** CAPI3REF: Constants Passed To The Conflict Handler @@ -11015,6 +11285,161 @@ SQLITE_API int sqlite3changeset_apply( #define SQLITE_CHANGESET_REPLACE 1 #define SQLITE_CHANGESET_ABORT 2 +/* +** CAPI3REF: Rebasing changesets +** EXPERIMENTAL +** +** Suppose there is a site hosting a database in state S0. And that +** modifications are made that move that database to state S1 and a +** changeset recorded (the "local" changeset). Then, a changeset based +** on S0 is received from another site (the "remote" changeset) and +** applied to the database. The database is then in state +** (S1+"remote"), where the exact state depends on any conflict +** resolution decisions (OMIT or REPLACE) made while applying "remote". +** Rebasing a changeset is to update it to take those conflict +** resolution decisions into account, so that the same conflicts +** do not have to be resolved elsewhere in the network. +** +** For example, if both the local and remote changesets contain an +** INSERT of the same key on "CREATE TABLE t1(a PRIMARY KEY, b)": +** +** local: INSERT INTO t1 VALUES(1, 'v1'); +** remote: INSERT INTO t1 VALUES(1, 'v2'); +** +** and the conflict resolution is REPLACE, then the INSERT change is +** removed from the local changeset (it was overridden). Or, if the +** conflict resolution was "OMIT", then the local changeset is modified +** to instead contain: +** +** UPDATE t1 SET b = 'v2' WHERE a=1; +** +** Changes within the local changeset are rebased as follows: +** +**
+**
Local INSERT
+** This may only conflict with a remote INSERT. If the conflict +** resolution was OMIT, then add an UPDATE change to the rebased +** changeset. Or, if the conflict resolution was REPLACE, add +** nothing to the rebased changeset. +** +**
Local DELETE
+** This may conflict with a remote UPDATE or DELETE. In both cases the +** only possible resolution is OMIT. If the remote operation was a +** DELETE, then add no change to the rebased changeset. If the remote +** operation was an UPDATE, then the old.* fields of change are updated +** to reflect the new.* values in the UPDATE. +** +**
Local UPDATE
+** This may conflict with a remote UPDATE or DELETE. If it conflicts +** with a DELETE, and the conflict resolution was OMIT, then the update +** is changed into an INSERT. Any undefined values in the new.* record +** from the update change are filled in using the old.* values from +** the conflicting DELETE. Or, if the conflict resolution was REPLACE, +** the UPDATE change is simply omitted from the rebased changeset. +** +** If conflict is with a remote UPDATE and the resolution is OMIT, then +** the old.* values are rebased using the new.* values in the remote +** change. Or, if the resolution is REPLACE, then the change is copied +** into the rebased changeset with updates to columns also updated by +** the conflicting remote UPDATE removed. If this means no columns would +** be updated, the change is omitted. +**
+** +** A local change may be rebased against multiple remote changes +** simultaneously. If a single key is modified by multiple remote +** changesets, they are combined as follows before the local changeset +** is rebased: +** +**
    +**
  • If there has been one or more REPLACE resolutions on a +** key, it is rebased according to a REPLACE. +** +**
  • If there have been no REPLACE resolutions on a key, then +** the local changeset is rebased according to the most recent +** of the OMIT resolutions. +**
+** +** Note that conflict resolutions from multiple remote changesets are +** combined on a per-field basis, not per-row. This means that in the +** case of multiple remote UPDATE operations, some fields of a single +** local change may be rebased for REPLACE while others are rebased for +** OMIT. +** +** In order to rebase a local changeset, the remote changeset must first +** be applied to the local database using sqlite3changeset_apply_v2() and +** the buffer of rebase information captured. Then: +** +**
    +**
  1. An sqlite3_rebaser object is created by calling +** sqlite3rebaser_create(). +**
  2. The new object is configured with the rebase buffer obtained from +** sqlite3changeset_apply_v2() by calling sqlite3rebaser_configure(). +** If the local changeset is to be rebased against multiple remote +** changesets, then sqlite3rebaser_configure() should be called +** multiple times, in the same order that the multiple +** sqlite3changeset_apply_v2() calls were made. +**
  3. Each local changeset is rebased by calling sqlite3rebaser_rebase(). +**
  4. The sqlite3_rebaser object is deleted by calling +** sqlite3rebaser_delete(). +**
+*/ +typedef struct sqlite3_rebaser sqlite3_rebaser; + +/* +** CAPI3REF: Create a changeset rebaser object. +** EXPERIMENTAL +** +** Allocate a new changeset rebaser object. If successful, set (*ppNew) to +** point to the new object and return SQLITE_OK. Otherwise, if an error +** occurs, return an SQLite error code (e.g. SQLITE_NOMEM) and set (*ppNew) +** to NULL. +*/ +SQLITE_API int sqlite3rebaser_create(sqlite3_rebaser **ppNew); + +/* +** CAPI3REF: Configure a changeset rebaser object. +** EXPERIMENTAL +** +** Configure the changeset rebaser object to rebase changesets according +** to the conflict resolutions described by buffer pRebase (size nRebase +** bytes), which must have been obtained from a previous call to +** sqlite3changeset_apply_v2(). +*/ +SQLITE_API int sqlite3rebaser_configure( + sqlite3_rebaser*, + int nRebase, const void *pRebase +); + +/* +** CAPI3REF: Rebase a changeset +** EXPERIMENTAL +** +** Argument pIn must point to a buffer containing a changeset nIn bytes +** in size. This function allocates and populates a buffer with a copy +** of the changeset rebased rebased according to the configuration of the +** rebaser object passed as the first argument. If successful, (*ppOut) +** is set to point to the new buffer containing the rebased changset and +** (*pnOut) to its size in bytes and SQLITE_OK returned. It is the +** responsibility of the caller to eventually free the new buffer using +** sqlite3_free(). Otherwise, if an error occurs, (*ppOut) and (*pnOut) +** are set to zero and an SQLite error code returned. +*/ +SQLITE_API int sqlite3rebaser_rebase( + sqlite3_rebaser*, + int nIn, const void *pIn, + int *pnOut, void **ppOut +); + +/* +** CAPI3REF: Delete a changeset rebaser object. +** EXPERIMENTAL +** +** Delete the changeset rebaser object and all associated resources. There +** should be one call to this function for each successful invocation +** of sqlite3rebaser_create(). +*/ +SQLITE_API void sqlite3rebaser_delete(sqlite3_rebaser *p); + /* ** CAPI3REF: Streaming Versions of API functions. ** @@ -11024,6 +11449,7 @@ SQLITE_API int sqlite3changeset_apply( ** ** **
Streaming functionNon-streaming equivalent
sqlite3changeset_apply_strm[sqlite3changeset_apply] +**
sqlite3changeset_apply_strm_v2[sqlite3changeset_apply_v2] **
sqlite3changeset_concat_strm[sqlite3changeset_concat] **
sqlite3changeset_invert_strm[sqlite3changeset_invert] **
sqlite3changeset_start_strm[sqlite3changeset_start] @@ -11119,6 +11545,23 @@ SQLITE_API int sqlite3changeset_apply_strm( ), void *pCtx /* First argument passed to xConflict */ ); +SQLITE_API int sqlite3changeset_apply_v2_strm( + sqlite3 *db, /* Apply change to "main" db of this handle */ + int (*xInput)(void *pIn, void *pData, int *pnData), /* Input function */ + void *pIn, /* First arg for xInput */ + int(*xFilter)( + void *pCtx, /* Copy of sixth arg to _apply() */ + const char *zTab /* Table name */ + ), + int(*xConflict)( + void *pCtx, /* Copy of sixth arg to _apply() */ + int eConflict, /* DATA, MISSING, CONFLICT, CONSTRAINT */ + sqlite3_changeset_iter *p /* Handle describing change and conflict */ + ), + void *pCtx, /* First argument passed to xConflict */ + void **ppRebase, int *pnRebase, + int flags +); SQLITE_API int sqlite3changeset_concat_strm( int (*xInputA)(void *pIn, void *pData, int *pnData), void *pInA, @@ -11156,6 +11599,13 @@ SQLITE_API int sqlite3changegroup_output_strm(sqlite3_changegroup*, int (*xOutput)(void *pOut, const void *pData, int nData), void *pOut ); +SQLITE_API int sqlite3rebaser_rebase_strm( + sqlite3_rebaser *pRebaser, + int (*xInput)(void *pIn, void *pData, int *pnData), + void *pIn, + int (*xOutput)(void *pOut, const void *pData, int nData), + void *pOut +); /* @@ -12573,23 +13023,25 @@ SQLITE_PRIVATE void sqlite3HashClear(Hash*); #define TK_INDEX 140 #define TK_ALTER 141 #define TK_ADD 142 -#define TK_ISNOT 143 -#define TK_FUNCTION 144 -#define TK_COLUMN 145 -#define TK_AGG_FUNCTION 146 -#define TK_AGG_COLUMN 147 -#define TK_UMINUS 148 -#define TK_UPLUS 149 -#define TK_REGISTER 150 -#define TK_VECTOR 151 -#define TK_SELECT_COLUMN 152 -#define TK_IF_NULL_ROW 153 -#define TK_ASTERISK 154 -#define TK_SPAN 155 -#define TK_END_OF_FILE 156 -#define TK_UNCLOSED_STRING 157 -#define TK_SPACE 158 -#define TK_ILLEGAL 159 +#define TK_TRUEFALSE 143 +#define TK_ISNOT 144 +#define TK_FUNCTION 145 +#define TK_COLUMN 146 +#define TK_AGG_FUNCTION 147 +#define TK_AGG_COLUMN 148 +#define TK_UMINUS 149 +#define TK_UPLUS 150 +#define TK_TRUTH 151 +#define TK_REGISTER 152 +#define TK_VECTOR 153 +#define TK_SELECT_COLUMN 154 +#define TK_IF_NULL_ROW 155 +#define TK_ASTERISK 156 +#define TK_SPAN 157 +#define TK_END_OF_FILE 158 +#define TK_UNCLOSED_STRING 159 +#define TK_SPACE 160 +#define TK_ILLEGAL 161 /* The token codes above must all fit in 8 bits */ #define TKFLG_MASK 0xff @@ -13033,9 +13485,10 @@ typedef INT16_TYPE LogEst; */ typedef struct BusyHandler BusyHandler; struct BusyHandler { - int (*xFunc)(void *,int); /* The busy callback */ - void *pArg; /* First arg to busy callback */ - int nBusy; /* Incremented with each busy call */ + int (*xBusyHandler)(void *,int); /* The busy callback */ + void *pBusyArg; /* First arg to busy callback */ + int nBusy; /* Incremented with each busy call */ + u8 bExtraFileArg; /* Include sqlite3_file as callback arg */ }; /* @@ -13135,7 +13588,6 @@ typedef struct Db Db; typedef struct Schema Schema; typedef struct Expr Expr; typedef struct ExprList ExprList; -typedef struct ExprSpan ExprSpan; typedef struct FKey FKey; typedef struct FuncDestructor FuncDestructor; typedef struct FuncDef FuncDef; @@ -13481,6 +13933,9 @@ SQLITE_PRIVATE int sqlite3BtreeNext(BtCursor*, int flags); SQLITE_PRIVATE int sqlite3BtreeEof(BtCursor*); SQLITE_PRIVATE int sqlite3BtreePrevious(BtCursor*, int flags); SQLITE_PRIVATE i64 sqlite3BtreeIntegerKey(BtCursor*); +#ifdef SQLITE_ENABLE_OFFSET_SQL_FUNC +SQLITE_PRIVATE i64 sqlite3BtreeOffset(BtCursor*); +#endif SQLITE_PRIVATE int sqlite3BtreePayload(BtCursor*, u32 offset, u32 amt, void*); SQLITE_PRIVATE const void *sqlite3BtreePayloadFetch(BtCursor*, u32 *pAmt); SQLITE_PRIVATE u32 sqlite3BtreePayloadSize(BtCursor*); @@ -13694,6 +14149,7 @@ typedef struct VdbeOpList VdbeOpList; #define P4_INT64 (-14) /* P4 is a 64-bit signed integer */ #define P4_INTARRAY (-15) /* P4 is a vector of 32-bit integers */ #define P4_FUNCCTX (-16) /* P4 is a pointer to an sqlite3_context object */ +#define P4_DYNBLOB (-17) /* Pointer to memory from sqliteMalloc() */ /* Error message codes for OP_Halt */ #define P5_ConstraintNotNull 1 @@ -13832,78 +14288,81 @@ typedef struct VdbeOpList VdbeOpList; #define OP_Concat 93 /* same as TK_CONCAT, synopsis: r[P3]=r[P2]+r[P1] */ #define OP_Compare 94 /* synopsis: r[P1@P3] <-> r[P2@P3] */ #define OP_BitNot 95 /* same as TK_BITNOT, synopsis: r[P1]= ~r[P1] */ -#define OP_Column 96 /* synopsis: r[P3]=PX */ +#define OP_IsTrue 96 /* synopsis: r[P2] = coalesce(r[P1]==TRUE,P3) ^ P4 */ #define OP_String8 97 /* same as TK_STRING, synopsis: r[P2]='P4' */ -#define OP_Affinity 98 /* synopsis: affinity(r[P1@P2]) */ -#define OP_MakeRecord 99 /* synopsis: r[P3]=mkrec(r[P1@P2]) */ -#define OP_Count 100 /* synopsis: r[P2]=count() */ -#define OP_ReadCookie 101 -#define OP_SetCookie 102 -#define OP_ReopenIdx 103 /* synopsis: root=P2 iDb=P3 */ -#define OP_OpenRead 104 /* synopsis: root=P2 iDb=P3 */ -#define OP_OpenWrite 105 /* synopsis: root=P2 iDb=P3 */ -#define OP_OpenDup 106 -#define OP_OpenAutoindex 107 /* synopsis: nColumn=P2 */ -#define OP_OpenEphemeral 108 /* synopsis: nColumn=P2 */ -#define OP_SorterOpen 109 -#define OP_SequenceTest 110 /* synopsis: if( cursor[P1].ctr++ ) pc = P2 */ -#define OP_OpenPseudo 111 /* synopsis: P3 columns in r[P2] */ -#define OP_Close 112 -#define OP_ColumnsUsed 113 -#define OP_Sequence 114 /* synopsis: r[P2]=cursor[P1].ctr++ */ -#define OP_NewRowid 115 /* synopsis: r[P2]=rowid */ -#define OP_Insert 116 /* synopsis: intkey=r[P3] data=r[P2] */ -#define OP_InsertInt 117 /* synopsis: intkey=P3 data=r[P2] */ -#define OP_Delete 118 -#define OP_ResetCount 119 -#define OP_SorterCompare 120 /* synopsis: if key(P1)!=trim(r[P3],P4) goto P2 */ -#define OP_SorterData 121 /* synopsis: r[P2]=data */ -#define OP_RowData 122 /* synopsis: r[P2]=data */ -#define OP_Rowid 123 /* synopsis: r[P2]=rowid */ -#define OP_NullRow 124 -#define OP_SeekEnd 125 -#define OP_SorterInsert 126 /* synopsis: key=r[P2] */ -#define OP_IdxInsert 127 /* synopsis: key=r[P2] */ -#define OP_IdxDelete 128 /* synopsis: key=r[P2@P3] */ -#define OP_DeferredSeek 129 /* synopsis: Move P3 to P1.rowid if needed */ -#define OP_IdxRowid 130 /* synopsis: r[P2]=rowid */ -#define OP_Destroy 131 +#define OP_Offset 98 /* synopsis: r[P3] = sqlite_offset(P1) */ +#define OP_Column 99 /* synopsis: r[P3]=PX */ +#define OP_Affinity 100 /* synopsis: affinity(r[P1@P2]) */ +#define OP_MakeRecord 101 /* synopsis: r[P3]=mkrec(r[P1@P2]) */ +#define OP_Count 102 /* synopsis: r[P2]=count() */ +#define OP_ReadCookie 103 +#define OP_SetCookie 104 +#define OP_ReopenIdx 105 /* synopsis: root=P2 iDb=P3 */ +#define OP_OpenRead 106 /* synopsis: root=P2 iDb=P3 */ +#define OP_OpenWrite 107 /* synopsis: root=P2 iDb=P3 */ +#define OP_OpenDup 108 +#define OP_OpenAutoindex 109 /* synopsis: nColumn=P2 */ +#define OP_OpenEphemeral 110 /* synopsis: nColumn=P2 */ +#define OP_SorterOpen 111 +#define OP_SequenceTest 112 /* synopsis: if( cursor[P1].ctr++ ) pc = P2 */ +#define OP_OpenPseudo 113 /* synopsis: P3 columns in r[P2] */ +#define OP_Close 114 +#define OP_ColumnsUsed 115 +#define OP_Sequence 116 /* synopsis: r[P2]=cursor[P1].ctr++ */ +#define OP_NewRowid 117 /* synopsis: r[P2]=rowid */ +#define OP_Insert 118 /* synopsis: intkey=r[P3] data=r[P2] */ +#define OP_InsertInt 119 /* synopsis: intkey=P3 data=r[P2] */ +#define OP_Delete 120 +#define OP_ResetCount 121 +#define OP_SorterCompare 122 /* synopsis: if key(P1)!=trim(r[P3],P4) goto P2 */ +#define OP_SorterData 123 /* synopsis: r[P2]=data */ +#define OP_RowData 124 /* synopsis: r[P2]=data */ +#define OP_Rowid 125 /* synopsis: r[P2]=rowid */ +#define OP_NullRow 126 +#define OP_SeekEnd 127 +#define OP_SorterInsert 128 /* synopsis: key=r[P2] */ +#define OP_IdxInsert 129 /* synopsis: key=r[P2] */ +#define OP_IdxDelete 130 /* synopsis: key=r[P2@P3] */ +#define OP_DeferredSeek 131 /* synopsis: Move P3 to P1.rowid if needed */ #define OP_Real 132 /* same as TK_FLOAT, synopsis: r[P2]=P4 */ -#define OP_Clear 133 -#define OP_ResetSorter 134 -#define OP_CreateBtree 135 /* synopsis: r[P2]=root iDb=P1 flags=P3 */ -#define OP_SqlExec 136 -#define OP_ParseSchema 137 -#define OP_LoadAnalysis 138 -#define OP_DropTable 139 -#define OP_DropIndex 140 -#define OP_DropTrigger 141 -#define OP_IntegrityCk 142 -#define OP_RowSetAdd 143 /* synopsis: rowset(P1)=r[P2] */ -#define OP_Param 144 -#define OP_FkCounter 145 /* synopsis: fkctr[P1]+=P2 */ -#define OP_MemMax 146 /* synopsis: r[P1]=max(r[P1],r[P2]) */ -#define OP_OffsetLimit 147 /* synopsis: if r[P1]>0 then r[P2]=r[P1]+max(0,r[P3]) else r[P2]=(-1) */ -#define OP_AggStep0 148 /* synopsis: accum=r[P3] step(r[P2@P5]) */ -#define OP_AggStep 149 /* synopsis: accum=r[P3] step(r[P2@P5]) */ -#define OP_AggFinal 150 /* synopsis: accum=r[P1] N=P2 */ -#define OP_Expire 151 -#define OP_TableLock 152 /* synopsis: iDb=P1 root=P2 write=P3 */ -#define OP_VBegin 153 -#define OP_VCreate 154 -#define OP_VDestroy 155 -#define OP_VOpen 156 -#define OP_VColumn 157 /* synopsis: r[P3]=vcolumn(P2) */ -#define OP_VRename 158 -#define OP_Pagecount 159 -#define OP_MaxPgcnt 160 -#define OP_PureFunc0 161 -#define OP_Function0 162 /* synopsis: r[P3]=func(r[P2@P5]) */ -#define OP_PureFunc 163 -#define OP_Function 164 /* synopsis: r[P3]=func(r[P2@P5]) */ -#define OP_CursorHint 165 -#define OP_Noop 166 -#define OP_Explain 167 +#define OP_IdxRowid 133 /* synopsis: r[P2]=rowid */ +#define OP_Destroy 134 +#define OP_Clear 135 +#define OP_ResetSorter 136 +#define OP_CreateBtree 137 /* synopsis: r[P2]=root iDb=P1 flags=P3 */ +#define OP_SqlExec 138 +#define OP_ParseSchema 139 +#define OP_LoadAnalysis 140 +#define OP_DropTable 141 +#define OP_DropIndex 142 +#define OP_DropTrigger 143 +#define OP_IntegrityCk 144 +#define OP_RowSetAdd 145 /* synopsis: rowset(P1)=r[P2] */ +#define OP_Param 146 +#define OP_FkCounter 147 /* synopsis: fkctr[P1]+=P2 */ +#define OP_MemMax 148 /* synopsis: r[P1]=max(r[P1],r[P2]) */ +#define OP_OffsetLimit 149 /* synopsis: if r[P1]>0 then r[P2]=r[P1]+max(0,r[P3]) else r[P2]=(-1) */ +#define OP_AggStep0 150 /* synopsis: accum=r[P3] step(r[P2@P5]) */ +#define OP_AggStep 151 /* synopsis: accum=r[P3] step(r[P2@P5]) */ +#define OP_AggFinal 152 /* synopsis: accum=r[P1] N=P2 */ +#define OP_Expire 153 +#define OP_TableLock 154 /* synopsis: iDb=P1 root=P2 write=P3 */ +#define OP_VBegin 155 +#define OP_VCreate 156 +#define OP_VDestroy 157 +#define OP_VOpen 158 +#define OP_VColumn 159 /* synopsis: r[P3]=vcolumn(P2) */ +#define OP_VRename 160 +#define OP_Pagecount 161 +#define OP_MaxPgcnt 162 +#define OP_PureFunc0 163 +#define OP_Function0 164 /* synopsis: r[P3]=func(r[P2@P5]) */ +#define OP_PureFunc 165 +#define OP_Function 166 /* synopsis: r[P3]=func(r[P2@P5]) */ +#define OP_Trace 167 +#define OP_CursorHint 168 +#define OP_Noop 169 +#define OP_Explain 170 /* Properties such as "out2" or "jump" that are specified in ** comments following the "case" for each opcode in the vdbe.c @@ -13928,16 +14387,16 @@ typedef struct VdbeOpList VdbeOpList; /* 72 */ 0x10, 0x10, 0x00, 0x00, 0x10, 0x10, 0x00, 0x00,\ /* 80 */ 0x02, 0x02, 0x02, 0x00, 0x26, 0x26, 0x26, 0x26,\ /* 88 */ 0x26, 0x26, 0x26, 0x26, 0x26, 0x26, 0x00, 0x12,\ -/* 96 */ 0x00, 0x10, 0x00, 0x00, 0x10, 0x10, 0x00, 0x00,\ +/* 96 */ 0x12, 0x10, 0x20, 0x00, 0x00, 0x00, 0x10, 0x10,\ /* 104 */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,\ -/* 112 */ 0x00, 0x00, 0x10, 0x10, 0x00, 0x00, 0x00, 0x00,\ -/* 120 */ 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x04, 0x04,\ -/* 128 */ 0x00, 0x00, 0x10, 0x10, 0x10, 0x00, 0x00, 0x10,\ -/* 136 */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x06,\ -/* 144 */ 0x10, 0x00, 0x04, 0x1a, 0x00, 0x00, 0x00, 0x00,\ -/* 152 */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10,\ -/* 160 */ 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,\ -} +/* 112 */ 0x00, 0x00, 0x00, 0x00, 0x10, 0x10, 0x00, 0x00,\ +/* 120 */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00,\ +/* 128 */ 0x04, 0x04, 0x00, 0x00, 0x10, 0x10, 0x10, 0x00,\ +/* 136 */ 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,\ +/* 144 */ 0x00, 0x06, 0x10, 0x00, 0x04, 0x1a, 0x00, 0x00,\ +/* 152 */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,\ +/* 160 */ 0x00, 0x10, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00,\ +/* 168 */ 0x00, 0x00, 0x00,} /* The sqlite3P2Values() routine is able to run faster if it knows ** the value of the largest JUMP opcode. The smaller the maximum @@ -14238,7 +14697,7 @@ SQLITE_PRIVATE int sqlite3PagerClose(Pager *pPager, sqlite3*); SQLITE_PRIVATE int sqlite3PagerReadFileheader(Pager*, int, unsigned char*); /* Functions used to configure a Pager object. */ -SQLITE_PRIVATE void sqlite3PagerSetBusyhandler(Pager*, int(*)(void *), void *); +SQLITE_PRIVATE void sqlite3PagerSetBusyHandler(Pager*, int(*)(void *), void *); SQLITE_PRIVATE int sqlite3PagerSetPagesize(Pager*, u32*, int); #ifdef SQLITE_HAS_CODEC SQLITE_PRIVATE void sqlite3PagerAlignReserve(Pager*,Pager*); @@ -14324,6 +14783,11 @@ SQLITE_PRIVATE int sqlite3PagerIsMemdb(Pager*); SQLITE_PRIVATE void sqlite3PagerCacheStat(Pager *, int, int, int *); SQLITE_PRIVATE void sqlite3PagerClearCache(Pager*); SQLITE_PRIVATE int sqlite3SectorSize(sqlite3_file *); +#ifdef SQLITE_ENABLE_SETLK_TIMEOUT +SQLITE_PRIVATE void sqlite3PagerResetLockTimeout(Pager *pPager); +#else +# define sqlite3PagerResetLockTimeout(X) +#endif /* Functions used to truncate the database file. */ SQLITE_PRIVATE void sqlite3PagerTruncateImage(Pager*,Pgno); @@ -15143,8 +15607,9 @@ struct sqlite3 { int newTnum; /* Rootpage of table being initialized */ u8 iDb; /* Which db file is being initialized */ u8 busy; /* TRUE if currently initializing */ - u8 orphanTrigger; /* Last statement is orphaned TEMP trigger */ - u8 imposterTable; /* Building an imposter table */ + unsigned orphanTrigger : 1; /* Last statement is orphaned TEMP trigger */ + unsigned imposterTable : 1; /* Building an imposter table */ + unsigned reopenMemdb : 1; /* ATTACH is really a reopen using MemDB */ } init; int nVdbeActive; /* Number of VDBEs currently running */ int nVdbeRead; /* Number of active VDBEs that read or write */ @@ -15197,7 +15662,7 @@ struct sqlite3 { Hash aModule; /* populated by sqlite3_create_module() */ VtabCtx *pVtabCtx; /* Context for active vtab connect/create */ VTable **aVTrans; /* Virtual tables with open transactions */ - VTable *pDisconnect; /* Disconnect these in next sqlite3_prepare() */ + VTable *pDisconnect; /* Disconnect these in next sqlite3_prepare() */ #endif Hash aFunc; /* Hash table of connection functions */ Hash aCollSeq; /* All collating sequences */ @@ -15272,7 +15737,9 @@ struct sqlite3 { #define SQLITE_QueryOnly 0x00100000 /* Disable database changes */ #define SQLITE_CellSizeCk 0x00200000 /* Check btree cell sizes on load */ #define SQLITE_Fts3Tokenizer 0x00400000 /* Enable fts3_tokenizer(2) */ -#define SQLITE_EnableQPSG 0x00800000 /* Query Planner Stability Guarantee */ +#define SQLITE_EnableQPSG 0x00800000 /* Query Planner Stability Guarantee*/ +#define SQLITE_TriggerEQP 0x01000000 /* Show trigger EXPLAIN QUERY PLAN */ + /* Flags used only if debugging */ #ifdef SQLITE_DEBUG #define SQLITE_SqlTrace 0x08000000 /* Debug print SQL as it executes */ @@ -15307,6 +15774,8 @@ struct sqlite3 { #define SQLITE_CursorHints 0x0400 /* Add OP_CursorHint opcodes */ #define SQLITE_Stat34 0x0800 /* Use STAT3 or STAT4 data */ /* TH3 expects the Stat34 ^^^^^^ value to be 0x0800. Don't change it */ +#define SQLITE_PushDown 0x1000 /* The push-down optimization */ +#define SQLITE_SimplifyJoin 0x2000 /* Convert LEFT JOIN to JOIN */ #define SQLITE_AllOpts 0xffff /* All optimizations */ /* @@ -15405,6 +15874,7 @@ struct FuncDestructor { #define SQLITE_FUNC_SLOCHNG 0x2000 /* "Slow Change". Value constant during a ** single query - might change over time */ #define SQLITE_FUNC_AFFINITY 0x4000 /* Built-in affinity() function */ +#define SQLITE_FUNC_OFFSET 0x8000 /* Built-in sqlite_offset() function */ /* ** The following three macros, FUNCTION(), LIKEFUNC() and AGGREGATE() are @@ -15529,6 +15999,7 @@ struct Column { #define COLFLAG_PRIMKEY 0x0001 /* Column is part of the primary key */ #define COLFLAG_HIDDEN 0x0002 /* A hidden column in a virtual table */ #define COLFLAG_HASTYPE 0x0004 /* Type name follows column name */ +#define COLFLAG_UNIQUE 0x0008 /* Column def contains "UNIQUE" or "PK" */ /* ** A "Collating Sequence" is defined by an instance of the following @@ -15949,6 +16420,7 @@ struct Index { unsigned isCovering:1; /* True if this is a covering index */ unsigned noSkipScan:1; /* Do not try to use skip-scan if true */ unsigned hasStat1:1; /* aiRowLogEst values come from sqlite_stat1 */ + unsigned bNoQuery:1; /* Do not use this index to optimize queries */ #ifdef SQLITE_ENABLE_STAT3_OR_STAT4 int nSample; /* Number of elements in aSample[] */ int nSampleCol; /* Size of IndexSample.anEq[] and so on */ @@ -16179,7 +16651,7 @@ struct Expr { */ #define EP_FromJoin 0x000001 /* Originates in ON/USING clause of outer join */ #define EP_Agg 0x000002 /* Contains one or more aggregate functions */ - /* 0x000004 // available for use */ +#define EP_HasFunc 0x000004 /* Contains one or more functions of any kind */ /* 0x000008 // available for use */ #define EP_Distinct 0x000010 /* Aggregate function with DISTINCT keyword */ #define EP_VarSelect 0x000020 /* pSelect is correlated, not constant */ @@ -16203,9 +16675,10 @@ struct Expr { #define EP_Leaf 0x800000 /* Expr.pLeft, .pRight, .u.pSelect all NULL */ /* -** Combinations of two or more EP_* flags +** The EP_Propagate mask is a set of properties that automatically propagate +** upwards into parent nodes. */ -#define EP_Propagate (EP_Collate|EP_Subquery) /* Propagate these bits up tree */ +#define EP_Propagate (EP_Collate|EP_Subquery|EP_HasFunc) /* ** These macros can be used to test, set, or clear bits in the @@ -16277,17 +16750,6 @@ struct ExprList { } a[1]; /* One slot for each expression in the list */ }; -/* -** An instance of this structure is used by the parser to record both -** the parse tree for an expression and the span of input text for an -** expression. -*/ -struct ExprSpan { - Expr *pExpr; /* The expression parse tree */ - const char *zStart; /* First character of input text */ - const char *zEnd; /* One character past the end of input text */ -}; - /* ** An instance of this structure can hold a simple list of identifiers, ** such as the list "a,b,c" in the following statements: @@ -16485,6 +16947,7 @@ struct NameContext { #define NC_IdxExpr 0x0020 /* True if resolving columns of CREATE INDEX */ #define NC_VarSelect 0x0040 /* A correlated subquery has been seen */ #define NC_MinMaxAgg 0x1000 /* min/max aggregates seen. See note above */ +#define NC_Complex 0x2000 /* True if a function or subquery seen */ /* ** An instance of the following structure contains all information @@ -16524,7 +16987,6 @@ struct Select { Select *pPrior; /* Prior select in a compound select statement */ Select *pNext; /* Next select to the left in a compound */ Expr *pLimit; /* LIMIT expression. NULL means not used. */ - Expr *pOffset; /* OFFSET expression. NULL means not used. */ With *pWith; /* WITH clause attached to this select. Or NULL. */ }; @@ -16555,6 +17017,7 @@ struct Select { #define SF_MaybeConvert 0x08000 /* Need convertCompoundSelectToSubquery() */ #define SF_Converted 0x10000 /* By convertCompoundSelectToSubquery() */ #define SF_IncludeHidden 0x20000 /* Include hidden columns in output */ +#define SF_ComplexResult 0x40000 /* Result set contains subquery or function */ /* @@ -16759,7 +17222,7 @@ struct Parse { int nMem; /* Number of memory cells used so far */ int nOpAlloc; /* Number of slots allocated for Vdbe.aOp[] */ int szOpAlloc; /* Bytes of memory space allocated for Vdbe.aOp[] */ - int iSelfTab; /* Table for associated with an index on expr, or negative + int iSelfTab; /* Table associated with an index on expr, or negative ** of the base register during check-constraint eval */ int iCacheLevel; /* ColCache valid when aColCache[].iLevel<=iCacheLevel */ int iCacheCnt; /* Counter used to generate aColCache[].lru values */ @@ -16774,7 +17237,6 @@ struct Parse { int nMaxArg; /* Max args passed to user function by sub-program */ #if SELECTTRACE_ENABLED int nSelect; /* Number of SELECT statements seen */ - int nSelectIndent; /* How far to indent SELECTTRACE() output */ #endif #ifndef SQLITE_OMIT_SHARED_CACHE int nTableLock; /* Number of locks in aTableLock */ @@ -16900,6 +17362,7 @@ struct AuthContext { #define OPFLAG_PERMUTE 0x01 /* OP_Compare: use the permutation */ #define OPFLAG_SAVEPOSITION 0x02 /* OP_Delete/Insert: save cursor pos */ #define OPFLAG_AUXDELETE 0x04 /* OP_Delete: index in a DELETE op */ +#define OPFLAG_NOCHNG_MAGIC 0x6d /* OP_MakeRecord: serialtype 10 is ok */ /* * Each trigger present in the database schema is stored as an instance of @@ -16987,6 +17450,7 @@ struct TriggerStep { Expr *pWhere; /* The WHERE clause for DELETE or UPDATE steps */ ExprList *pExprList; /* SET clause for UPDATE. */ IdList *pIdList; /* Column names for INSERT */ + char *zSpan; /* Original SQL text of this command */ TriggerStep *pNext; /* Next in the link-list */ TriggerStep *pLast; /* Last element in link-list. Valid for 1st elem only */ }; @@ -17136,9 +17600,9 @@ struct Walker { struct CCurHint *pCCurHint; /* Used by codeCursorHint() */ int *aiCol; /* array of column indexes */ struct IdxCover *pIdxCover; /* Check for index coverage */ - struct IdxExprTrans *pIdxTrans; /* Convert indexed expr to column */ + struct IdxExprTrans *pIdxTrans; /* Convert idxed expr to column */ ExprList *pGroupBy; /* GROUP BY clause */ - struct HavingToWhereCtx *pHavingCtx; /* HAVING to WHERE clause ctx */ + Select *pSelect; /* HAVING to WHERE clause ctx */ } u; }; @@ -17206,6 +17670,7 @@ struct TreeView { ** using sqlite3_log(). The routines also provide a convenient place ** to set a debugger breakpoint. */ +SQLITE_PRIVATE int sqlite3ReportError(int iErr, int lineno, const char *zType); SQLITE_PRIVATE int sqlite3CorruptError(int); SQLITE_PRIVATE int sqlite3MisuseError(int); SQLITE_PRIVATE int sqlite3CantopenError(int); @@ -17296,6 +17761,7 @@ SQLITE_PRIVATE void *sqlite3DbMallocRaw(sqlite3*, u64); SQLITE_PRIVATE void *sqlite3DbMallocRawNN(sqlite3*, u64); SQLITE_PRIVATE char *sqlite3DbStrDup(sqlite3*,const char*); SQLITE_PRIVATE char *sqlite3DbStrNDup(sqlite3*,const char*, u64); +SQLITE_PRIVATE char *sqlite3DbSpanDup(sqlite3*,const char*,const char*); SQLITE_PRIVATE void *sqlite3Realloc(void*, u64); SQLITE_PRIVATE void *sqlite3DbReallocOrFree(sqlite3 *, void *, u64); SQLITE_PRIVATE void *sqlite3DbRealloc(sqlite3 *, void *, u64); @@ -17364,6 +17830,12 @@ SQLITE_PRIVATE int sqlite3LookasideUsed(sqlite3*,int*); SQLITE_PRIVATE sqlite3_mutex *sqlite3Pcache1Mutex(void); SQLITE_PRIVATE sqlite3_mutex *sqlite3MallocMutex(void); +#if defined(SQLITE_ENABLE_MULTITHREADED_CHECKS) && !defined(SQLITE_MUTEX_OMIT) +SQLITE_PRIVATE void sqlite3MutexWarnOnContention(sqlite3_mutex*); +#else +# define sqlite3MutexWarnOnContention(x) +#endif + #ifndef SQLITE_OMIT_FLOATING_POINT SQLITE_PRIVATE int sqlite3IsNaN(double); #else @@ -17428,7 +17900,7 @@ SQLITE_PRIVATE ExprList *sqlite3ExprListAppend(Parse*,ExprList*,Expr*); SQLITE_PRIVATE ExprList *sqlite3ExprListAppendVector(Parse*,ExprList*,IdList*,Expr*); SQLITE_PRIVATE void sqlite3ExprListSetSortOrder(ExprList*,int); SQLITE_PRIVATE void sqlite3ExprListSetName(Parse*,ExprList*,Token*,int); -SQLITE_PRIVATE void sqlite3ExprListSetSpan(Parse*,ExprList*,ExprSpan*); +SQLITE_PRIVATE void sqlite3ExprListSetSpan(Parse*,ExprList*,const char*,const char*); SQLITE_PRIVATE void sqlite3ExprListDelete(sqlite3*, ExprList*); SQLITE_PRIVATE u32 sqlite3ExprListFlags(const ExprList*); SQLITE_PRIVATE int sqlite3Init(sqlite3*, char**); @@ -17458,7 +17930,7 @@ SQLITE_PRIVATE void sqlite3AddColumn(Parse*,Token*,Token*); SQLITE_PRIVATE void sqlite3AddNotNull(Parse*, int); SQLITE_PRIVATE void sqlite3AddPrimaryKey(Parse*, ExprList*, int, int, int); SQLITE_PRIVATE void sqlite3AddCheckConstraint(Parse*, Expr*); -SQLITE_PRIVATE void sqlite3AddDefaultValue(Parse*,ExprSpan*); +SQLITE_PRIVATE void sqlite3AddDefaultValue(Parse*,Expr*,const char*,const char*); SQLITE_PRIVATE void sqlite3AddCollateType(Parse*, Token*); SQLITE_PRIVATE void sqlite3EndTable(Parse*,Token*,Token*,u8,Select*); SQLITE_PRIVATE int sqlite3ParseUri(const char*,const char*,unsigned int*, @@ -17530,16 +18002,16 @@ SQLITE_PRIVATE void sqlite3CreateIndex(Parse*,Token*,Token*,SrcList*,ExprList*,i SQLITE_PRIVATE void sqlite3DropIndex(Parse*, SrcList*, int); SQLITE_PRIVATE int sqlite3Select(Parse*, Select*, SelectDest*); SQLITE_PRIVATE Select *sqlite3SelectNew(Parse*,ExprList*,SrcList*,Expr*,ExprList*, - Expr*,ExprList*,u32,Expr*,Expr*); + Expr*,ExprList*,u32,Expr*); SQLITE_PRIVATE void sqlite3SelectDelete(sqlite3*, Select*); SQLITE_PRIVATE Table *sqlite3SrcListLookup(Parse*, SrcList*); SQLITE_PRIVATE int sqlite3IsReadOnly(Parse*, Table*, int); SQLITE_PRIVATE void sqlite3OpenTable(Parse*, int iCur, int iDb, Table*, int); #if defined(SQLITE_ENABLE_UPDATE_DELETE_LIMIT) && !defined(SQLITE_OMIT_SUBQUERY) -SQLITE_PRIVATE Expr *sqlite3LimitWhere(Parse*,SrcList*,Expr*,ExprList*,Expr*,Expr*,char*); +SQLITE_PRIVATE Expr *sqlite3LimitWhere(Parse*,SrcList*,Expr*,ExprList*,Expr*,char*); #endif -SQLITE_PRIVATE void sqlite3DeleteFrom(Parse*, SrcList*, Expr*); -SQLITE_PRIVATE void sqlite3Update(Parse*, SrcList*, ExprList*, Expr*, int); +SQLITE_PRIVATE void sqlite3DeleteFrom(Parse*, SrcList*, Expr*, ExprList*, Expr*); +SQLITE_PRIVATE void sqlite3Update(Parse*, SrcList*, ExprList*,Expr*,int,ExprList*,Expr*); SQLITE_PRIVATE WhereInfo *sqlite3WhereBegin(Parse*,SrcList*,Expr*,ExprList*,ExprList*,u16,int); SQLITE_PRIVATE void sqlite3WhereEnd(WhereInfo*); SQLITE_PRIVATE LogEst sqlite3WhereOutputRowCount(WhereInfo*); @@ -17594,6 +18066,7 @@ SQLITE_PRIVATE int sqlite3ExprCompare(Parse*,Expr*, Expr*, int); SQLITE_PRIVATE int sqlite3ExprCompareSkip(Expr*, Expr*, int); SQLITE_PRIVATE int sqlite3ExprListCompare(ExprList*, ExprList*, int); SQLITE_PRIVATE int sqlite3ExprImpliesExpr(Parse*,Expr*, Expr*, int); +SQLITE_PRIVATE int sqlite3ExprImpliesNonNullRow(Expr*,int); SQLITE_PRIVATE void sqlite3ExprAnalyzeAggregates(NameContext*, Expr*); SQLITE_PRIVATE void sqlite3ExprAnalyzeAggList(NameContext*,ExprList*); SQLITE_PRIVATE int sqlite3ExprCoveredByIndex(Expr*, int iCur, Index *pIdx); @@ -17611,6 +18084,8 @@ SQLITE_PRIVATE void sqlite3EndTransaction(Parse*,int); SQLITE_PRIVATE void sqlite3Savepoint(Parse*, int, Token*); SQLITE_PRIVATE void sqlite3CloseSavepoints(sqlite3 *); SQLITE_PRIVATE void sqlite3LeaveMutexAndCloseZombie(sqlite3*); +SQLITE_PRIVATE int sqlite3ExprIdToTrueFalse(Expr*); +SQLITE_PRIVATE int sqlite3ExprTruthValue(const Expr*); SQLITE_PRIVATE int sqlite3ExprIsConstant(Expr*); SQLITE_PRIVATE int sqlite3ExprIsConstantNotJoin(Expr*); SQLITE_PRIVATE int sqlite3ExprIsConstantOrFunction(Expr*, u8); @@ -17663,7 +18138,7 @@ SQLITE_PRIVATE int sqlite3SafetyCheckSickOrOk(sqlite3*); SQLITE_PRIVATE void sqlite3ChangeCookie(Parse*, int); #if !defined(SQLITE_OMIT_VIEW) && !defined(SQLITE_OMIT_TRIGGER) -SQLITE_PRIVATE void sqlite3MaterializeView(Parse*, Table*, Expr*, int); +SQLITE_PRIVATE void sqlite3MaterializeView(Parse*, Table*, Expr*, ExprList*,Expr*,int); #endif #ifndef SQLITE_OMIT_TRIGGER @@ -17679,11 +18154,14 @@ SQLITE_PRIVATE void sqlite3CodeRowTrigger(Parse*, Trigger *, int, ExprList*, i SQLITE_PRIVATE void sqlite3CodeRowTriggerDirect(Parse *, Trigger *, Table *, int, int, int); void sqliteViewTriggers(Parse*, Table*, Expr*, int, ExprList*); SQLITE_PRIVATE void sqlite3DeleteTriggerStep(sqlite3*, TriggerStep*); -SQLITE_PRIVATE TriggerStep *sqlite3TriggerSelectStep(sqlite3*,Select*); +SQLITE_PRIVATE TriggerStep *sqlite3TriggerSelectStep(sqlite3*,Select*, + const char*,const char*); SQLITE_PRIVATE TriggerStep *sqlite3TriggerInsertStep(sqlite3*,Token*, IdList*, - Select*,u8); -SQLITE_PRIVATE TriggerStep *sqlite3TriggerUpdateStep(sqlite3*,Token*,ExprList*, Expr*, u8); -SQLITE_PRIVATE TriggerStep *sqlite3TriggerDeleteStep(sqlite3*,Token*, Expr*); + Select*,u8,const char*,const char*); +SQLITE_PRIVATE TriggerStep *sqlite3TriggerUpdateStep(sqlite3*,Token*,ExprList*, Expr*, u8, + const char*,const char*); +SQLITE_PRIVATE TriggerStep *sqlite3TriggerDeleteStep(sqlite3*,Token*, Expr*, + const char*,const char*); SQLITE_PRIVATE void sqlite3DeleteTrigger(sqlite3*, Trigger*); SQLITE_PRIVATE void sqlite3UnlinkAndDeleteTrigger(sqlite3*,int,const char*); SQLITE_PRIVATE u32 sqlite3TriggerColmask(Parse*,Trigger*,ExprList*,int,int,Table*,int); @@ -17790,6 +18268,10 @@ SQLITE_PRIVATE int sqlite3TwoPartName(Parse *, Token *, Token *, Token **); SQLITE_PRIVATE const char *sqlite3ErrName(int); #endif +#ifdef SQLITE_ENABLE_DESERIALIZE +SQLITE_PRIVATE int sqlite3MemdbInit(void); +#endif + SQLITE_PRIVATE const char *sqlite3ErrStr(int); SQLITE_PRIVATE int sqlite3ReadSchema(Parse *pParse); SQLITE_PRIVATE CollSeq *sqlite3FindCollSeq(sqlite3*,u8 enc, const char*,int); @@ -17838,6 +18320,9 @@ SQLITE_PRIVATE FuncDefHash sqlite3BuiltinFunctions; SQLITE_PRIVATE int sqlite3PendingByte; #endif #endif +#ifdef VDBE_PROFILE +SQLITE_PRIVATE sqlite3_uint64 sqlite3NProfileCnt; +#endif SQLITE_PRIVATE void sqlite3RootPageMoved(sqlite3*, int, int, int); SQLITE_PRIVATE void sqlite3Reindex(Parse*, Token*, Token*); SQLITE_PRIVATE void sqlite3AlterFunctions(void); @@ -17860,7 +18345,7 @@ SQLITE_PRIVATE void sqlite3AlterBeginAddColumn(Parse *, SrcList *); SQLITE_PRIVATE CollSeq *sqlite3GetCollSeq(Parse*, u8, CollSeq *, const char*); SQLITE_PRIVATE char sqlite3AffinityType(const char*, u8*); SQLITE_PRIVATE void sqlite3Analyze(Parse*, Token*, Token*); -SQLITE_PRIVATE int sqlite3InvokeBusyHandler(BusyHandler*); +SQLITE_PRIVATE int sqlite3InvokeBusyHandler(BusyHandler*, sqlite3_file*); SQLITE_PRIVATE int sqlite3FindDb(sqlite3*, Token*); SQLITE_PRIVATE int sqlite3FindDbName(sqlite3 *, const char *); SQLITE_PRIVATE int sqlite3AnalysisLoad(sqlite3*,int iDB); @@ -18113,6 +18598,9 @@ SQLITE_PRIVATE void sqlite3ConnectionClosed(sqlite3 *db); #ifdef SQLITE_DEBUG SQLITE_PRIVATE void sqlite3ParserTrace(FILE*, char *); #endif +#if defined(YYCOVERAGE) +SQLITE_PRIVATE int sqlite3ParserCoverage(FILE*); +#endif /* ** If the SQLITE_ENABLE IOTRACE exists then the global variable @@ -18458,6 +18946,13 @@ SQLITE_PRIVATE const Token sqlite3IntTokens[] = { { "1", 1 } }; +#ifdef VDBE_PROFILE +/* +** The following performance counter can be used in place of +** sqlite3Hwtime() for profiling. This is a no-op on standard builds. +*/ +SQLITE_PRIVATE sqlite3_uint64 sqlite3NProfileCnt = 0; +#endif /* ** The value of the "pending" byte must be 0x40000000 (1 byte past the @@ -18834,7 +19329,6 @@ struct sqlite3_context { int iOp; /* Instruction number of OP_Function */ int isError; /* Error code returned by the function. */ u8 skipFlag; /* Skip accumulator loading if true */ - u8 fErrorOrAux; /* isError!=0 or pVdbe->pAuxData modified */ u8 argc; /* Number of arguments */ sqlite3_value *argv[1]; /* Argument set */ }; @@ -19004,6 +19498,7 @@ SQLITE_PRIVATE int sqlite3VdbeMemStringify(Mem*, u8, u8); SQLITE_PRIVATE i64 sqlite3VdbeIntValue(Mem*); SQLITE_PRIVATE int sqlite3VdbeMemIntegerify(Mem*); SQLITE_PRIVATE double sqlite3VdbeRealValue(Mem*); +SQLITE_PRIVATE int sqlite3VdbeBooleanValue(Mem*, int ifNull); SQLITE_PRIVATE void sqlite3VdbeIntegerAffinity(Mem*); SQLITE_PRIVATE int sqlite3VdbeMemRealify(Mem*); SQLITE_PRIVATE int sqlite3VdbeMemNumerify(Mem*); @@ -19397,6 +19892,9 @@ SQLITE_API int sqlite3_db_status( ** pagers the database handle is connected to. *pHighwater is always set ** to zero. */ + case SQLITE_DBSTATUS_CACHE_SPILL: + op = SQLITE_DBSTATUS_CACHE_WRITE+1; + /* Fall through into the next case */ case SQLITE_DBSTATUS_CACHE_HIT: case SQLITE_DBSTATUS_CACHE_MISS: case SQLITE_DBSTATUS_CACHE_WRITE:{ @@ -19479,7 +19977,7 @@ SQLITE_API int sqlite3_db_status( ** ** Jean Meeus ** Astronomical Algorithms, 2nd Edition, 1998 -** ISBM 0-943396-61-1 +** ISBN 0-943396-61-1 ** Willmann-Bell, Inc ** Richmond, Virginia (USA) */ @@ -20817,8 +21315,11 @@ SQLITE_PRIVATE int sqlite3OsCheckReservedLock(sqlite3_file *id, int *pResOut){ ** routine has no return value since the return value would be meaningless. */ SQLITE_PRIVATE int sqlite3OsFileControl(sqlite3_file *id, int op, void *pArg){ + if( id->pMethods==0 ) return SQLITE_NOTFOUND; #ifdef SQLITE_TEST - if( op!=SQLITE_FCNTL_COMMIT_PHASETWO ){ + if( op!=SQLITE_FCNTL_COMMIT_PHASETWO + && op!=SQLITE_FCNTL_LOCK_TIMEOUT + ){ /* Faults are not injected into COMMIT_PHASETWO because, assuming SQLite ** is using a regular VFS, it is called after the corresponding ** transaction has been committed. Injecting a fault at this point @@ -20835,7 +21336,7 @@ SQLITE_PRIVATE int sqlite3OsFileControl(sqlite3_file *id, int op, void *pArg){ return id->pMethods->xFileControl(id, op, pArg); } SQLITE_PRIVATE void sqlite3OsFileControlHint(sqlite3_file *id, int op, void *pArg){ - (void)id->pMethods->xFileControl(id, op, pArg); + if( id->pMethods ) (void)id->pMethods->xFileControl(id, op, pArg); } SQLITE_PRIVATE int sqlite3OsSectorSize(sqlite3_file *id){ @@ -23384,6 +23885,193 @@ static SQLITE_WSD int mutexIsInit = 0; #ifndef SQLITE_MUTEX_OMIT + +#ifdef SQLITE_ENABLE_MULTITHREADED_CHECKS +/* +** This block (enclosed by SQLITE_ENABLE_MULTITHREADED_CHECKS) contains +** the implementation of a wrapper around the system default mutex +** implementation (sqlite3DefaultMutex()). +** +** Most calls are passed directly through to the underlying default +** mutex implementation. Except, if a mutex is configured by calling +** sqlite3MutexWarnOnContention() on it, then if contention is ever +** encountered within xMutexEnter() a warning is emitted via sqlite3_log(). +** +** This type of mutex is used as the database handle mutex when testing +** apps that usually use SQLITE_CONFIG_MULTITHREAD mode. +*/ + +/* +** Type for all mutexes used when SQLITE_ENABLE_MULTITHREADED_CHECKS +** is defined. Variable CheckMutex.mutex is a pointer to the real mutex +** allocated by the system mutex implementation. Variable iType is usually set +** to the type of mutex requested - SQLITE_MUTEX_RECURSIVE, SQLITE_MUTEX_FAST +** or one of the static mutex identifiers. Or, if this is a recursive mutex +** that has been configured using sqlite3MutexWarnOnContention(), it is +** set to SQLITE_MUTEX_WARNONCONTENTION. +*/ +typedef struct CheckMutex CheckMutex; +struct CheckMutex { + int iType; + sqlite3_mutex *mutex; +}; + +#define SQLITE_MUTEX_WARNONCONTENTION (-1) + +/* +** Pointer to real mutex methods object used by the CheckMutex +** implementation. Set by checkMutexInit(). +*/ +static SQLITE_WSD const sqlite3_mutex_methods *pGlobalMutexMethods; + +#ifdef SQLITE_DEBUG +static int checkMutexHeld(sqlite3_mutex *p){ + return pGlobalMutexMethods->xMutexHeld(((CheckMutex*)p)->mutex); +} +static int checkMutexNotheld(sqlite3_mutex *p){ + return pGlobalMutexMethods->xMutexNotheld(((CheckMutex*)p)->mutex); +} +#endif + +/* +** Initialize and deinitialize the mutex subsystem. +*/ +static int checkMutexInit(void){ + pGlobalMutexMethods = sqlite3DefaultMutex(); + return SQLITE_OK; +} +static int checkMutexEnd(void){ + pGlobalMutexMethods = 0; + return SQLITE_OK; +} + +/* +** Allocate a mutex. +*/ +static sqlite3_mutex *checkMutexAlloc(int iType){ + static CheckMutex staticMutexes[] = { + {2, 0}, {3, 0}, {4, 0}, {5, 0}, + {6, 0}, {7, 0}, {8, 0}, {9, 0}, + {10, 0}, {11, 0}, {12, 0}, {13, 0} + }; + CheckMutex *p = 0; + + assert( SQLITE_MUTEX_RECURSIVE==1 && SQLITE_MUTEX_FAST==0 ); + if( iType<2 ){ + p = sqlite3MallocZero(sizeof(CheckMutex)); + if( p==0 ) return 0; + p->iType = iType; + }else{ +#ifdef SQLITE_ENABLE_API_ARMOR + if( iType-2>=ArraySize(staticMutexes) ){ + (void)SQLITE_MISUSE_BKPT; + return 0; + } +#endif + p = &staticMutexes[iType-2]; + } + + if( p->mutex==0 ){ + p->mutex = pGlobalMutexMethods->xMutexAlloc(iType); + if( p->mutex==0 ){ + if( iType<2 ){ + sqlite3_free(p); + } + p = 0; + } + } + + return (sqlite3_mutex*)p; +} + +/* +** Free a mutex. +*/ +static void checkMutexFree(sqlite3_mutex *p){ + assert( SQLITE_MUTEX_RECURSIVE<2 ); + assert( SQLITE_MUTEX_FAST<2 ); + assert( SQLITE_MUTEX_WARNONCONTENTION<2 ); + +#if SQLITE_ENABLE_API_ARMOR + if( ((CheckMutex*)p)->iType<2 ) +#endif + { + CheckMutex *pCheck = (CheckMutex*)p; + pGlobalMutexMethods->xMutexFree(pCheck->mutex); + sqlite3_free(pCheck); + } +#ifdef SQLITE_ENABLE_API_ARMOR + else{ + (void)SQLITE_MISUSE_BKPT; + } +#endif +} + +/* +** Enter the mutex. +*/ +static void checkMutexEnter(sqlite3_mutex *p){ + CheckMutex *pCheck = (CheckMutex*)p; + if( pCheck->iType==SQLITE_MUTEX_WARNONCONTENTION ){ + if( SQLITE_OK==pGlobalMutexMethods->xMutexTry(pCheck->mutex) ){ + return; + } + sqlite3_log(SQLITE_MISUSE, + "illegal multi-threaded access to database connection" + ); + } + pGlobalMutexMethods->xMutexEnter(pCheck->mutex); +} + +/* +** Enter the mutex (do not block). +*/ +static int checkMutexTry(sqlite3_mutex *p){ + CheckMutex *pCheck = (CheckMutex*)p; + return pGlobalMutexMethods->xMutexTry(pCheck->mutex); +} + +/* +** Leave the mutex. +*/ +static void checkMutexLeave(sqlite3_mutex *p){ + CheckMutex *pCheck = (CheckMutex*)p; + pGlobalMutexMethods->xMutexLeave(pCheck->mutex); +} + +sqlite3_mutex_methods const *multiThreadedCheckMutex(void){ + static const sqlite3_mutex_methods sMutex = { + checkMutexInit, + checkMutexEnd, + checkMutexAlloc, + checkMutexFree, + checkMutexEnter, + checkMutexTry, + checkMutexLeave, +#ifdef SQLITE_DEBUG + checkMutexHeld, + checkMutexNotheld +#else + 0, + 0 +#endif + }; + return &sMutex; +} + +/* +** Mark the SQLITE_MUTEX_RECURSIVE mutex passed as the only argument as +** one on which there should be no contention. +*/ +SQLITE_PRIVATE void sqlite3MutexWarnOnContention(sqlite3_mutex *p){ + if( sqlite3GlobalConfig.mutex.xMutexAlloc==checkMutexAlloc ){ + CheckMutex *pCheck = (CheckMutex*)p; + assert( pCheck->iType==SQLITE_MUTEX_RECURSIVE ); + pCheck->iType = SQLITE_MUTEX_WARNONCONTENTION; + } +} +#endif /* ifdef SQLITE_ENABLE_MULTITHREADED_CHECKS */ + /* ** Initialize the mutex system. */ @@ -23399,7 +24087,11 @@ SQLITE_PRIVATE int sqlite3MutexInit(void){ sqlite3_mutex_methods *pTo = &sqlite3GlobalConfig.mutex; if( sqlite3GlobalConfig.bCoreMutex ){ +#ifdef SQLITE_ENABLE_MULTITHREADED_CHECKS + pFrom = multiThreadedCheckMutex(); +#else pFrom = sqlite3DefaultMutex(); +#endif }else{ pFrom = sqlite3NoopMutex(); } @@ -23526,6 +24218,7 @@ SQLITE_API int sqlite3_mutex_notheld(sqlite3_mutex *p){ #endif /* !defined(SQLITE_MUTEX_OMIT) */ + /************** End of mutex.c ***********************************************/ /************** Begin file mutex_noop.c **************************************/ /* @@ -23798,11 +24491,12 @@ struct sqlite3_mutex { #endif }; #if SQLITE_MUTEX_NREF -#define SQLITE3_MUTEX_INITIALIZER {PTHREAD_MUTEX_INITIALIZER,0,0,(pthread_t)0,0} +# define SQLITE3_MUTEX_INITIALIZER(id) \ + {PTHREAD_MUTEX_INITIALIZER,id,0,(pthread_t)0,0} #elif defined(SQLITE_ENABLE_API_ARMOR) -#define SQLITE3_MUTEX_INITIALIZER { PTHREAD_MUTEX_INITIALIZER, 0 } +# define SQLITE3_MUTEX_INITIALIZER(id) { PTHREAD_MUTEX_INITIALIZER, id } #else -#define SQLITE3_MUTEX_INITIALIZER { PTHREAD_MUTEX_INITIALIZER } +#define SQLITE3_MUTEX_INITIALIZER(id) { PTHREAD_MUTEX_INITIALIZER } #endif /* @@ -23899,18 +24593,18 @@ static int pthreadMutexEnd(void){ return SQLITE_OK; } */ static sqlite3_mutex *pthreadMutexAlloc(int iType){ static sqlite3_mutex staticMutexes[] = { - SQLITE3_MUTEX_INITIALIZER, - SQLITE3_MUTEX_INITIALIZER, - SQLITE3_MUTEX_INITIALIZER, - SQLITE3_MUTEX_INITIALIZER, - SQLITE3_MUTEX_INITIALIZER, - SQLITE3_MUTEX_INITIALIZER, - SQLITE3_MUTEX_INITIALIZER, - SQLITE3_MUTEX_INITIALIZER, - SQLITE3_MUTEX_INITIALIZER, - SQLITE3_MUTEX_INITIALIZER, - SQLITE3_MUTEX_INITIALIZER, - SQLITE3_MUTEX_INITIALIZER + SQLITE3_MUTEX_INITIALIZER(2), + SQLITE3_MUTEX_INITIALIZER(3), + SQLITE3_MUTEX_INITIALIZER(4), + SQLITE3_MUTEX_INITIALIZER(5), + SQLITE3_MUTEX_INITIALIZER(6), + SQLITE3_MUTEX_INITIALIZER(7), + SQLITE3_MUTEX_INITIALIZER(8), + SQLITE3_MUTEX_INITIALIZER(9), + SQLITE3_MUTEX_INITIALIZER(10), + SQLITE3_MUTEX_INITIALIZER(11), + SQLITE3_MUTEX_INITIALIZER(12), + SQLITE3_MUTEX_INITIALIZER(13) }; sqlite3_mutex *p; switch( iType ){ @@ -23928,6 +24622,9 @@ static sqlite3_mutex *pthreadMutexAlloc(int iType){ pthread_mutexattr_settype(&recursiveAttr, PTHREAD_MUTEX_RECURSIVE); pthread_mutex_init(&p->mutex, &recursiveAttr); pthread_mutexattr_destroy(&recursiveAttr); +#endif +#if SQLITE_MUTEX_NREF || defined(SQLITE_ENABLE_API_ARMOR) + p->id = SQLITE_MUTEX_RECURSIVE; #endif } break; @@ -23936,6 +24633,9 @@ static sqlite3_mutex *pthreadMutexAlloc(int iType){ p = sqlite3MallocZero( sizeof(*p) ); if( p ){ pthread_mutex_init(&p->mutex, 0); +#if SQLITE_MUTEX_NREF || defined(SQLITE_ENABLE_API_ARMOR) + p->id = SQLITE_MUTEX_FAST; +#endif } break; } @@ -23951,7 +24651,7 @@ static sqlite3_mutex *pthreadMutexAlloc(int iType){ } } #if SQLITE_MUTEX_NREF || defined(SQLITE_ENABLE_API_ARMOR) - if( p ) p->id = iType; + assert( p==0 || p->id==iType ); #endif return p; } @@ -24468,7 +25168,7 @@ struct sqlite3_mutex { #ifdef SQLITE_DEBUG volatile int nRef; /* Number of enterances */ volatile DWORD owner; /* Thread holding this mutex */ - volatile int trace; /* True to trace changes */ + volatile LONG trace; /* True to trace changes */ #endif }; @@ -24480,10 +25180,10 @@ struct sqlite3_mutex { #define SQLITE_W32_MUTEX_INITIALIZER { 0 } #ifdef SQLITE_DEBUG -#define SQLITE3_MUTEX_INITIALIZER { SQLITE_W32_MUTEX_INITIALIZER, 0, \ +#define SQLITE3_MUTEX_INITIALIZER(id) { SQLITE_W32_MUTEX_INITIALIZER, id, \ 0L, (DWORD)0, 0 } #else -#define SQLITE3_MUTEX_INITIALIZER { SQLITE_W32_MUTEX_INITIALIZER, 0 } +#define SQLITE3_MUTEX_INITIALIZER(id) { SQLITE_W32_MUTEX_INITIALIZER, id } #endif #ifdef SQLITE_DEBUG @@ -24526,18 +25226,18 @@ SQLITE_PRIVATE void sqlite3MemoryBarrier(void){ ** Initialize and deinitialize the mutex subsystem. */ static sqlite3_mutex winMutex_staticMutexes[] = { - SQLITE3_MUTEX_INITIALIZER, - SQLITE3_MUTEX_INITIALIZER, - SQLITE3_MUTEX_INITIALIZER, - SQLITE3_MUTEX_INITIALIZER, - SQLITE3_MUTEX_INITIALIZER, - SQLITE3_MUTEX_INITIALIZER, - SQLITE3_MUTEX_INITIALIZER, - SQLITE3_MUTEX_INITIALIZER, - SQLITE3_MUTEX_INITIALIZER, - SQLITE3_MUTEX_INITIALIZER, - SQLITE3_MUTEX_INITIALIZER, - SQLITE3_MUTEX_INITIALIZER + SQLITE3_MUTEX_INITIALIZER(2), + SQLITE3_MUTEX_INITIALIZER(3), + SQLITE3_MUTEX_INITIALIZER(4), + SQLITE3_MUTEX_INITIALIZER(5), + SQLITE3_MUTEX_INITIALIZER(6), + SQLITE3_MUTEX_INITIALIZER(7), + SQLITE3_MUTEX_INITIALIZER(8), + SQLITE3_MUTEX_INITIALIZER(9), + SQLITE3_MUTEX_INITIALIZER(10), + SQLITE3_MUTEX_INITIALIZER(11), + SQLITE3_MUTEX_INITIALIZER(12), + SQLITE3_MUTEX_INITIALIZER(13) }; static int winMutex_isInit = 0; @@ -24667,15 +25367,15 @@ static sqlite3_mutex *winMutexAlloc(int iType){ } #endif p = &winMutex_staticMutexes[iType-2]; - p->id = iType; #ifdef SQLITE_DEBUG #ifdef SQLITE_WIN32_MUTEX_TRACE_STATIC - p->trace = 1; + InterlockedCompareExchange(&p->trace, 1, 0); #endif #endif break; } } + assert( p==0 || p->id==iType ); return p; } @@ -25457,6 +26157,19 @@ SQLITE_PRIVATE char *sqlite3DbStrNDup(sqlite3 *db, const char *z, u64 n){ return zNew; } +/* +** The text between zStart and zEnd represents a phrase within a larger +** SQL statement. Make a copy of this phrase in space obtained form +** sqlite3DbMalloc(). Omit leading and trailing whitespace. +*/ +SQLITE_PRIVATE char *sqlite3DbSpanDup(sqlite3 *db, const char *zStart, const char *zEnd){ + int n; + while( sqlite3Isspace(zStart[0]) ) zStart++; + n = (int)(zEnd - zStart); + while( ALWAYS(n>0) && sqlite3Isspace(zStart[n-1]) ) n--; + return sqlite3DbStrNDup(db, zStart, n); +} + /* ** Free any prior content in *pz and replace it with a copy of zNew. */ @@ -25741,6 +26454,11 @@ SQLITE_PRIVATE void sqlite3VXPrintf( PrintfArguments *pArgList = 0; /* Arguments for SQLITE_PRINTF_SQLFUNC */ char buf[etBUFSIZE]; /* Conversion buffer */ + /* pAccum never starts out with an empty buffer that was obtained from + ** malloc(). This precondition is required by the mprintf("%z...") + ** optimization. */ + assert( pAccum->nChar>0 || (pAccum->printfFlags&SQLITE_PRINTF_MALLOCED)==0 ); + bufpt = 0; if( (pAccum->printfFlags & SQLITE_PRINTF_SQLFUNC)!=0 ){ pArgList = va_arg(ap, PrintfArguments*); @@ -26159,9 +26877,38 @@ SQLITE_PRIVATE void sqlite3VXPrintf( case etCHARX: if( bArgList ){ bufpt = getTextArg(pArgList); - c = bufpt ? bufpt[0] : 0; + length = 1; + if( bufpt ){ + buf[0] = c = *(bufpt++); + if( (c&0xc0)==0xc0 ){ + while( length<4 && (bufpt[0]&0xc0)==0x80 ){ + buf[length++] = *(bufpt++); + } + } + }else{ + buf[0] = 0; + } }else{ - c = va_arg(ap,int); + unsigned int ch = va_arg(ap,unsigned int); + if( ch<0x00080 ){ + buf[0] = ch & 0xff; + length = 1; + }else if( ch<0x00800 ){ + buf[0] = 0xc0 + (u8)((ch>>6)&0x1f); + buf[1] = 0x80 + (u8)(ch & 0x3f); + length = 2; + }else if( ch<0x10000 ){ + buf[0] = 0xe0 + (u8)((ch>>12)&0x0f); + buf[1] = 0x80 + (u8)((ch>>6) & 0x3f); + buf[2] = 0x80 + (u8)(ch & 0x3f); + length = 3; + }else{ + buf[0] = 0xf0 + (u8)((ch>>18) & 0x07); + buf[1] = 0x80 + (u8)((ch>>12) & 0x3f); + buf[2] = 0x80 + (u8)((ch>>6) & 0x3f); + buf[3] = 0x80 + (u8)(ch & 0x3f); + length = 4; + } } if( precision>1 ){ width -= precision-1; @@ -26169,12 +26916,13 @@ SQLITE_PRIVATE void sqlite3VXPrintf( sqlite3AppendChar(pAccum, width-1, ' '); width = 0; } - sqlite3AppendChar(pAccum, precision-1, c); + while( precision-- > 1 ){ + sqlite3StrAccumAppend(pAccum, buf, length); + } } - length = 1; - buf[0] = c; bufpt = buf; - break; + flag_altform2 = 1; + goto adjust_width_for_utf8; case etSTRING: case etDYNSTRING: if( bArgList ){ @@ -26186,17 +26934,45 @@ SQLITE_PRIVATE void sqlite3VXPrintf( if( bufpt==0 ){ bufpt = ""; }else if( xtype==etDYNSTRING ){ + if( pAccum->nChar==0 && pAccum->mxAlloc && width==0 && precision<0 ){ + /* Special optimization for sqlite3_mprintf("%z..."): + ** Extend an existing memory allocation rather than creating + ** a new one. */ + assert( (pAccum->printfFlags&SQLITE_PRINTF_MALLOCED)==0 ); + pAccum->zText = bufpt; + pAccum->nAlloc = sqlite3DbMallocSize(pAccum->db, bufpt); + pAccum->nChar = 0x7fffffff & (int)strlen(bufpt); + pAccum->printfFlags |= SQLITE_PRINTF_MALLOCED; + length = 0; + break; + } zExtra = bufpt; } if( precision>=0 ){ - for(length=0; length 0 && z[0] ){ + SQLITE_SKIP_UTF8(z); + } + length = (int)(z - (unsigned char*)bufpt); + }else{ + for(length=0; length0 ){ + /* Adjust width to account for extra bytes in UTF-8 characters */ + int ii = length - 1; + while( ii>=0 ) if( (bufpt[ii--] & 0xc0)==0x80 ) width++; + } break; - case etSQLESCAPE: /* Escape ' characters */ - case etSQLESCAPE2: /* Escape ' and enclose in '...' */ - case etSQLESCAPE3: { /* Escape " characters */ + case etSQLESCAPE: /* %q: Escape ' characters */ + case etSQLESCAPE2: /* %Q: Escape ' and enclose in '...' */ + case etSQLESCAPE3: { /* %w: Escape " characters */ int i, j, k, n, isnull; int needQuote; char ch; @@ -26210,9 +26986,17 @@ SQLITE_PRIVATE void sqlite3VXPrintf( } isnull = escarg==0; if( isnull ) escarg = (xtype==etSQLESCAPE2 ? "NULL" : "(NULL)"); + /* For %q, %Q, and %w, the precision is the number of byte (or + ** characters if the ! flags is present) to use from the input. + ** Because of the extra quoting characters inserted, the number + ** of output characters may be larger than the precision. + */ k = precision; for(i=n=0; k!=0 && (ch=escarg[i])!=0; i++, k--){ if( ch==q ) n++; + if( flag_altform2 && (ch&0xc0)==0xc0 ){ + while( (escarg[i+1]&0xc0)==0x80 ){ i++; } + } } needQuote = !isnull && xtype==etSQLESCAPE2; n += i + 3; @@ -26235,10 +27019,7 @@ SQLITE_PRIVATE void sqlite3VXPrintf( if( needQuote ) bufpt[j++] = q; bufpt[j] = 0; length = j; - /* The precision in %q and %Q means how many input characters to - ** consume, not the length of the output... - ** if( precision>=0 && precision0 ){ @@ -26627,8 +27411,15 @@ SQLITE_PRIVATE void sqlite3DebugPrintf(const char *zFormat, ...){ sqlite3VXPrintf(&acc, zFormat, ap); va_end(ap); sqlite3StrAccumFinish(&acc); +#ifdef SQLITE_OS_TRACE_PROC + { + extern void SQLITE_OS_TRACE_PROC(const char *zBuf, int nBuf); + SQLITE_OS_TRACE_PROC(zBuf, sizeof(zBuf)); + } +#else fprintf(stdout,"%s", zBuf); fflush(stdout); +#endif } #endif @@ -26785,11 +27576,21 @@ SQLITE_PRIVATE void sqlite3TreeViewSelect(TreeView *pView, const Select *p, u8 m sqlite3TreeViewPush(pView, 1); } do{ +#if SELECTTRACE_ENABLED + sqlite3TreeViewLine(pView, + "SELECT%s%s (%s/%p) selFlags=0x%x nSelectRow=%d", + ((p->selFlags & SF_Distinct) ? " DISTINCT" : ""), + ((p->selFlags & SF_Aggregate) ? " agg_flag" : ""), + p->zSelName, p, p->selFlags, + (int)p->nSelectRow + ); +#else sqlite3TreeViewLine(pView, "SELECT%s%s (0x%p) selFlags=0x%x nSelectRow=%d", ((p->selFlags & SF_Distinct) ? " DISTINCT" : ""), ((p->selFlags & SF_Aggregate) ? " agg_flag" : ""), p, p->selFlags, (int)p->nSelectRow ); +#endif if( cnt++ ) sqlite3TreeViewPop(pView); if( p->pPrior ){ n = 1000; @@ -26801,7 +27602,6 @@ SQLITE_PRIVATE void sqlite3TreeViewSelect(TreeView *pView, const Select *p, u8 m if( p->pHaving ) n++; if( p->pOrderBy ) n++; if( p->pLimit ) n++; - if( p->pOffset ) n++; } sqlite3TreeViewExprList(pView, p->pEList, (n--)>0, "result-set"); if( p->pSrc && p->pSrc->nSrc ){ @@ -26858,12 +27658,12 @@ SQLITE_PRIVATE void sqlite3TreeViewSelect(TreeView *pView, const Select *p, u8 m } if( p->pLimit ){ sqlite3TreeViewItem(pView, "LIMIT", (n--)>0); - sqlite3TreeViewExpr(pView, p->pLimit, 0); - sqlite3TreeViewPop(pView); - } - if( p->pOffset ){ - sqlite3TreeViewItem(pView, "OFFSET", (n--)>0); - sqlite3TreeViewExpr(pView, p->pOffset, 0); + sqlite3TreeViewExpr(pView, p->pLimit->pLeft, p->pLimit->pRight!=0); + if( p->pLimit->pRight ){ + sqlite3TreeViewItem(pView, "OFFSET", (n--)>0); + sqlite3TreeViewExpr(pView, p->pLimit->pRight, 0); + sqlite3TreeViewPop(pView); + } sqlite3TreeViewPop(pView); } if( p->pPrior ){ @@ -26941,6 +27741,11 @@ SQLITE_PRIVATE void sqlite3TreeViewExpr(TreeView *pView, const Expr *pExpr, u8 m sqlite3TreeViewLine(pView,"NULL"); break; } + case TK_TRUEFALSE: { + sqlite3TreeViewLine(pView, + sqlite3ExprTruthValue(pExpr) ? "TRUE" : "FALSE"); + break; + } #ifndef SQLITE_OMIT_BLOB_LITERAL case TK_BLOB: { sqlite3TreeViewLine(pView,"%s", pExpr->u.zToken); @@ -26997,6 +27802,19 @@ SQLITE_PRIVATE void sqlite3TreeViewExpr(TreeView *pView, const Expr *pExpr, u8 m case TK_ISNULL: zUniOp = "ISNULL"; break; case TK_NOTNULL: zUniOp = "NOTNULL"; break; + case TK_TRUTH: { + int x; + const char *azOp[] = { + "IS-FALSE", "IS-TRUE", "IS-NOT-FALSE", "IS-NOT-TRUE" + }; + assert( pExpr->op2==TK_IS || pExpr->op2==TK_ISNOT ); + assert( pExpr->pRight ); + assert( pExpr->pRight->op==TK_TRUEFALSE ); + x = (pExpr->op2==TK_ISNOT)*2 + sqlite3ExprTruthValue(pExpr->pRight); + zUniOp = azOp[x]; + break; + } + case TK_SPAN: { sqlite3TreeViewLine(pView, "SPAN %Q", pExpr->u.zToken); sqlite3TreeViewExpr(pView, pExpr->pLeft, 0); @@ -27156,12 +27974,20 @@ SQLITE_PRIVATE void sqlite3TreeViewBareExprList( sqlite3TreeViewLine(pView, "%s", zLabel); for(i=0; inExpr; i++){ int j = pList->a[i].u.x.iOrderByCol; - if( j ){ + char *zName = pList->a[i].zName; + if( j || zName ){ sqlite3TreeViewPush(pView, 0); + } + if( zName ){ + sqlite3TreeViewLine(pView, "AS %s", zName); + } + if( j ){ sqlite3TreeViewLine(pView, "iOrderByCol=%d", j); } sqlite3TreeViewExpr(pView, pList->a[i].pExpr, inExpr-1); - if( j ) sqlite3TreeViewPop(pView); + if( j || zName ){ + sqlite3TreeViewPop(pView); + } } } } @@ -28451,6 +29277,45 @@ SQLITE_API int sqlite3_strnicmp(const char *zLeft, const char *zRight, int N){ return N<0 ? 0 : UpperToLower[*a] - UpperToLower[*b]; } +/* +** Compute 10 to the E-th power. Examples: E==1 results in 10. +** E==2 results in 100. E==50 results in 1.0e50. +** +** This routine only works for values of E between 1 and 341. +*/ +static LONGDOUBLE_TYPE sqlite3Pow10(int E){ +#if defined(_MSC_VER) + static const LONGDOUBLE_TYPE x[] = { + 1.0e+001, + 1.0e+002, + 1.0e+004, + 1.0e+008, + 1.0e+016, + 1.0e+032, + 1.0e+064, + 1.0e+128, + 1.0e+256 + }; + LONGDOUBLE_TYPE r = 1.0; + int i; + assert( E>=0 && E<=307 ); + for(i=0; E!=0; i++, E >>=1){ + if( E & 1 ) r *= x[i]; + } + return r; +#else + LONGDOUBLE_TYPE x = 10.0; + LONGDOUBLE_TYPE r = 1.0; + while(1){ + if( E & 1 ) r *= x; + E >>= 1; + if( E==0 ) break; + x *= x; + } + return r; +#endif +} + /* ** The string z[] is an text representation of a real number. ** Convert this string to a double and write it into *pResult. @@ -28518,12 +29383,12 @@ SQLITE_PRIVATE int sqlite3AtoF(const char *z, double *pResult, int length, u8 en /* copy max significant digits to significand */ while( z=zEnd ) goto do_atof_calc; /* if decimal point is present */ @@ -28536,7 +29401,7 @@ SQLITE_PRIVATE int sqlite3AtoF(const char *z, double *pResult, int length, u8 en s = s*10 + (*z - '0'); d--; } - z+=incr, nDigits++; + z+=incr; nDigits++; } } if( z>=zEnd ) goto do_atof_calc; @@ -28606,11 +29471,10 @@ do_atof_calc: if( e==0 ){ /*OPTIMIZATION-IF-TRUE*/ result = (double)s; }else{ - LONGDOUBLE_TYPE scale = 1.0; /* attempt to handle extremely small/large numbers better */ if( e>307 ){ /*OPTIMIZATION-IF-TRUE*/ if( e<342 ){ /*OPTIMIZATION-IF-TRUE*/ - while( e%308 ) { scale *= 1.0e+1; e -= 1; } + LONGDOUBLE_TYPE scale = sqlite3Pow10(e-308); if( esign<0 ){ result = s / scale; result /= 1.0e+308; @@ -28630,10 +29494,7 @@ do_atof_calc: } } }else{ - /* 1.0e+22 is the largest power of 10 than can be - ** represented exactly. */ - while( e%22 ) { scale *= 1.0e+1; e -= 1; } - while( e>0 ) { scale *= 1.0e+22; e -= 22; } + LONGDOUBLE_TYPE scale = sqlite3Pow10(e); if( esign<0 ){ result = s / scale; }else{ @@ -28691,7 +29552,7 @@ static int compare2pow63(const char *zNum, int incr){ ** Returns: ** ** 0 Successful transformation. Fits in a 64-bit signed integer. -** 1 Excess text after the integer value +** 1 Excess non-space text after the integer value ** 2 Integer too large for a 64-bit signed integer or is malformed ** 3 Special case of 9223372036854775808 ** @@ -28734,47 +29595,57 @@ SQLITE_PRIVATE int sqlite3Atoi64(const char *zNum, i64 *pNum, int length, u8 enc for(i=0; &zNum[i]='0' && c<='9'; i+=incr){ u = u*10 + c - '0'; } + testcase( i==18*incr ); + testcase( i==19*incr ); + testcase( i==20*incr ); if( u>LARGEST_INT64 ){ + /* This test and assignment is needed only to suppress UB warnings + ** from clang and -fsanitize=undefined. This test and assignment make + ** the code a little larger and slower, and no harm comes from omitting + ** them, but we must appaise the undefined-behavior pharisees. */ *pNum = neg ? SMALLEST_INT64 : LARGEST_INT64; }else if( neg ){ *pNum = -(i64)u; }else{ *pNum = (i64)u; } - testcase( i==18 ); - testcase( i==19 ); - testcase( i==20 ); - if( &zNum[i]19*incr ){ /* Too many digits */ - /* zNum is empty or contains non-numeric text or is longer - ** than 19 digits (thus guaranteeing that it is too large) */ - return 2; - }else if( i<19*incr ){ + if( i<19*incr ){ /* Less than 19 digits, so we know that it fits in 64 bits */ assert( u<=LARGEST_INT64 ); return rc; }else{ /* zNum is a 19-digit numbers. Compare it against 9223372036854775808. */ - c = compare2pow63(zNum, incr); + c = i>19*incr ? 1 : compare2pow63(zNum, incr); if( c<0 ){ /* zNum is less than 9223372036854775808 so it fits */ assert( u<=LARGEST_INT64 ); return rc; - }else if( c>0 ){ - /* zNum is greater than 9223372036854775808 so it overflows */ - return 2; }else{ - /* zNum is exactly 9223372036854775808. Fits if negative. The - ** special case 2 overflow if positive */ - assert( u-1==LARGEST_INT64 ); - return neg ? rc : 3; + *pNum = neg ? SMALLEST_INT64 : LARGEST_INT64; + if( c>0 ){ + /* zNum is greater than 9223372036854775808 so it overflows */ + return 2; + }else{ + /* zNum is exactly 9223372036854775808. Fits if negative. The + ** special case 2 overflow if positive */ + assert( u-1==LARGEST_INT64 ); + return neg ? rc : 3; + } } } } @@ -30091,78 +30962,81 @@ SQLITE_PRIVATE const char *sqlite3OpcodeName(int i){ /* 93 */ "Concat" OpHelp("r[P3]=r[P2]+r[P1]"), /* 94 */ "Compare" OpHelp("r[P1@P3] <-> r[P2@P3]"), /* 95 */ "BitNot" OpHelp("r[P1]= ~r[P1]"), - /* 96 */ "Column" OpHelp("r[P3]=PX"), + /* 96 */ "IsTrue" OpHelp("r[P2] = coalesce(r[P1]==TRUE,P3) ^ P4"), /* 97 */ "String8" OpHelp("r[P2]='P4'"), - /* 98 */ "Affinity" OpHelp("affinity(r[P1@P2])"), - /* 99 */ "MakeRecord" OpHelp("r[P3]=mkrec(r[P1@P2])"), - /* 100 */ "Count" OpHelp("r[P2]=count()"), - /* 101 */ "ReadCookie" OpHelp(""), - /* 102 */ "SetCookie" OpHelp(""), - /* 103 */ "ReopenIdx" OpHelp("root=P2 iDb=P3"), - /* 104 */ "OpenRead" OpHelp("root=P2 iDb=P3"), - /* 105 */ "OpenWrite" OpHelp("root=P2 iDb=P3"), - /* 106 */ "OpenDup" OpHelp(""), - /* 107 */ "OpenAutoindex" OpHelp("nColumn=P2"), - /* 108 */ "OpenEphemeral" OpHelp("nColumn=P2"), - /* 109 */ "SorterOpen" OpHelp(""), - /* 110 */ "SequenceTest" OpHelp("if( cursor[P1].ctr++ ) pc = P2"), - /* 111 */ "OpenPseudo" OpHelp("P3 columns in r[P2]"), - /* 112 */ "Close" OpHelp(""), - /* 113 */ "ColumnsUsed" OpHelp(""), - /* 114 */ "Sequence" OpHelp("r[P2]=cursor[P1].ctr++"), - /* 115 */ "NewRowid" OpHelp("r[P2]=rowid"), - /* 116 */ "Insert" OpHelp("intkey=r[P3] data=r[P2]"), - /* 117 */ "InsertInt" OpHelp("intkey=P3 data=r[P2]"), - /* 118 */ "Delete" OpHelp(""), - /* 119 */ "ResetCount" OpHelp(""), - /* 120 */ "SorterCompare" OpHelp("if key(P1)!=trim(r[P3],P4) goto P2"), - /* 121 */ "SorterData" OpHelp("r[P2]=data"), - /* 122 */ "RowData" OpHelp("r[P2]=data"), - /* 123 */ "Rowid" OpHelp("r[P2]=rowid"), - /* 124 */ "NullRow" OpHelp(""), - /* 125 */ "SeekEnd" OpHelp(""), - /* 126 */ "SorterInsert" OpHelp("key=r[P2]"), - /* 127 */ "IdxInsert" OpHelp("key=r[P2]"), - /* 128 */ "IdxDelete" OpHelp("key=r[P2@P3]"), - /* 129 */ "DeferredSeek" OpHelp("Move P3 to P1.rowid if needed"), - /* 130 */ "IdxRowid" OpHelp("r[P2]=rowid"), - /* 131 */ "Destroy" OpHelp(""), + /* 98 */ "Offset" OpHelp("r[P3] = sqlite_offset(P1)"), + /* 99 */ "Column" OpHelp("r[P3]=PX"), + /* 100 */ "Affinity" OpHelp("affinity(r[P1@P2])"), + /* 101 */ "MakeRecord" OpHelp("r[P3]=mkrec(r[P1@P2])"), + /* 102 */ "Count" OpHelp("r[P2]=count()"), + /* 103 */ "ReadCookie" OpHelp(""), + /* 104 */ "SetCookie" OpHelp(""), + /* 105 */ "ReopenIdx" OpHelp("root=P2 iDb=P3"), + /* 106 */ "OpenRead" OpHelp("root=P2 iDb=P3"), + /* 107 */ "OpenWrite" OpHelp("root=P2 iDb=P3"), + /* 108 */ "OpenDup" OpHelp(""), + /* 109 */ "OpenAutoindex" OpHelp("nColumn=P2"), + /* 110 */ "OpenEphemeral" OpHelp("nColumn=P2"), + /* 111 */ "SorterOpen" OpHelp(""), + /* 112 */ "SequenceTest" OpHelp("if( cursor[P1].ctr++ ) pc = P2"), + /* 113 */ "OpenPseudo" OpHelp("P3 columns in r[P2]"), + /* 114 */ "Close" OpHelp(""), + /* 115 */ "ColumnsUsed" OpHelp(""), + /* 116 */ "Sequence" OpHelp("r[P2]=cursor[P1].ctr++"), + /* 117 */ "NewRowid" OpHelp("r[P2]=rowid"), + /* 118 */ "Insert" OpHelp("intkey=r[P3] data=r[P2]"), + /* 119 */ "InsertInt" OpHelp("intkey=P3 data=r[P2]"), + /* 120 */ "Delete" OpHelp(""), + /* 121 */ "ResetCount" OpHelp(""), + /* 122 */ "SorterCompare" OpHelp("if key(P1)!=trim(r[P3],P4) goto P2"), + /* 123 */ "SorterData" OpHelp("r[P2]=data"), + /* 124 */ "RowData" OpHelp("r[P2]=data"), + /* 125 */ "Rowid" OpHelp("r[P2]=rowid"), + /* 126 */ "NullRow" OpHelp(""), + /* 127 */ "SeekEnd" OpHelp(""), + /* 128 */ "SorterInsert" OpHelp("key=r[P2]"), + /* 129 */ "IdxInsert" OpHelp("key=r[P2]"), + /* 130 */ "IdxDelete" OpHelp("key=r[P2@P3]"), + /* 131 */ "DeferredSeek" OpHelp("Move P3 to P1.rowid if needed"), /* 132 */ "Real" OpHelp("r[P2]=P4"), - /* 133 */ "Clear" OpHelp(""), - /* 134 */ "ResetSorter" OpHelp(""), - /* 135 */ "CreateBtree" OpHelp("r[P2]=root iDb=P1 flags=P3"), - /* 136 */ "SqlExec" OpHelp(""), - /* 137 */ "ParseSchema" OpHelp(""), - /* 138 */ "LoadAnalysis" OpHelp(""), - /* 139 */ "DropTable" OpHelp(""), - /* 140 */ "DropIndex" OpHelp(""), - /* 141 */ "DropTrigger" OpHelp(""), - /* 142 */ "IntegrityCk" OpHelp(""), - /* 143 */ "RowSetAdd" OpHelp("rowset(P1)=r[P2]"), - /* 144 */ "Param" OpHelp(""), - /* 145 */ "FkCounter" OpHelp("fkctr[P1]+=P2"), - /* 146 */ "MemMax" OpHelp("r[P1]=max(r[P1],r[P2])"), - /* 147 */ "OffsetLimit" OpHelp("if r[P1]>0 then r[P2]=r[P1]+max(0,r[P3]) else r[P2]=(-1)"), - /* 148 */ "AggStep0" OpHelp("accum=r[P3] step(r[P2@P5])"), - /* 149 */ "AggStep" OpHelp("accum=r[P3] step(r[P2@P5])"), - /* 150 */ "AggFinal" OpHelp("accum=r[P1] N=P2"), - /* 151 */ "Expire" OpHelp(""), - /* 152 */ "TableLock" OpHelp("iDb=P1 root=P2 write=P3"), - /* 153 */ "VBegin" OpHelp(""), - /* 154 */ "VCreate" OpHelp(""), - /* 155 */ "VDestroy" OpHelp(""), - /* 156 */ "VOpen" OpHelp(""), - /* 157 */ "VColumn" OpHelp("r[P3]=vcolumn(P2)"), - /* 158 */ "VRename" OpHelp(""), - /* 159 */ "Pagecount" OpHelp(""), - /* 160 */ "MaxPgcnt" OpHelp(""), - /* 161 */ "PureFunc0" OpHelp(""), - /* 162 */ "Function0" OpHelp("r[P3]=func(r[P2@P5])"), - /* 163 */ "PureFunc" OpHelp(""), - /* 164 */ "Function" OpHelp("r[P3]=func(r[P2@P5])"), - /* 165 */ "CursorHint" OpHelp(""), - /* 166 */ "Noop" OpHelp(""), - /* 167 */ "Explain" OpHelp(""), + /* 133 */ "IdxRowid" OpHelp("r[P2]=rowid"), + /* 134 */ "Destroy" OpHelp(""), + /* 135 */ "Clear" OpHelp(""), + /* 136 */ "ResetSorter" OpHelp(""), + /* 137 */ "CreateBtree" OpHelp("r[P2]=root iDb=P1 flags=P3"), + /* 138 */ "SqlExec" OpHelp(""), + /* 139 */ "ParseSchema" OpHelp(""), + /* 140 */ "LoadAnalysis" OpHelp(""), + /* 141 */ "DropTable" OpHelp(""), + /* 142 */ "DropIndex" OpHelp(""), + /* 143 */ "DropTrigger" OpHelp(""), + /* 144 */ "IntegrityCk" OpHelp(""), + /* 145 */ "RowSetAdd" OpHelp("rowset(P1)=r[P2]"), + /* 146 */ "Param" OpHelp(""), + /* 147 */ "FkCounter" OpHelp("fkctr[P1]+=P2"), + /* 148 */ "MemMax" OpHelp("r[P1]=max(r[P1],r[P2])"), + /* 149 */ "OffsetLimit" OpHelp("if r[P1]>0 then r[P2]=r[P1]+max(0,r[P3]) else r[P2]=(-1)"), + /* 150 */ "AggStep0" OpHelp("accum=r[P3] step(r[P2@P5])"), + /* 151 */ "AggStep" OpHelp("accum=r[P3] step(r[P2@P5])"), + /* 152 */ "AggFinal" OpHelp("accum=r[P1] N=P2"), + /* 153 */ "Expire" OpHelp(""), + /* 154 */ "TableLock" OpHelp("iDb=P1 root=P2 write=P3"), + /* 155 */ "VBegin" OpHelp(""), + /* 156 */ "VCreate" OpHelp(""), + /* 157 */ "VDestroy" OpHelp(""), + /* 158 */ "VOpen" OpHelp(""), + /* 159 */ "VColumn" OpHelp("r[P3]=vcolumn(P2)"), + /* 160 */ "VRename" OpHelp(""), + /* 161 */ "Pagecount" OpHelp(""), + /* 162 */ "MaxPgcnt" OpHelp(""), + /* 163 */ "PureFunc0" OpHelp(""), + /* 164 */ "Function0" OpHelp("r[P3]=func(r[P2@P5])"), + /* 165 */ "PureFunc" OpHelp(""), + /* 166 */ "Function" OpHelp("r[P3]=func(r[P2@P5])"), + /* 167 */ "Trace" OpHelp(""), + /* 168 */ "CursorHint" OpHelp(""), + /* 169 */ "Noop" OpHelp(""), + /* 170 */ "Explain" OpHelp(""), }; return azName[i]; } @@ -30401,6 +31275,9 @@ struct unixFile { #if SQLITE_ENABLE_LOCKING_STYLE || defined(__APPLE__) unsigned fsFlags; /* cached details from statfs() */ #endif +#ifdef SQLITE_ENABLE_SETLK_TIMEOUT + unsigned iBusyTimeout; /* Wait this many millisec on locks */ +#endif #if OS_VXWORKS struct vxworksFileId *pId; /* Unique file ID */ #endif @@ -30838,7 +31715,11 @@ static struct unix_syscall { #endif #define osFchown ((int(*)(int,uid_t,gid_t))aSyscall[20].pCurrent) +#if defined(HAVE_FCHOWN) { "geteuid", (sqlite3_syscall_ptr)geteuid, 0 }, +#else + { "geteuid", (sqlite3_syscall_ptr)0, 0 }, +#endif #define osGeteuid ((uid_t(*)(void))aSyscall[21].pCurrent) #if !defined(SQLITE_OMIT_WAL) || SQLITE_MAX_MMAP_SIZE>0 @@ -30853,7 +31734,7 @@ static struct unix_syscall { #else { "munmap", (sqlite3_syscall_ptr)0, 0 }, #endif -#define osMunmap ((void*(*)(void*,size_t))aSyscall[23].pCurrent) +#define osMunmap ((int(*)(void*,size_t))aSyscall[23].pCurrent) #if HAVE_MREMAP && (!defined(SQLITE_OMIT_WAL) || SQLITE_MAX_MMAP_SIZE>0) { "mremap", (sqlite3_syscall_ptr)mremap, 0 }, @@ -30883,7 +31764,11 @@ static struct unix_syscall { #endif #define osLstat ((int(*)(const char*,struct stat*))aSyscall[27].pCurrent) +#if defined(__linux__) && defined(SQLITE_ENABLE_BATCH_ATOMIC_WRITE) { "ioctl", (sqlite3_syscall_ptr)ioctl, 0 }, +#else + { "ioctl", (sqlite3_syscall_ptr)0, 0 }, +#endif #define osIoctl ((int(*)(int,int,...))aSyscall[28].pCurrent) }; /* End of the overrideable system calls */ @@ -31062,15 +31947,16 @@ static int robust_open(const char *z, int f, mode_t m){ ** assert( unixMutexHeld() ); ** unixEnterLeave() */ +static sqlite3_mutex *unixBigLock = 0; static void unixEnterMutex(void){ - sqlite3_mutex_enter(sqlite3MutexAlloc(SQLITE_MUTEX_STATIC_VFS1)); + sqlite3_mutex_enter(unixBigLock); } static void unixLeaveMutex(void){ - sqlite3_mutex_leave(sqlite3MutexAlloc(SQLITE_MUTEX_STATIC_VFS1)); + sqlite3_mutex_leave(unixBigLock); } #ifdef SQLITE_DEBUG static int unixMutexHeld(void) { - return sqlite3_mutex_held(sqlite3MutexAlloc(SQLITE_MUTEX_STATIC_VFS1)); + return sqlite3_mutex_held(unixBigLock); } #endif @@ -31826,6 +32712,43 @@ static int unixCheckReservedLock(sqlite3_file *id, int *pResOut){ return rc; } +/* +** Set a posix-advisory-lock. +** +** There are two versions of this routine. If compiled with +** SQLITE_ENABLE_SETLK_TIMEOUT then the routine has an extra parameter +** which is a pointer to a unixFile. If the unixFile->iBusyTimeout +** value is set, then it is the number of milliseconds to wait before +** failing the lock. The iBusyTimeout value is always reset back to +** zero on each call. +** +** If SQLITE_ENABLE_SETLK_TIMEOUT is not defined, then do a non-blocking +** attempt to set the lock. +*/ +#ifndef SQLITE_ENABLE_SETLK_TIMEOUT +# define osSetPosixAdvisoryLock(h,x,t) osFcntl(h,F_SETLK,x) +#else +static int osSetPosixAdvisoryLock( + int h, /* The file descriptor on which to take the lock */ + struct flock *pLock, /* The description of the lock */ + unixFile *pFile /* Structure holding timeout value */ +){ + int rc = osFcntl(h,F_SETLK,pLock); + while( rc<0 && pFile->iBusyTimeout>0 ){ + /* On systems that support some kind of blocking file lock with a timeout, + ** make appropriate changes here to invoke that blocking file lock. On + ** generic posix, however, there is no such API. So we simply try the + ** lock once every millisecond until either the timeout expires, or until + ** the lock is obtained. */ + usleep(1000); + rc = osFcntl(h,F_SETLK,pLock); + pFile->iBusyTimeout--; + } + return rc; +} +#endif /* SQLITE_ENABLE_SETLK_TIMEOUT */ + + /* ** Attempt to set a system-lock on the file pFile. The lock is ** described by pLock. @@ -31858,7 +32781,7 @@ static int unixFileLock(unixFile *pFile, struct flock *pLock){ lock.l_start = SHARED_FIRST; lock.l_len = SHARED_SIZE; lock.l_type = F_WRLCK; - rc = osFcntl(pFile->h, F_SETLK, &lock); + rc = osSetPosixAdvisoryLock(pFile->h, &lock, pFile); if( rc<0 ) return rc; pInode->bProcessLock = 1; pInode->nLock++; @@ -31866,7 +32789,7 @@ static int unixFileLock(unixFile *pFile, struct flock *pLock){ rc = 0; } }else{ - rc = osFcntl(pFile->h, F_SETLK, pLock); + rc = osSetPosixAdvisoryLock(pFile->h, pLock, pFile); } return rc; } @@ -34226,6 +35149,12 @@ static int unixFileControl(sqlite3_file *id, int op, void *pArg){ *(int*)pArg = fileHasMoved(pFile); return SQLITE_OK; } +#ifdef SQLITE_ENABLE_SETLK_TIMEOUT + case SQLITE_FCNTL_LOCK_TIMEOUT: { + pFile->iBusyTimeout = *(int*)pArg; + return SQLITE_OK; + } +#endif #if SQLITE_MAX_MMAP_SIZE>0 case SQLITE_FCNTL_MMAP_SIZE: { i64 newLimit = *(i64*)pArg; @@ -34316,7 +35245,7 @@ static void setDeviceCharacteristics(unixFile *pFile){ pFile->sectorSize = SQLITE_DEFAULT_SECTOR_SIZE; pFile->deviceCharacteristics = 0; if( fstatvfs(pFile->h, &fsInfo) == -1 ) { - return pFile->sectorSize; + return; } if( !strcmp(fsInfo.f_basetype, "tmp") ) { @@ -34474,6 +35403,7 @@ struct unixShmNode { int szRegion; /* Size of shared-memory regions */ u16 nRegion; /* Size of array apRegion */ u8 isReadonly; /* True if read-only */ + u8 isUnlocked; /* True if no DMS lock held */ char **apRegion; /* Array of mapped shared-memory regions */ int nRef; /* Number of unixShm objects pointing to this */ unixShm *pFirst; /* All unixShm objects pointing to this */ @@ -34530,7 +35460,7 @@ static int unixShmSystemLock( /* Access to the unixShmNode object is serialized by the caller */ pShmNode = pFile->pInode->pShmNode; - assert( sqlite3_mutex_held(pShmNode->mutex) || pShmNode->nRef==0 ); + assert( pShmNode->nRef==0 || sqlite3_mutex_held(pShmNode->mutex) ); /* Shared locks never span more than one byte */ assert( n==1 || lockType!=F_RDLCK ); @@ -34540,13 +35470,11 @@ static int unixShmSystemLock( if( pShmNode->h>=0 ){ /* Initialize the locking parameters */ - memset(&f, 0, sizeof(f)); f.l_type = lockType; f.l_whence = SEEK_SET; f.l_start = ofst; f.l_len = n; - - rc = osFcntl(pShmNode->h, F_SETLK, &f); + rc = osSetPosixAdvisoryLock(pShmNode->h, &f, pFile); rc = (rc!=(-1)) ? SQLITE_OK : SQLITE_BUSY; } @@ -34636,6 +35564,64 @@ static void unixShmPurge(unixFile *pFd){ } } +/* +** The DMS lock has not yet been taken on shm file pShmNode. Attempt to +** take it now. Return SQLITE_OK if successful, or an SQLite error +** code otherwise. +** +** If the DMS cannot be locked because this is a readonly_shm=1 +** connection and no other process already holds a lock, return +** SQLITE_READONLY_CANTINIT and set pShmNode->isUnlocked=1. +*/ +static int unixLockSharedMemory(unixFile *pDbFd, unixShmNode *pShmNode){ + struct flock lock; + int rc = SQLITE_OK; + + /* Use F_GETLK to determine the locks other processes are holding + ** on the DMS byte. If it indicates that another process is holding + ** a SHARED lock, then this process may also take a SHARED lock + ** and proceed with opening the *-shm file. + ** + ** Or, if no other process is holding any lock, then this process + ** is the first to open it. In this case take an EXCLUSIVE lock on the + ** DMS byte and truncate the *-shm file to zero bytes in size. Then + ** downgrade to a SHARED lock on the DMS byte. + ** + ** If another process is holding an EXCLUSIVE lock on the DMS byte, + ** return SQLITE_BUSY to the caller (it will try again). An earlier + ** version of this code attempted the SHARED lock at this point. But + ** this introduced a subtle race condition: if the process holding + ** EXCLUSIVE failed just before truncating the *-shm file, then this + ** process might open and use the *-shm file without truncating it. + ** And if the *-shm file has been corrupted by a power failure or + ** system crash, the database itself may also become corrupt. */ + lock.l_whence = SEEK_SET; + lock.l_start = UNIX_SHM_DMS; + lock.l_len = 1; + lock.l_type = F_WRLCK; + if( osFcntl(pShmNode->h, F_GETLK, &lock)!=0 ) { + rc = SQLITE_IOERR_LOCK; + }else if( lock.l_type==F_UNLCK ){ + if( pShmNode->isReadonly ){ + pShmNode->isUnlocked = 1; + rc = SQLITE_READONLY_CANTINIT; + }else{ + rc = unixShmSystemLock(pDbFd, F_WRLCK, UNIX_SHM_DMS, 1); + if( rc==SQLITE_OK && robust_ftruncate(pShmNode->h, 0) ){ + rc = unixLogError(SQLITE_IOERR_SHMOPEN,"ftruncate",pShmNode->zFilename); + } + } + }else if( lock.l_type==F_WRLCK ){ + rc = SQLITE_BUSY; + } + + if( rc==SQLITE_OK ){ + assert( lock.l_type==F_UNLCK || lock.l_type==F_RDLCK ); + rc = unixShmSystemLock(pDbFd, F_RDLCK, UNIX_SHM_DMS, 1); + } + return rc; +} + /* ** Open a shared-memory area associated with open database file pDbFd. ** This particular implementation uses mmapped files. @@ -34674,9 +35660,9 @@ static void unixShmPurge(unixFile *pFd){ static int unixOpenSharedMemory(unixFile *pDbFd){ struct unixShm *p = 0; /* The connection to be opened */ struct unixShmNode *pShmNode; /* The underlying mmapped file */ - int rc; /* Result code */ + int rc = SQLITE_OK; /* Result code */ unixInodeInfo *pInode; /* The inode of fd */ - char *zShmFilename; /* Name of the file used for SHM */ + char *zShm; /* Name of the file used for SHM */ int nShmFilename; /* Size of the SHM filename in bytes */ /* Allocate space for the new unixShm object. */ @@ -34717,14 +35703,14 @@ static int unixOpenSharedMemory(unixFile *pDbFd){ goto shm_open_err; } memset(pShmNode, 0, sizeof(*pShmNode)+nShmFilename); - zShmFilename = pShmNode->zFilename = (char*)&pShmNode[1]; + zShm = pShmNode->zFilename = (char*)&pShmNode[1]; #ifdef SQLITE_SHM_DIRECTORY - sqlite3_snprintf(nShmFilename, zShmFilename, + sqlite3_snprintf(nShmFilename, zShm, SQLITE_SHM_DIRECTORY "/sqlite-shm-%x-%x", (u32)sStat.st_ino, (u32)sStat.st_dev); #else - sqlite3_snprintf(nShmFilename, zShmFilename, "%s-shm", zBasePath); - sqlite3FileSuffix3(pDbFd->zPath, zShmFilename); + sqlite3_snprintf(nShmFilename, zShm, "%s-shm", zBasePath); + sqlite3FileSuffix3(pDbFd->zPath, zShm); #endif pShmNode->h = -1; pDbFd->pInode->pShmNode = pShmNode; @@ -34738,15 +35724,16 @@ static int unixOpenSharedMemory(unixFile *pDbFd){ } if( pInode->bProcessLock==0 ){ - int openFlags = O_RDWR | O_CREAT; - if( sqlite3_uri_boolean(pDbFd->zPath, "readonly_shm", 0) ){ - openFlags = O_RDONLY; - pShmNode->isReadonly = 1; + if( 0==sqlite3_uri_boolean(pDbFd->zPath, "readonly_shm", 0) ){ + pShmNode->h = robust_open(zShm, O_RDWR|O_CREAT, (sStat.st_mode&0777)); } - pShmNode->h = robust_open(zShmFilename, openFlags, (sStat.st_mode&0777)); if( pShmNode->h<0 ){ - rc = unixLogError(SQLITE_CANTOPEN_BKPT, "open", zShmFilename); - goto shm_open_err; + pShmNode->h = robust_open(zShm, O_RDONLY, (sStat.st_mode&0777)); + if( pShmNode->h<0 ){ + rc = unixLogError(SQLITE_CANTOPEN_BKPT, "open", zShm); + goto shm_open_err; + } + pShmNode->isReadonly = 1; } /* If this process is running as root, make sure that the SHM file @@ -34754,20 +35741,9 @@ static int unixOpenSharedMemory(unixFile *pDbFd){ ** the original owner will not be able to connect. */ robustFchown(pShmNode->h, sStat.st_uid, sStat.st_gid); - - /* Check to see if another process is holding the dead-man switch. - ** If not, truncate the file to zero length. - */ - rc = SQLITE_OK; - if( unixShmSystemLock(pDbFd, F_WRLCK, UNIX_SHM_DMS, 1)==SQLITE_OK ){ - if( robust_ftruncate(pShmNode->h, 0) ){ - rc = unixLogError(SQLITE_IOERR_SHMOPEN, "ftruncate", zShmFilename); - } - } - if( rc==SQLITE_OK ){ - rc = unixShmSystemLock(pDbFd, F_RDLCK, UNIX_SHM_DMS, 1); - } - if( rc ) goto shm_open_err; + + rc = unixLockSharedMemory(pDbFd, pShmNode); + if( rc!=SQLITE_OK && rc!=SQLITE_READONLY_CANTINIT ) goto shm_open_err; } } @@ -34791,7 +35767,7 @@ static int unixOpenSharedMemory(unixFile *pDbFd){ p->pNext = pShmNode->pFirst; pShmNode->pFirst = p; sqlite3_mutex_leave(pShmNode->mutex); - return SQLITE_OK; + return rc; /* Jump here on any error */ shm_open_err: @@ -34843,6 +35819,11 @@ static int unixShmMap( p = pDbFd->pShm; pShmNode = p->pShmNode; sqlite3_mutex_enter(pShmNode->mutex); + if( pShmNode->isUnlocked ){ + rc = unixLockSharedMemory(pDbFd, pShmNode); + if( rc!=SQLITE_OK ) goto shmpage_out; + pShmNode->isUnlocked = 0; + } assert( szRegion==pShmNode->szRegion || pShmNode->nRegion==0 ); assert( pShmNode->pInode==pDbFd->pInode ); assert( pShmNode->h>=0 || pDbFd->pInode->bProcessLock==1 ); @@ -36111,7 +37092,7 @@ static int unixOpen( ** a file-descriptor on the directory too. The first time unixSync() ** is called the directory file descriptor will be fsync()ed and close()d. */ - int syncDir = (isCreate && ( + int isNewJrnl = (isCreate && ( eType==SQLITE_OPEN_MASTER_JOURNAL || eType==SQLITE_OPEN_MAIN_JOURNAL || eType==SQLITE_OPEN_WAL @@ -36158,7 +37139,6 @@ static int unixOpen( randomnessPid = osGetpid(0); sqlite3_randomness(0,0); } - memset(p, 0, sizeof(unixFile)); if( eType==SQLITE_OPEN_MAIN_DB ){ @@ -36181,7 +37161,7 @@ static int unixOpen( }else if( !zName ){ /* If zName is NULL, the upper layer is requesting a temp file. */ - assert(isDelete && !syncDir); + assert(isDelete && !isNewJrnl); rc = unixGetTempname(pVfs->mxPathname, zTmpname); if( rc!=SQLITE_OK ){ return rc; @@ -36216,17 +37196,24 @@ static int unixOpen( fd = robust_open(zName, openFlags, openMode); OSTRACE(("OPENX %-3d %s 0%o\n", fd, zName, openFlags)); assert( !isExclusive || (openFlags & O_CREAT)!=0 ); - if( fd<0 && errno!=EISDIR && isReadWrite ){ - /* Failed to open the file for read/write access. Try read-only. */ - flags &= ~(SQLITE_OPEN_READWRITE|SQLITE_OPEN_CREATE); - openFlags &= ~(O_RDWR|O_CREAT); - flags |= SQLITE_OPEN_READONLY; - openFlags |= O_RDONLY; - isReadonly = 1; - fd = robust_open(zName, openFlags, openMode); + if( fd<0 ){ + if( isNewJrnl && errno==EACCES && osAccess(zName, F_OK) ){ + /* If unable to create a journal because the directory is not + ** writable, change the error code to indicate that. */ + rc = SQLITE_READONLY_DIRECTORY; + }else if( errno!=EISDIR && isReadWrite ){ + /* Failed to open the file for read/write access. Try read-only. */ + flags &= ~(SQLITE_OPEN_READWRITE|SQLITE_OPEN_CREATE); + openFlags &= ~(O_RDWR|O_CREAT); + flags |= SQLITE_OPEN_READONLY; + openFlags |= O_RDONLY; + isReadonly = 1; + fd = robust_open(zName, openFlags, openMode); + } } if( fd<0 ){ - rc = unixLogError(SQLITE_CANTOPEN_BKPT, "open", zName); + int rc2 = unixLogError(SQLITE_CANTOPEN_BKPT, "open", zName); + if( rc==SQLITE_OK ) rc = rc2; goto open_finished; } @@ -36286,7 +37273,7 @@ static int unixOpen( if( isReadonly ) ctrlFlags |= UNIXFILE_RDONLY; noLock = eType!=SQLITE_OPEN_MAIN_DB; if( noLock ) ctrlFlags |= UNIXFILE_NOLOCK; - if( syncDir ) ctrlFlags |= UNIXFILE_DIRSYNC; + if( isNewJrnl ) ctrlFlags |= UNIXFILE_DIRSYNC; if( flags & SQLITE_OPEN_URI ) ctrlFlags |= UNIXFILE_URI; #if SQLITE_ENABLE_LOCKING_STYLE @@ -38026,6 +39013,7 @@ SQLITE_API int sqlite3_os_init(void){ for(i=0; i<(sizeof(aVfs)/sizeof(sqlite3_vfs)); i++){ sqlite3_vfs_register(&aVfs[i], i==0); } + unixBigLock = sqlite3MutexAlloc(SQLITE_MUTEX_STATIC_VFS1); return SQLITE_OK; } @@ -38037,6 +39025,7 @@ SQLITE_API int sqlite3_os_init(void){ ** This routine is a no-op for unix. */ SQLITE_API int sqlite3_os_end(void){ + unixBigLock = 0; return SQLITE_OK; } @@ -41875,15 +42864,16 @@ static SYSTEM_INFO winSysInfo; ** assert( winShmMutexHeld() ); ** winShmLeaveMutex() */ +static sqlite3_mutex *winBigLock = 0; static void winShmEnterMutex(void){ - sqlite3_mutex_enter(sqlite3MutexAlloc(SQLITE_MUTEX_STATIC_VFS1)); + sqlite3_mutex_enter(winBigLock); } static void winShmLeaveMutex(void){ - sqlite3_mutex_leave(sqlite3MutexAlloc(SQLITE_MUTEX_STATIC_VFS1)); + sqlite3_mutex_leave(winBigLock); } #ifndef NDEBUG static int winShmMutexHeld(void) { - return sqlite3_mutex_held(sqlite3MutexAlloc(SQLITE_MUTEX_STATIC_VFS1)); + return sqlite3_mutex_held(winBigLock); } #endif @@ -41917,6 +42907,9 @@ struct winShmNode { int szRegion; /* Size of shared-memory regions */ int nRegion; /* Size of array apRegion */ + u8 isReadonly; /* True if read-only */ + u8 isUnlocked; /* True if no DMS lock held */ + struct ShmRegion { HANDLE hMap; /* File handle from CreateFileMapping */ void *pMap; @@ -41983,7 +42976,7 @@ static int winShmSystemLock( int rc = 0; /* Result code form Lock/UnlockFileEx() */ /* Access to the winShmNode object is serialized by the caller */ - assert( sqlite3_mutex_held(pFile->mutex) || pFile->nRef==0 ); + assert( pFile->nRef==0 || sqlite3_mutex_held(pFile->mutex) ); OSTRACE(("SHM-LOCK file=%p, lock=%d, offset=%d, size=%d\n", pFile->hFile.h, lockType, ofst, nByte)); @@ -42064,6 +43057,37 @@ static void winShmPurge(sqlite3_vfs *pVfs, int deleteFlag){ } } +/* +** The DMS lock has not yet been taken on shm file pShmNode. Attempt to +** take it now. Return SQLITE_OK if successful, or an SQLite error +** code otherwise. +** +** If the DMS cannot be locked because this is a readonly_shm=1 +** connection and no other process already holds a lock, return +** SQLITE_READONLY_CANTINIT and set pShmNode->isUnlocked=1. +*/ +static int winLockSharedMemory(winShmNode *pShmNode){ + int rc = winShmSystemLock(pShmNode, WINSHM_WRLCK, WIN_SHM_DMS, 1); + + if( rc==SQLITE_OK ){ + if( pShmNode->isReadonly ){ + pShmNode->isUnlocked = 1; + winShmSystemLock(pShmNode, WINSHM_UNLCK, WIN_SHM_DMS, 1); + return SQLITE_READONLY_CANTINIT; + }else if( winTruncate((sqlite3_file*)&pShmNode->hFile, 0) ){ + winShmSystemLock(pShmNode, WINSHM_UNLCK, WIN_SHM_DMS, 1); + return winLogError(SQLITE_IOERR_SHMOPEN, osGetLastError(), + "winLockSharedMemory", pShmNode->zFilename); + } + } + + if( rc==SQLITE_OK ){ + winShmSystemLock(pShmNode, WINSHM_UNLCK, WIN_SHM_DMS, 1); + } + + return winShmSystemLock(pShmNode, WINSHM_RDLCK, WIN_SHM_DMS, 1); +} + /* ** Open the shared-memory area associated with database file pDbFd. ** @@ -42073,9 +43097,9 @@ static void winShmPurge(sqlite3_vfs *pVfs, int deleteFlag){ */ static int winOpenSharedMemory(winFile *pDbFd){ struct winShm *p; /* The connection to be opened */ - struct winShmNode *pShmNode = 0; /* The underlying mmapped file */ - int rc; /* Result code */ - struct winShmNode *pNew; /* Newly allocated winShmNode */ + winShmNode *pShmNode = 0; /* The underlying mmapped file */ + int rc = SQLITE_OK; /* Result code */ + winShmNode *pNew; /* Newly allocated winShmNode */ int nName; /* Size of zName in bytes */ assert( pDbFd->pShm==0 ); /* Not previously opened */ @@ -42108,6 +43132,9 @@ static int winOpenSharedMemory(winFile *pDbFd){ if( pShmNode ){ sqlite3_free(pNew); }else{ + int inFlags = SQLITE_OPEN_WAL; + int outFlags = 0; + pShmNode = pNew; pNew = 0; ((winFile*)(&pShmNode->hFile))->h = INVALID_HANDLE_VALUE; @@ -42122,30 +43149,23 @@ static int winOpenSharedMemory(winFile *pDbFd){ } } - rc = winOpen(pDbFd->pVfs, - pShmNode->zFilename, /* Name of the file (UTF-8) */ - (sqlite3_file*)&pShmNode->hFile, /* File handle here */ - SQLITE_OPEN_WAL | SQLITE_OPEN_READWRITE | SQLITE_OPEN_CREATE, - 0); - if( SQLITE_OK!=rc ){ + if( 0==sqlite3_uri_boolean(pDbFd->zPath, "readonly_shm", 0) ){ + inFlags |= SQLITE_OPEN_READWRITE | SQLITE_OPEN_CREATE; + }else{ + inFlags |= SQLITE_OPEN_READONLY; + } + rc = winOpen(pDbFd->pVfs, pShmNode->zFilename, + (sqlite3_file*)&pShmNode->hFile, + inFlags, &outFlags); + if( rc!=SQLITE_OK ){ + rc = winLogError(rc, osGetLastError(), "winOpenShm", + pShmNode->zFilename); goto shm_open_err; } + if( outFlags==SQLITE_OPEN_READONLY ) pShmNode->isReadonly = 1; - /* Check to see if another process is holding the dead-man switch. - ** If not, truncate the file to zero length. - */ - if( winShmSystemLock(pShmNode, WINSHM_WRLCK, WIN_SHM_DMS, 1)==SQLITE_OK ){ - rc = winTruncate((sqlite3_file *)&pShmNode->hFile, 0); - if( rc!=SQLITE_OK ){ - rc = winLogError(SQLITE_IOERR_SHMOPEN, osGetLastError(), - "winOpenShm", pDbFd->zPath); - } - } - if( rc==SQLITE_OK ){ - winShmSystemLock(pShmNode, WINSHM_UNLCK, WIN_SHM_DMS, 1); - rc = winShmSystemLock(pShmNode, WINSHM_RDLCK, WIN_SHM_DMS, 1); - } - if( rc ) goto shm_open_err; + rc = winLockSharedMemory(pShmNode); + if( rc!=SQLITE_OK && rc!=SQLITE_READONLY_CANTINIT ) goto shm_open_err; } /* Make the new connection a child of the winShmNode */ @@ -42168,7 +43188,7 @@ static int winOpenSharedMemory(winFile *pDbFd){ p->pNext = pShmNode->pFirst; pShmNode->pFirst = p; sqlite3_mutex_leave(pShmNode->mutex); - return SQLITE_OK; + return rc; /* Jump here on any error */ shm_open_err: @@ -42372,6 +43392,8 @@ static int winShmMap( winFile *pDbFd = (winFile*)fd; winShm *pShm = pDbFd->pShm; winShmNode *pShmNode; + DWORD protect = PAGE_READWRITE; + DWORD flags = FILE_MAP_WRITE | FILE_MAP_READ; int rc = SQLITE_OK; if( !pShm ){ @@ -42382,6 +43404,11 @@ static int winShmMap( pShmNode = pShm->pShmNode; sqlite3_mutex_enter(pShmNode->mutex); + if( pShmNode->isUnlocked ){ + rc = winLockSharedMemory(pShmNode); + if( rc!=SQLITE_OK ) goto shmpage_out; + pShmNode->isUnlocked = 0; + } assert( szRegion==pShmNode->szRegion || pShmNode->nRegion==0 ); if( pShmNode->nRegion<=iRegion ){ @@ -42428,21 +43455,26 @@ static int winShmMap( } pShmNode->aRegion = apNew; + if( pShmNode->isReadonly ){ + protect = PAGE_READONLY; + flags = FILE_MAP_READ; + } + while( pShmNode->nRegion<=iRegion ){ HANDLE hMap = NULL; /* file-mapping handle */ void *pMap = 0; /* Mapped memory region */ #if SQLITE_OS_WINRT hMap = osCreateFileMappingFromApp(pShmNode->hFile.h, - NULL, PAGE_READWRITE, nByte, NULL + NULL, protect, nByte, NULL ); #elif defined(SQLITE_WIN32_HAS_WIDE) hMap = osCreateFileMappingW(pShmNode->hFile.h, - NULL, PAGE_READWRITE, 0, nByte, NULL + NULL, protect, 0, nByte, NULL ); #elif defined(SQLITE_WIN32_HAS_ANSI) && SQLITE_WIN32_CREATEFILEMAPPINGA hMap = osCreateFileMappingA(pShmNode->hFile.h, - NULL, PAGE_READWRITE, 0, nByte, NULL + NULL, protect, 0, nByte, NULL ); #endif OSTRACE(("SHM-MAP-CREATE pid=%lu, region=%d, size=%d, rc=%s\n", @@ -42452,11 +43484,11 @@ static int winShmMap( int iOffset = pShmNode->nRegion*szRegion; int iOffsetShift = iOffset % winSysInfo.dwAllocationGranularity; #if SQLITE_OS_WINRT - pMap = osMapViewOfFileFromApp(hMap, FILE_MAP_WRITE | FILE_MAP_READ, + pMap = osMapViewOfFileFromApp(hMap, flags, iOffset - iOffsetShift, szRegion + iOffsetShift ); #else - pMap = osMapViewOfFile(hMap, FILE_MAP_WRITE | FILE_MAP_READ, + pMap = osMapViewOfFile(hMap, flags, 0, iOffset - iOffsetShift, szRegion + iOffsetShift ); #endif @@ -42487,6 +43519,7 @@ shmpage_out: }else{ *pp = 0; } + if( pShmNode->isReadonly && rc==SQLITE_OK ) rc = SQLITE_READONLY; sqlite3_mutex_leave(pShmNode->mutex); return rc; } @@ -43315,8 +44348,10 @@ static int winOpen( &extendedParameters); if( h!=INVALID_HANDLE_VALUE ) break; if( isReadWrite ){ - int isRO = 0; - int rc2 = winAccess(pVfs, zName, SQLITE_ACCESS_READ, &isRO); + int rc2, isRO = 0; + sqlite3BeginBenignMalloc(); + rc2 = winAccess(pVfs, zName, SQLITE_ACCESS_READ, &isRO); + sqlite3EndBenignMalloc(); if( rc2==SQLITE_OK && isRO ) break; } }while( winRetryIoerr(&cnt, &lastErrno) ); @@ -43330,8 +44365,10 @@ static int winOpen( NULL); if( h!=INVALID_HANDLE_VALUE ) break; if( isReadWrite ){ - int isRO = 0; - int rc2 = winAccess(pVfs, zName, SQLITE_ACCESS_READ, &isRO); + int rc2, isRO = 0; + sqlite3BeginBenignMalloc(); + rc2 = winAccess(pVfs, zName, SQLITE_ACCESS_READ, &isRO); + sqlite3EndBenignMalloc(); if( rc2==SQLITE_OK && isRO ) break; } }while( winRetryIoerr(&cnt, &lastErrno) ); @@ -43348,8 +44385,10 @@ static int winOpen( NULL); if( h!=INVALID_HANDLE_VALUE ) break; if( isReadWrite ){ - int isRO = 0; - int rc2 = winAccess(pVfs, zName, SQLITE_ACCESS_READ, &isRO); + int rc2, isRO = 0; + sqlite3BeginBenignMalloc(); + rc2 = winAccess(pVfs, zName, SQLITE_ACCESS_READ, &isRO); + sqlite3EndBenignMalloc(); if( rc2==SQLITE_OK && isRO ) break; } }while( winRetryIoerr(&cnt, &lastErrno) ); @@ -44257,6 +45296,10 @@ SQLITE_API int sqlite3_os_init(void){ sqlite3_vfs_register(&winLongPathNolockVfs, 0); #endif +#ifndef SQLITE_OMIT_WAL + winBigLock = sqlite3MutexAlloc(SQLITE_MUTEX_STATIC_VFS1); +#endif + return SQLITE_OK; } @@ -44267,12 +45310,609 @@ SQLITE_API int sqlite3_os_end(void){ sleepObj = NULL; } #endif + +#ifndef SQLITE_OMIT_WAL + winBigLock = 0; +#endif + return SQLITE_OK; } #endif /* SQLITE_OS_WIN */ /************** End of os_win.c **********************************************/ +/************** Begin file memdb.c *******************************************/ +/* +** 2016-09-07 +** +** The author disclaims copyright to this source code. In place of +** a legal notice, here is a blessing: +** +** May you do good and not evil. +** May you find forgiveness for yourself and forgive others. +** May you share freely, never taking more than you give. +** +****************************************************************************** +** +** This file implements an in-memory VFS. A database is held as a contiguous +** block of memory. +** +** This file also implements interface sqlite3_serialize() and +** sqlite3_deserialize(). +*/ +#ifdef SQLITE_ENABLE_DESERIALIZE +/* #include "sqliteInt.h" */ + +/* +** Forward declaration of objects used by this utility +*/ +typedef struct sqlite3_vfs MemVfs; +typedef struct MemFile MemFile; + +/* Access to a lower-level VFS that (might) implement dynamic loading, +** access to randomness, etc. +*/ +#define ORIGVFS(p) ((sqlite3_vfs*)((p)->pAppData)) + +/* An open file */ +struct MemFile { + sqlite3_file base; /* IO methods */ + sqlite3_int64 sz; /* Size of the file */ + sqlite3_int64 szMax; /* Space allocated to aData */ + unsigned char *aData; /* content of the file */ + int nMmap; /* Number of memory mapped pages */ + unsigned mFlags; /* Flags */ + int eLock; /* Most recent lock against this file */ +}; + +/* +** Methods for MemFile +*/ +static int memdbClose(sqlite3_file*); +static int memdbRead(sqlite3_file*, void*, int iAmt, sqlite3_int64 iOfst); +static int memdbWrite(sqlite3_file*,const void*,int iAmt, sqlite3_int64 iOfst); +static int memdbTruncate(sqlite3_file*, sqlite3_int64 size); +static int memdbSync(sqlite3_file*, int flags); +static int memdbFileSize(sqlite3_file*, sqlite3_int64 *pSize); +static int memdbLock(sqlite3_file*, int); +/* static int memdbCheckReservedLock(sqlite3_file*, int *pResOut);// not used */ +static int memdbFileControl(sqlite3_file*, int op, void *pArg); +/* static int memdbSectorSize(sqlite3_file*); // not used */ +static int memdbDeviceCharacteristics(sqlite3_file*); +static int memdbFetch(sqlite3_file*, sqlite3_int64 iOfst, int iAmt, void **pp); +static int memdbUnfetch(sqlite3_file*, sqlite3_int64 iOfst, void *p); + +/* +** Methods for MemVfs +*/ +static int memdbOpen(sqlite3_vfs*, const char *, sqlite3_file*, int , int *); +/* static int memdbDelete(sqlite3_vfs*, const char *zName, int syncDir); */ +static int memdbAccess(sqlite3_vfs*, const char *zName, int flags, int *); +static int memdbFullPathname(sqlite3_vfs*, const char *zName, int, char *zOut); +static void *memdbDlOpen(sqlite3_vfs*, const char *zFilename); +static void memdbDlError(sqlite3_vfs*, int nByte, char *zErrMsg); +static void (*memdbDlSym(sqlite3_vfs *pVfs, void *p, const char*zSym))(void); +static void memdbDlClose(sqlite3_vfs*, void*); +static int memdbRandomness(sqlite3_vfs*, int nByte, char *zOut); +static int memdbSleep(sqlite3_vfs*, int microseconds); +/* static int memdbCurrentTime(sqlite3_vfs*, double*); */ +static int memdbGetLastError(sqlite3_vfs*, int, char *); +static int memdbCurrentTimeInt64(sqlite3_vfs*, sqlite3_int64*); + +static sqlite3_vfs memdb_vfs = { + 2, /* iVersion */ + 0, /* szOsFile (set when registered) */ + 1024, /* mxPathname */ + 0, /* pNext */ + "memdb", /* zName */ + 0, /* pAppData (set when registered) */ + memdbOpen, /* xOpen */ + 0, /* memdbDelete, */ /* xDelete */ + memdbAccess, /* xAccess */ + memdbFullPathname, /* xFullPathname */ + memdbDlOpen, /* xDlOpen */ + memdbDlError, /* xDlError */ + memdbDlSym, /* xDlSym */ + memdbDlClose, /* xDlClose */ + memdbRandomness, /* xRandomness */ + memdbSleep, /* xSleep */ + 0, /* memdbCurrentTime, */ /* xCurrentTime */ + memdbGetLastError, /* xGetLastError */ + memdbCurrentTimeInt64 /* xCurrentTimeInt64 */ +}; + +static const sqlite3_io_methods memdb_io_methods = { + 3, /* iVersion */ + memdbClose, /* xClose */ + memdbRead, /* xRead */ + memdbWrite, /* xWrite */ + memdbTruncate, /* xTruncate */ + memdbSync, /* xSync */ + memdbFileSize, /* xFileSize */ + memdbLock, /* xLock */ + memdbLock, /* xUnlock - same as xLock in this case */ + 0, /* memdbCheckReservedLock, */ /* xCheckReservedLock */ + memdbFileControl, /* xFileControl */ + 0, /* memdbSectorSize,*/ /* xSectorSize */ + memdbDeviceCharacteristics, /* xDeviceCharacteristics */ + 0, /* xShmMap */ + 0, /* xShmLock */ + 0, /* xShmBarrier */ + 0, /* xShmUnmap */ + memdbFetch, /* xFetch */ + memdbUnfetch /* xUnfetch */ +}; + + + +/* +** Close an memdb-file. +** +** The pData pointer is owned by the application, so there is nothing +** to free. +*/ +static int memdbClose(sqlite3_file *pFile){ + MemFile *p = (MemFile *)pFile; + if( p->mFlags & SQLITE_DESERIALIZE_FREEONCLOSE ) sqlite3_free(p->aData); + return SQLITE_OK; +} + +/* +** Read data from an memdb-file. +*/ +static int memdbRead( + sqlite3_file *pFile, + void *zBuf, + int iAmt, + sqlite_int64 iOfst +){ + MemFile *p = (MemFile *)pFile; + if( iOfst+iAmt>p->sz ){ + memset(zBuf, 0, iAmt); + if( iOfstsz ) memcpy(zBuf, p->aData+iOfst, p->sz - iOfst); + return SQLITE_IOERR_SHORT_READ; + } + memcpy(zBuf, p->aData+iOfst, iAmt); + return SQLITE_OK; +} + +/* +** Try to enlarge the memory allocation to hold at least sz bytes +*/ +static int memdbEnlarge(MemFile *p, sqlite3_int64 newSz){ + unsigned char *pNew; + if( (p->mFlags & SQLITE_DESERIALIZE_RESIZEABLE)==0 || p->nMmap>0 ){ + return SQLITE_FULL; + } + pNew = sqlite3_realloc64(p->aData, newSz); + if( pNew==0 ) return SQLITE_NOMEM; + p->aData = pNew; + p->szMax = newSz; + return SQLITE_OK; +} + +/* +** Write data to an memdb-file. +*/ +static int memdbWrite( + sqlite3_file *pFile, + const void *z, + int iAmt, + sqlite_int64 iOfst +){ + MemFile *p = (MemFile *)pFile; + if( iOfst+iAmt>p->sz ){ + int rc; + if( iOfst+iAmt>p->szMax + && (rc = memdbEnlarge(p, (iOfst+iAmt)*2))!=SQLITE_OK + ){ + return rc; + } + if( iOfst>p->sz ) memset(p->aData+p->sz, 0, iOfst-p->sz); + p->sz = iOfst+iAmt; + } + memcpy(p->aData+iOfst, z, iAmt); + return SQLITE_OK; +} + +/* +** Truncate an memdb-file. +** +** In rollback mode (which is always the case for memdb, as it does not +** support WAL mode) the truncate() method is only used to reduce +** the size of a file, never to increase the size. +*/ +static int memdbTruncate(sqlite3_file *pFile, sqlite_int64 size){ + MemFile *p = (MemFile *)pFile; + if( NEVER(size>p->sz) ) return SQLITE_FULL; + p->sz = size; + return SQLITE_OK; +} + +/* +** Sync an memdb-file. +*/ +static int memdbSync(sqlite3_file *pFile, int flags){ + return SQLITE_OK; +} + +/* +** Return the current file-size of an memdb-file. +*/ +static int memdbFileSize(sqlite3_file *pFile, sqlite_int64 *pSize){ + MemFile *p = (MemFile *)pFile; + *pSize = p->sz; + return SQLITE_OK; +} + +/* +** Lock an memdb-file. +*/ +static int memdbLock(sqlite3_file *pFile, int eLock){ + MemFile *p = (MemFile *)pFile; + p->eLock = eLock; + return SQLITE_OK; +} + +#if 0 /* Never used because memdbAccess() always returns false */ +/* +** Check if another file-handle holds a RESERVED lock on an memdb-file. +*/ +static int memdbCheckReservedLock(sqlite3_file *pFile, int *pResOut){ + *pResOut = 0; + return SQLITE_OK; +} +#endif + +/* +** File control method. For custom operations on an memdb-file. +*/ +static int memdbFileControl(sqlite3_file *pFile, int op, void *pArg){ + MemFile *p = (MemFile *)pFile; + int rc = SQLITE_NOTFOUND; + if( op==SQLITE_FCNTL_VFSNAME ){ + *(char**)pArg = sqlite3_mprintf("memdb(%p,%lld)", p->aData, p->sz); + rc = SQLITE_OK; + } + return rc; +} + +#if 0 /* Not used because of SQLITE_IOCAP_POWERSAFE_OVERWRITE */ +/* +** Return the sector-size in bytes for an memdb-file. +*/ +static int memdbSectorSize(sqlite3_file *pFile){ + return 1024; +} +#endif + +/* +** Return the device characteristic flags supported by an memdb-file. +*/ +static int memdbDeviceCharacteristics(sqlite3_file *pFile){ + return SQLITE_IOCAP_ATOMIC | + SQLITE_IOCAP_POWERSAFE_OVERWRITE | + SQLITE_IOCAP_SAFE_APPEND | + SQLITE_IOCAP_SEQUENTIAL; +} + +/* Fetch a page of a memory-mapped file */ +static int memdbFetch( + sqlite3_file *pFile, + sqlite3_int64 iOfst, + int iAmt, + void **pp +){ + MemFile *p = (MemFile *)pFile; + p->nMmap++; + *pp = (void*)(p->aData + iOfst); + return SQLITE_OK; +} + +/* Release a memory-mapped page */ +static int memdbUnfetch(sqlite3_file *pFile, sqlite3_int64 iOfst, void *pPage){ + MemFile *p = (MemFile *)pFile; + p->nMmap--; + return SQLITE_OK; +} + +/* +** Open an mem file handle. +*/ +static int memdbOpen( + sqlite3_vfs *pVfs, + const char *zName, + sqlite3_file *pFile, + int flags, + int *pOutFlags +){ + MemFile *p = (MemFile*)pFile; + if( (flags & SQLITE_OPEN_MAIN_DB)==0 ){ + return ORIGVFS(pVfs)->xOpen(ORIGVFS(pVfs), zName, pFile, flags, pOutFlags); + } + memset(p, 0, sizeof(*p)); + p->mFlags = SQLITE_DESERIALIZE_RESIZEABLE | SQLITE_DESERIALIZE_FREEONCLOSE; + assert( pOutFlags!=0 ); /* True because flags==SQLITE_OPEN_MAIN_DB */ + *pOutFlags = flags | SQLITE_OPEN_MEMORY; + p->base.pMethods = &memdb_io_methods; + return SQLITE_OK; +} + +#if 0 /* Only used to delete rollback journals, master journals, and WAL + ** files, none of which exist in memdb. So this routine is never used */ +/* +** Delete the file located at zPath. If the dirSync argument is true, +** ensure the file-system modifications are synced to disk before +** returning. +*/ +static int memdbDelete(sqlite3_vfs *pVfs, const char *zPath, int dirSync){ + return SQLITE_IOERR_DELETE; +} +#endif + +/* +** Test for access permissions. Return true if the requested permission +** is available, or false otherwise. +** +** With memdb, no files ever exist on disk. So always return false. +*/ +static int memdbAccess( + sqlite3_vfs *pVfs, + const char *zPath, + int flags, + int *pResOut +){ + *pResOut = 0; + return SQLITE_OK; +} + +/* +** Populate buffer zOut with the full canonical pathname corresponding +** to the pathname in zPath. zOut is guaranteed to point to a buffer +** of at least (INST_MAX_PATHNAME+1) bytes. +*/ +static int memdbFullPathname( + sqlite3_vfs *pVfs, + const char *zPath, + int nOut, + char *zOut +){ + sqlite3_snprintf(nOut, zOut, "%s", zPath); + return SQLITE_OK; +} + +/* +** Open the dynamic library located at zPath and return a handle. +*/ +static void *memdbDlOpen(sqlite3_vfs *pVfs, const char *zPath){ + return ORIGVFS(pVfs)->xDlOpen(ORIGVFS(pVfs), zPath); +} + +/* +** Populate the buffer zErrMsg (size nByte bytes) with a human readable +** utf-8 string describing the most recent error encountered associated +** with dynamic libraries. +*/ +static void memdbDlError(sqlite3_vfs *pVfs, int nByte, char *zErrMsg){ + ORIGVFS(pVfs)->xDlError(ORIGVFS(pVfs), nByte, zErrMsg); +} + +/* +** Return a pointer to the symbol zSymbol in the dynamic library pHandle. +*/ +static void (*memdbDlSym(sqlite3_vfs *pVfs, void *p, const char *zSym))(void){ + return ORIGVFS(pVfs)->xDlSym(ORIGVFS(pVfs), p, zSym); +} + +/* +** Close the dynamic library handle pHandle. +*/ +static void memdbDlClose(sqlite3_vfs *pVfs, void *pHandle){ + ORIGVFS(pVfs)->xDlClose(ORIGVFS(pVfs), pHandle); +} + +/* +** Populate the buffer pointed to by zBufOut with nByte bytes of +** random data. +*/ +static int memdbRandomness(sqlite3_vfs *pVfs, int nByte, char *zBufOut){ + return ORIGVFS(pVfs)->xRandomness(ORIGVFS(pVfs), nByte, zBufOut); +} + +/* +** Sleep for nMicro microseconds. Return the number of microseconds +** actually slept. +*/ +static int memdbSleep(sqlite3_vfs *pVfs, int nMicro){ + return ORIGVFS(pVfs)->xSleep(ORIGVFS(pVfs), nMicro); +} + +#if 0 /* Never used. Modern cores only call xCurrentTimeInt64() */ +/* +** Return the current time as a Julian Day number in *pTimeOut. +*/ +static int memdbCurrentTime(sqlite3_vfs *pVfs, double *pTimeOut){ + return ORIGVFS(pVfs)->xCurrentTime(ORIGVFS(pVfs), pTimeOut); +} +#endif + +static int memdbGetLastError(sqlite3_vfs *pVfs, int a, char *b){ + return ORIGVFS(pVfs)->xGetLastError(ORIGVFS(pVfs), a, b); +} +static int memdbCurrentTimeInt64(sqlite3_vfs *pVfs, sqlite3_int64 *p){ + return ORIGVFS(pVfs)->xCurrentTimeInt64(ORIGVFS(pVfs), p); +} + +/* +** Translate a database connection pointer and schema name into a +** MemFile pointer. +*/ +static MemFile *memdbFromDbSchema(sqlite3 *db, const char *zSchema){ + MemFile *p = 0; + int rc = sqlite3_file_control(db, zSchema, SQLITE_FCNTL_FILE_POINTER, &p); + if( rc ) return 0; + if( p->base.pMethods!=&memdb_io_methods ) return 0; + return p; +} + +/* +** Return the serialization of a database +*/ +SQLITE_API unsigned char *sqlite3_serialize( + sqlite3 *db, /* The database connection */ + const char *zSchema, /* Which database within the connection */ + sqlite3_int64 *piSize, /* Write size here, if not NULL */ + unsigned int mFlags /* Maybe SQLITE_SERIALIZE_NOCOPY */ +){ + MemFile *p; + int iDb; + Btree *pBt; + sqlite3_int64 sz; + int szPage = 0; + sqlite3_stmt *pStmt = 0; + unsigned char *pOut; + char *zSql; + int rc; + +#ifdef SQLITE_ENABLE_API_ARMOR + if( !sqlite3SafetyCheckOk(db) ){ + (void)SQLITE_MISUSE_BKPT; + return 0; + } +#endif + + if( zSchema==0 ) zSchema = db->aDb[0].zDbSName; + p = memdbFromDbSchema(db, zSchema); + iDb = sqlite3FindDbName(db, zSchema); + if( piSize ) *piSize = -1; + if( iDb<0 ) return 0; + if( p ){ + if( piSize ) *piSize = p->sz; + if( mFlags & SQLITE_SERIALIZE_NOCOPY ){ + pOut = p->aData; + }else{ + pOut = sqlite3_malloc64( p->sz ); + if( pOut ) memcpy(pOut, p->aData, p->sz); + } + return pOut; + } + pBt = db->aDb[iDb].pBt; + if( pBt==0 ) return 0; + szPage = sqlite3BtreeGetPageSize(pBt); + zSql = sqlite3_mprintf("PRAGMA \"%w\".page_count", zSchema); + rc = zSql ? sqlite3_prepare_v2(db, zSql, -1, &pStmt, 0) : SQLITE_NOMEM; + sqlite3_free(zSql); + if( rc ) return 0; + rc = sqlite3_step(pStmt); + if( rc!=SQLITE_ROW ){ + pOut = 0; + }else{ + sz = sqlite3_column_int64(pStmt, 0)*szPage; + if( piSize ) *piSize = sz; + if( mFlags & SQLITE_SERIALIZE_NOCOPY ){ + pOut = 0; + }else{ + pOut = sqlite3_malloc64( sz ); + if( pOut ){ + int nPage = sqlite3_column_int(pStmt, 0); + Pager *pPager = sqlite3BtreePager(pBt); + int pgno; + for(pgno=1; pgno<=nPage; pgno++){ + DbPage *pPage = 0; + unsigned char *pTo = pOut + szPage*(sqlite3_int64)(pgno-1); + rc = sqlite3PagerGet(pPager, pgno, (DbPage**)&pPage, 0); + if( rc==SQLITE_OK ){ + memcpy(pTo, sqlite3PagerGetData(pPage), szPage); + }else{ + memset(pTo, 0, szPage); + } + sqlite3PagerUnref(pPage); + } + } + } + } + sqlite3_finalize(pStmt); + return pOut; +} + +/* Convert zSchema to a MemDB and initialize its content. +*/ +SQLITE_API int sqlite3_deserialize( + sqlite3 *db, /* The database connection */ + const char *zSchema, /* Which DB to reopen with the deserialization */ + unsigned char *pData, /* The serialized database content */ + sqlite3_int64 szDb, /* Number bytes in the deserialization */ + sqlite3_int64 szBuf, /* Total size of buffer pData[] */ + unsigned mFlags /* Zero or more SQLITE_DESERIALIZE_* flags */ +){ + MemFile *p; + char *zSql; + sqlite3_stmt *pStmt = 0; + int rc; + int iDb; + +#ifdef SQLITE_ENABLE_API_ARMOR + if( !sqlite3SafetyCheckOk(db) ){ + return SQLITE_MISUSE_BKPT; + } + if( szDb<0 ) return SQLITE_MISUSE_BKPT; + if( szBuf<0 ) return SQLITE_MISUSE_BKPT; +#endif + + sqlite3_mutex_enter(db->mutex); + if( zSchema==0 ) zSchema = db->aDb[0].zDbSName; + iDb = sqlite3FindDbName(db, zSchema); + if( iDb<0 ){ + rc = SQLITE_ERROR; + goto end_deserialize; + } + zSql = sqlite3_mprintf("ATTACH x AS %Q", zSchema); + rc = sqlite3_prepare_v2(db, zSql, -1, &pStmt, 0); + sqlite3_free(zSql); + if( rc ) goto end_deserialize; + db->init.iDb = (u8)iDb; + db->init.reopenMemdb = 1; + rc = sqlite3_step(pStmt); + db->init.reopenMemdb = 0; + if( rc!=SQLITE_DONE ){ + rc = SQLITE_ERROR; + goto end_deserialize; + } + p = memdbFromDbSchema(db, zSchema); + if( p==0 ){ + rc = SQLITE_ERROR; + }else{ + p->aData = pData; + p->sz = szDb; + p->szMax = szBuf; + p->mFlags = mFlags; + rc = SQLITE_OK; + } + +end_deserialize: + sqlite3_finalize(pStmt); + sqlite3_mutex_leave(db->mutex); + return rc; +} + +/* +** This routine is called when the extension is loaded. +** Register the new VFS. +*/ +SQLITE_PRIVATE int sqlite3MemdbInit(void){ + sqlite3_vfs *pLower = sqlite3_vfs_find(0); + int sz = pLower->szOsFile; + memdb_vfs.pAppData = pLower; + /* In all known configurations of SQLite, the size of a default + ** sqlite3_file is greater than the size of a memdb sqlite3_file. + ** Should that ever change, remove the following NEVER() */ + if( NEVER(szpgno, pgno, - sqlite3GlobalConfig.pcache.xPagecount(pCache->pCache), + sqlite3GlobalConfig.pcache2.xPagecount(pCache->pCache), numberOfCachePages(pCache)); #endif pcacheTrace(("%p.SPILL %d\n",pCache,pPg->pgno)); @@ -45256,16 +46896,15 @@ SQLITE_PRIVATE void sqlite3PcacheMakeDirty(PgHdr *p){ */ SQLITE_PRIVATE void sqlite3PcacheMakeClean(PgHdr *p){ assert( sqlite3PcachePageSanity(p) ); - if( ALWAYS((p->flags & PGHDR_DIRTY)!=0) ){ - assert( (p->flags & PGHDR_CLEAN)==0 ); - pcacheManageDirtyList(p, PCACHE_DIRTYLIST_REMOVE); - p->flags &= ~(PGHDR_DIRTY|PGHDR_NEED_SYNC|PGHDR_WRITEABLE); - p->flags |= PGHDR_CLEAN; - pcacheTrace(("%p.CLEAN %d\n",p->pCache,p->pgno)); - assert( sqlite3PcachePageSanity(p) ); - if( p->nRef==0 ){ - pcacheUnpin(p); - } + assert( (p->flags & PGHDR_DIRTY)!=0 ); + assert( (p->flags & PGHDR_CLEAN)==0 ); + pcacheManageDirtyList(p, PCACHE_DIRTYLIST_REMOVE); + p->flags &= ~(PGHDR_DIRTY|PGHDR_NEED_SYNC|PGHDR_WRITEABLE); + p->flags |= PGHDR_CLEAN; + pcacheTrace(("%p.CLEAN %d\n",p->pCache,p->pgno)); + assert( sqlite3PcachePageSanity(p) ); + if( p->nRef==0 ){ + pcacheUnpin(p); } } @@ -48178,7 +49817,7 @@ struct Pager { char *zJournal; /* Name of the journal file */ int (*xBusyHandler)(void*); /* Function to call when busy */ void *pBusyHandlerArg; /* Context argument for xBusyHandler */ - int aStat[3]; /* Total cache hits, misses and writes */ + int aStat[4]; /* Total cache hits, misses, writes, spills */ #ifdef SQLITE_TEST int nRead; /* Database pages read */ #endif @@ -48206,6 +49845,7 @@ struct Pager { #define PAGER_STAT_HIT 0 #define PAGER_STAT_MISS 1 #define PAGER_STAT_WRITE 2 +#define PAGER_STAT_SPILL 3 /* ** The following global variables hold counters used for @@ -48692,7 +50332,7 @@ static int jrnlBufferSize(Pager *pPager){ #endif #ifdef SQLITE_ENABLE_BATCH_ATOMIC_WRITE - if( dc&SQLITE_IOCAP_BATCH_ATOMIC ){ + if( pPager->dbSize>0 && (dc&SQLITE_IOCAP_BATCH_ATOMIC) ){ return -1; } #endif @@ -49608,7 +51248,7 @@ static int pager_end_transaction(Pager *pPager, int hasMaster, int bCommit){ rc = pager_truncate(pPager, pPager->dbSize); } - if( rc==SQLITE_OK && bCommit && isOpen(pPager->fd) ){ + if( rc==SQLITE_OK && bCommit ){ rc = sqlite3OsFileControl(pPager->fd, SQLITE_FCNTL_COMMIT_PHASETWO, 0); if( rc==SQLITE_NOTFOUND ) rc = SQLITE_OK; } @@ -50427,9 +52067,7 @@ end_playback: ** assertion that the transaction counter was modified. */ #ifdef SQLITE_DEBUG - if( pPager->fd->pMethods ){ - sqlite3OsFileControlHint(pPager->fd,SQLITE_FCNTL_DB_UNCHANGED,0); - } + sqlite3OsFileControlHint(pPager->fd,SQLITE_FCNTL_DB_UNCHANGED,0); #endif /* If this playback is happening automatically as a result of an IO or @@ -51182,20 +52820,18 @@ static int pagerOpentemp( ** retried. If it returns zero, then the SQLITE_BUSY error is ** returned to the caller of the pager API function. */ -SQLITE_PRIVATE void sqlite3PagerSetBusyhandler( +SQLITE_PRIVATE void sqlite3PagerSetBusyHandler( Pager *pPager, /* Pager object */ int (*xBusyHandler)(void *), /* Pointer to busy-handler function */ void *pBusyHandlerArg /* Argument to pass to xBusyHandler */ ){ + void **ap; pPager->xBusyHandler = xBusyHandler; pPager->pBusyHandlerArg = pBusyHandlerArg; - - if( isOpen(pPager->fd) ){ - void **ap = (void **)&pPager->xBusyHandler; - assert( ((int(*)(void *))(ap[0]))==xBusyHandler ); - assert( ap[1]==pBusyHandlerArg ); - sqlite3OsFileControlHint(pPager->fd, SQLITE_FCNTL_BUSYHANDLER, (void *)ap); - } + ap = (void **)&pPager->xBusyHandler; + assert( ((int(*)(void *))(ap[0]))==xBusyHandler ); + assert( ap[1]==pBusyHandlerArg ); + sqlite3OsFileControlHint(pPager->fd, SQLITE_FCNTL_BUSYHANDLER, (void *)ap); } /* @@ -51581,6 +53217,30 @@ static void pagerFreeMapHdrs(Pager *pPager){ } } +/* Verify that the database file has not be deleted or renamed out from +** under the pager. Return SQLITE_OK if the database is still where it ought +** to be on disk. Return non-zero (SQLITE_READONLY_DBMOVED or some other error +** code from sqlite3OsAccess()) if the database has gone missing. +*/ +static int databaseIsUnmoved(Pager *pPager){ + int bHasMoved = 0; + int rc; + + if( pPager->tempFile ) return SQLITE_OK; + if( pPager->dbSize==0 ) return SQLITE_OK; + assert( pPager->zFilename && pPager->zFilename[0] ); + rc = sqlite3OsFileControl(pPager->fd, SQLITE_FCNTL_HAS_MOVED, &bHasMoved); + if( rc==SQLITE_NOTFOUND ){ + /* If the HAS_MOVED file-control is unimplemented, assume that the file + ** has not been moved. That is the historical behavior of SQLite: prior to + ** version 3.8.3, it never checked */ + rc = SQLITE_OK; + }else if( rc==SQLITE_OK && bHasMoved ){ + rc = SQLITE_READONLY_DBMOVED; + } + return rc; +} + /* ** Shutdown the page cache. Free all memory and close all files. @@ -51597,8 +53257,7 @@ static void pagerFreeMapHdrs(Pager *pPager){ ** to the caller. */ SQLITE_PRIVATE int sqlite3PagerClose(Pager *pPager, sqlite3 *db){ - u8 *pTmp = (u8 *)pPager->pTmpSpace; - + u8 *pTmp = (u8*)pPager->pTmpSpace; assert( db || pagerUseWal(pPager)==0 ); assert( assert_pager_state(pPager) ); disable_simulated_io_errors(); @@ -51607,11 +53266,17 @@ SQLITE_PRIVATE int sqlite3PagerClose(Pager *pPager, sqlite3 *db){ /* pPager->errCode = 0; */ pPager->exclusiveMode = 0; #ifndef SQLITE_OMIT_WAL - assert( db || pPager->pWal==0 ); - sqlite3WalClose(pPager->pWal, db, pPager->walSyncFlags, pPager->pageSize, - (db && (db->flags & SQLITE_NoCkptOnClose) ? 0 : pTmp) - ); - pPager->pWal = 0; + { + u8 *a = 0; + assert( db || pPager->pWal==0 ); + if( db && 0==(db->flags & SQLITE_NoCkptOnClose) + && SQLITE_OK==databaseIsUnmoved(pPager) + ){ + a = pTmp; + } + sqlite3WalClose(pPager->pWal, db, pPager->walSyncFlags, pPager->pageSize,a); + pPager->pWal = 0; + } #endif pager_reset(pPager); if( MEMDB ){ @@ -52068,6 +53733,7 @@ static int pagerStress(void *p, PgHdr *pPg){ return SQLITE_OK; } + pPager->aStat[PAGER_STAT_SPILL]++; pPg->pDirty = 0; if( pagerUseWal(pPager) ){ /* Write a single frame for this page to the log. */ @@ -52173,6 +53839,11 @@ SQLITE_PRIVATE int sqlite3PagerOpen( int rc = SQLITE_OK; /* Return code */ int tempFile = 0; /* True for temp files (incl. in-memory files) */ int memDb = 0; /* True if this is an in-memory file */ +#ifdef SQLITE_ENABLE_DESERIALIZE + int memJM = 0; /* Memory journal mode */ +#else +# define memJM 0 +#endif int readOnly = 0; /* True if this is a read-only file */ int journalFileSize; /* Bytes to allocate for each journal fd */ char *zPathname = 0; /* Full path to database file */ @@ -52300,7 +53971,10 @@ SQLITE_PRIVATE int sqlite3PagerOpen( int fout = 0; /* VFS flags returned by xOpen() */ rc = sqlite3OsOpen(pVfs, pPager->zFilename, pPager->fd, vfsFlags, &fout); assert( !memDb ); - readOnly = (fout&SQLITE_OPEN_READONLY); +#ifdef SQLITE_ENABLE_DESERIALIZE + memJM = (fout&SQLITE_OPEN_MEMORY)!=0; +#endif + readOnly = (fout&SQLITE_OPEN_READONLY)!=0; /* If the file was successfully opened for read/write access, ** choose a default page size in case we have to create the @@ -52431,7 +54105,7 @@ act_like_temp_file: setSectorSize(pPager); if( !useJournal ){ pPager->journalMode = PAGER_JOURNALMODE_OFF; - }else if( memDb ){ + }else if( memDb || memJM ){ pPager->journalMode = PAGER_JOURNALMODE_MEMORY; } /* pPager->xBusyHandler = 0; */ @@ -52446,30 +54120,6 @@ act_like_temp_file: } -/* Verify that the database file has not be deleted or renamed out from -** under the pager. Return SQLITE_OK if the database is still were it ought -** to be on disk. Return non-zero (SQLITE_READONLY_DBMOVED or some other error -** code from sqlite3OsAccess()) if the database has gone missing. -*/ -static int databaseIsUnmoved(Pager *pPager){ - int bHasMoved = 0; - int rc; - - if( pPager->tempFile ) return SQLITE_OK; - if( pPager->dbSize==0 ) return SQLITE_OK; - assert( pPager->zFilename && pPager->zFilename[0] ); - rc = sqlite3OsFileControl(pPager->fd, SQLITE_FCNTL_HAS_MOVED, &bHasMoved); - if( rc==SQLITE_NOTFOUND ){ - /* If the HAS_MOVED file-control is unimplemented, assume that the file - ** has not been moved. That is the historical behavior of SQLite: prior to - ** version 3.8.3, it never checked */ - rc = SQLITE_OK; - }else if( rc==SQLITE_OK && bHasMoved ){ - rc = SQLITE_READONLY_DBMOVED; - } - return rc; -} - /* ** This function is called after transitioning from PAGER_UNLOCK to @@ -53058,7 +54708,7 @@ static int getPageMMap( } if( pPg==0 ){ rc = pagerAcquireMapPage(pPager, pgno, pData, &pPg); - }else{ + }else{ sqlite3OsUnfetch(pPager->fd, (i64)(pgno-1)*pPager->pageSize, pData); } if( pPg ){ @@ -53157,6 +54807,7 @@ SQLITE_PRIVATE void sqlite3PagerUnrefPageOne(DbPage *pPg){ assert( pPg->pgno==1 ); assert( (pPg->flags & PGHDR_MMAP)==0 ); /* Page1 is never memory mapped */ pPager = pPg->pPager; + sqlite3PagerResetLockTimeout(pPager); sqlite3PcacheRelease(pPg); pagerUnlockIfUnused(pPager); } @@ -53752,12 +55403,9 @@ static int pager_incr_changecounter(Pager *pPager, int isDirectMode){ */ SQLITE_PRIVATE int sqlite3PagerSync(Pager *pPager, const char *zMaster){ int rc = SQLITE_OK; - - if( isOpen(pPager->fd) ){ - void *pArg = (void*)zMaster; - rc = sqlite3OsFileControl(pPager->fd, SQLITE_FCNTL_SYNC, pArg); - if( rc==SQLITE_NOTFOUND ) rc = SQLITE_OK; - } + void *pArg = (void*)zMaster; + rc = sqlite3OsFileControl(pPager->fd, SQLITE_FCNTL_SYNC, pArg); + if( rc==SQLITE_NOTFOUND ) rc = SQLITE_OK; if( rc==SQLITE_OK && !pPager->noSync ){ assert( !MEMDB ); rc = sqlite3OsSync(pPager->fd, pPager->syncFlags); @@ -53978,8 +55626,9 @@ SQLITE_PRIVATE int sqlite3PagerCommitPhaseOne( if( bBatch ){ if( rc==SQLITE_OK ){ rc = sqlite3OsFileControl(fd, SQLITE_FCNTL_COMMIT_ATOMIC_WRITE, 0); - }else{ - sqlite3OsFileControl(fd, SQLITE_FCNTL_ROLLBACK_ATOMIC_WRITE, 0); + } + if( rc!=SQLITE_OK ){ + sqlite3OsFileControlHint(fd, SQLITE_FCNTL_ROLLBACK_ATOMIC_WRITE, 0); } } @@ -54203,8 +55852,12 @@ SQLITE_PRIVATE int *sqlite3PagerStats(Pager *pPager){ #endif /* -** Parameter eStat must be either SQLITE_DBSTATUS_CACHE_HIT or -** SQLITE_DBSTATUS_CACHE_MISS. Before returning, *pnVal is incremented by the +** Parameter eStat must be one of SQLITE_DBSTATUS_CACHE_HIT, _MISS, _WRITE, +** or _WRITE+1. The SQLITE_DBSTATUS_CACHE_WRITE+1 case is a translation +** of SQLITE_DBSTATUS_CACHE_SPILL. The _SPILL case is not contiguous because +** it was added later. +** +** Before returning, *pnVal is incremented by the ** current cache hit or miss count, according to the value of eStat. If the ** reset parameter is non-zero, the cache hit or miss count is zeroed before ** returning. @@ -54214,15 +55867,18 @@ SQLITE_PRIVATE void sqlite3PagerCacheStat(Pager *pPager, int eStat, int reset, i assert( eStat==SQLITE_DBSTATUS_CACHE_HIT || eStat==SQLITE_DBSTATUS_CACHE_MISS || eStat==SQLITE_DBSTATUS_CACHE_WRITE + || eStat==SQLITE_DBSTATUS_CACHE_WRITE+1 ); assert( SQLITE_DBSTATUS_CACHE_HIT+1==SQLITE_DBSTATUS_CACHE_MISS ); assert( SQLITE_DBSTATUS_CACHE_HIT+2==SQLITE_DBSTATUS_CACHE_WRITE ); - assert( PAGER_STAT_HIT==0 && PAGER_STAT_MISS==1 && PAGER_STAT_WRITE==2 ); + assert( PAGER_STAT_HIT==0 && PAGER_STAT_MISS==1 + && PAGER_STAT_WRITE==2 && PAGER_STAT_SPILL==3 ); - *pnVal += pPager->aStat[eStat - SQLITE_DBSTATUS_CACHE_HIT]; + eStat -= SQLITE_DBSTATUS_CACHE_HIT; + *pnVal += pPager->aStat[eStat]; if( reset ){ - pPager->aStat[eStat - SQLITE_DBSTATUS_CACHE_HIT] = 0; + pPager->aStat[eStat] = 0; } } @@ -54426,6 +56082,16 @@ SQLITE_PRIVATE sqlite3_file *sqlite3PagerFile(Pager *pPager){ return pPager->fd; } +#ifdef SQLITE_ENABLE_SETLK_TIMEOUT +/* +** Reset the lock timeout for pager. +*/ +SQLITE_PRIVATE void sqlite3PagerResetLockTimeout(Pager *pPager){ + int x = 0; + sqlite3OsFileControl(pPager->fd, SQLITE_FCNTL_LOCK_TIMEOUT, &x); +} +#endif + /* ** Return the file handle for the journal file (if it exists). ** This will be either the rollback journal or the WAL file. @@ -54886,6 +56552,7 @@ SQLITE_PRIVATE int sqlite3PagerCheckpoint( pPager->walSyncFlags, pPager->pageSize, (u8 *)pPager->pTmpSpace, pnLog, pnCkpt ); + sqlite3PagerResetLockTimeout(pPager); } return rc; } @@ -55246,6 +56913,10 @@ SQLITE_PRIVATE int sqlite3PagerWalFramesize(Pager *pPager){ ** on a network filesystem. All users of the database must be able to ** share memory. ** +** In the default unix and windows implementation, the wal-index is a mmapped +** file whose name is the database name with a "-shm" suffix added. For that +** reason, the wal-index is sometimes called the "shm" file. +** ** The wal-index is transient. After a crash, the wal-index can (and should ** be) reconstructed from the original WAL file. In fact, the VFS is required ** to either truncate or zero the header of the wal-index when the last @@ -55385,9 +57056,18 @@ SQLITE_PRIVATE int sqlite3WalTrace = 0; #define WALINDEX_MAX_VERSION 3007000 /* -** Indices of various locking bytes. WAL_NREADER is the number +** Index numbers for various locking bytes. WAL_NREADER is the number ** of available reader locks and should be at least 3. The default ** is SQLITE_SHM_NLOCK==8 and WAL_NREADER==5. +** +** Technically, the various VFSes are free to implement these locks however +** they see fit. However, compatibility is encouraged so that VFSes can +** interoperate. The standard implemention used on both unix and windows +** is for the index number to indicate a byte offset into the +** WalCkptInfo.aLock[] array in the wal-index header. In other words, all +** locks are on the shm file. The WALINDEX_LOCK_OFFSET constant (which +** should be 120) is the location in the shm file for the first locking +** byte. */ #define WAL_WRITE_LOCK 0 #define WAL_ALL_BUT_WRITE 1 @@ -55511,7 +57191,6 @@ struct WalCkptInfo { #define WAL_FRAME_HDRSIZE 24 /* Size of write ahead log header, including checksum. */ -/* #define WAL_HDRSIZE 24 */ #define WAL_HDRSIZE 32 /* WAL magic value. Either this value, or the same value with the least @@ -55557,6 +57236,7 @@ struct Wal { u8 truncateOnCommit; /* True to truncate WAL file on commit */ u8 syncHeader; /* Fsync the WAL header if true */ u8 padToSectorBoundary; /* Pad transactions out to the next sector */ + u8 bShmUnreliable; /* SHM content is read-only and unreliable */ WalIndexHdr hdr; /* Wal-index header for current transaction */ u32 minFrame; /* Ignore wal frames before this one */ u32 iReCksum; /* On commit, recalculate checksums from here */ @@ -55646,11 +57326,20 @@ struct WalIterator { ** is broken into pages of WALINDEX_PGSZ bytes. Wal-index pages are ** numbered from zero. ** +** If the wal-index is currently smaller the iPage pages then the size +** of the wal-index might be increased, but only if it is safe to do +** so. It is safe to enlarge the wal-index if pWal->writeLock is true +** or pWal->exclusiveMode==WAL_HEAPMEMORY_MODE. +** ** If this call is successful, *ppPage is set to point to the wal-index ** page and SQLITE_OK is returned. If an error (an OOM or VFS error) occurs, ** then an SQLite error code is returned and *ppPage is set to 0. */ -static int walIndexPage(Wal *pWal, int iPage, volatile u32 **ppPage){ +static SQLITE_NOINLINE int walIndexPageRealloc( + Wal *pWal, /* The WAL context */ + int iPage, /* The page we seek */ + volatile u32 **ppPage /* Write the page pointer here */ +){ int rc = SQLITE_OK; /* Enlarge the pWal->apWiData[] array if required */ @@ -55669,16 +57358,19 @@ static int walIndexPage(Wal *pWal, int iPage, volatile u32 **ppPage){ } /* Request a pointer to the required page from the VFS */ - if( pWal->apWiData[iPage]==0 ){ - if( pWal->exclusiveMode==WAL_HEAPMEMORY_MODE ){ - pWal->apWiData[iPage] = (u32 volatile *)sqlite3MallocZero(WALINDEX_PGSZ); - if( !pWal->apWiData[iPage] ) rc = SQLITE_NOMEM_BKPT; - }else{ - rc = sqlite3OsShmMap(pWal->pDbFd, iPage, WALINDEX_PGSZ, - pWal->writeLock, (void volatile **)&pWal->apWiData[iPage] - ); + assert( pWal->apWiData[iPage]==0 ); + if( pWal->exclusiveMode==WAL_HEAPMEMORY_MODE ){ + pWal->apWiData[iPage] = (u32 volatile *)sqlite3MallocZero(WALINDEX_PGSZ); + if( !pWal->apWiData[iPage] ) rc = SQLITE_NOMEM_BKPT; + }else{ + rc = sqlite3OsShmMap(pWal->pDbFd, iPage, WALINDEX_PGSZ, + pWal->writeLock, (void volatile **)&pWal->apWiData[iPage] + ); + assert( pWal->apWiData[iPage]!=0 || rc!=SQLITE_OK || pWal->writeLock==0 ); + testcase( pWal->apWiData[iPage]==0 && rc==SQLITE_OK ); + if( (rc&0xff)==SQLITE_READONLY ){ + pWal->readOnly |= WAL_SHM_RDONLY; if( rc==SQLITE_READONLY ){ - pWal->readOnly |= WAL_SHM_RDONLY; rc = SQLITE_OK; } } @@ -55688,6 +57380,16 @@ static int walIndexPage(Wal *pWal, int iPage, volatile u32 **ppPage){ assert( iPage==0 || *ppPage || rc!=SQLITE_OK ); return rc; } +static int walIndexPage( + Wal *pWal, /* The WAL context */ + int iPage, /* The page we seek */ + volatile u32 **ppPage /* Write the page pointer here */ +){ + if( pWal->nWiData<=iPage || (*ppPage = pWal->apWiData[iPage])==0 ){ + return walIndexPageRealloc(pWal, iPage, ppPage); + } + return SQLITE_OK; +} /* ** Return a pointer to the WalCkptInfo structure in the wal-index. @@ -56201,7 +57903,6 @@ static int walIndexRecover(Wal *pWal){ i64 nSize; /* Size of log file */ u32 aFrameCksum[2] = {0, 0}; int iLock; /* Lock offset to lock for checkpoint */ - int nLock; /* Number of locks to hold */ /* Obtain an exclusive lock on all byte in the locking range not already ** locked by the caller. The caller is guaranteed to have locked the @@ -56214,11 +57915,17 @@ static int walIndexRecover(Wal *pWal){ assert( WAL_CKPT_LOCK==WAL_ALL_BUT_WRITE ); assert( pWal->writeLock ); iLock = WAL_ALL_BUT_WRITE + pWal->ckptLock; - nLock = SQLITE_SHM_NLOCK - iLock; - rc = walLockExclusive(pWal, iLock, nLock); + rc = walLockExclusive(pWal, iLock, WAL_READ_LOCK(0)-iLock); + if( rc==SQLITE_OK ){ + rc = walLockExclusive(pWal, WAL_READ_LOCK(1), WAL_NREADER-1); + if( rc!=SQLITE_OK ){ + walUnlockExclusive(pWal, iLock, WAL_READ_LOCK(0)-iLock); + } + } if( rc ){ return rc; } + WALTRACE(("WAL%p: recovery begin...\n", pWal)); memset(&pWal->hdr, 0, sizeof(WalIndexHdr)); @@ -56356,7 +58063,8 @@ finished: recovery_error: WALTRACE(("WAL%p: recovery %s\n", pWal, rc ? "failed" : "ok")); - walUnlockExclusive(pWal, iLock, nLock); + walUnlockExclusive(pWal, iLock, WAL_READ_LOCK(0)-iLock); + walUnlockExclusive(pWal, WAL_READ_LOCK(1), WAL_NREADER-1); return rc; } @@ -56364,13 +58072,14 @@ recovery_error: ** Close an open wal-index. */ static void walIndexClose(Wal *pWal, int isDelete){ - if( pWal->exclusiveMode==WAL_HEAPMEMORY_MODE ){ + if( pWal->exclusiveMode==WAL_HEAPMEMORY_MODE || pWal->bShmUnreliable ){ int i; for(i=0; inWiData; i++){ sqlite3_free((void *)pWal->apWiData[i]); pWal->apWiData[i] = 0; } - }else{ + } + if( pWal->exclusiveMode!=WAL_HEAPMEMORY_MODE ){ sqlite3OsShmUnmap(pWal->pDbFd, isDelete); } } @@ -56657,8 +58366,9 @@ static void walIteratorFree(WalIterator *p){ /* ** Construct a WalInterator object that can be used to loop over all -** pages in the WAL in ascending order. The caller must hold the checkpoint -** lock. +** pages in the WAL following frame nBackfill in ascending order. Frames +** nBackfill or earlier may be included - excluding them is an optimization +** only. The caller must hold the checkpoint lock. ** ** On success, make *pp point to the newly allocated WalInterator object ** return SQLITE_OK. Otherwise, return an error code. If this routine @@ -56667,7 +58377,7 @@ static void walIteratorFree(WalIterator *p){ ** The calling routine should invoke walIteratorFree() to destroy the ** WalIterator object when it has finished with it. */ -static int walIteratorInit(Wal *pWal, WalIterator **pp){ +static int walIteratorInit(Wal *pWal, u32 nBackfill, WalIterator **pp){ WalIterator *p; /* Return value */ int nSegment; /* Number of segments to merge */ u32 iLast; /* Last frame in log */ @@ -56704,7 +58414,7 @@ static int walIteratorInit(Wal *pWal, WalIterator **pp){ rc = SQLITE_NOMEM_BKPT; } - for(i=0; rc==SQLITE_OK && inBackfillhdr.mxFrame ){ - /* Allocate the iterator */ - rc = walIteratorInit(pWal, &pIter); - if( rc!=SQLITE_OK ){ - return rc; - } - assert( pIter ); - /* EVIDENCE-OF: R-62920-47450 The busy-handler callback is never invoked ** in the SQLITE_CHECKPOINT_PASSIVE mode. */ assert( eMode!=SQLITE_CHECKPOINT_PASSIVE || xBusy==0 ); @@ -56903,7 +58607,13 @@ static int walCheckpoint( } } - if( pInfo->nBackfillnBackfillnBackfill, &pIter); + assert( rc==SQLITE_OK || pIter==0 ); + } + + if( pIter && (rc = walBusyLock(pWal, xBusy, pBusyArg, WAL_READ_LOCK(0),1))==SQLITE_OK ){ i64 nSize; /* Current size of database file */ @@ -57163,6 +58873,12 @@ static int walIndexTryHdr(Wal *pWal, int *pChanged){ return 0; } +/* +** This is the value that walTryBeginRead returns when it needs to +** be retried. +*/ +#define WAL_RETRY (-1) + /* ** Read the wal-index header from the wal-index and into pWal->hdr. ** If the wal-header appears to be corrupt, try to reconstruct the @@ -57186,9 +58902,29 @@ static int walIndexReadHdr(Wal *pWal, int *pChanged){ assert( pChanged ); rc = walIndexPage(pWal, 0, &page0); if( rc!=SQLITE_OK ){ - return rc; - }; - assert( page0 || pWal->writeLock==0 ); + assert( rc!=SQLITE_READONLY ); /* READONLY changed to OK in walIndexPage */ + if( rc==SQLITE_READONLY_CANTINIT ){ + /* The SQLITE_READONLY_CANTINIT return means that the shared-memory + ** was openable but is not writable, and this thread is unable to + ** confirm that another write-capable connection has the shared-memory + ** open, and hence the content of the shared-memory is unreliable, + ** since the shared-memory might be inconsistent with the WAL file + ** and there is no writer on hand to fix it. */ + assert( page0==0 ); + assert( pWal->writeLock==0 ); + assert( pWal->readOnly & WAL_SHM_RDONLY ); + pWal->bShmUnreliable = 1; + pWal->exclusiveMode = WAL_HEAPMEMORY_MODE; + *pChanged = 1; + }else{ + return rc; /* Any other non-OK return is just an error */ + } + }else{ + /* page0 can be NULL if the SHM is zero bytes in size and pWal->writeLock + ** is zero, which prevents the SHM from growing */ + testcase( page0!=0 ); + } + assert( page0!=0 || pWal->writeLock==0 ); /* If the first page of the wal-index has been mapped, try to read the ** wal-index header immediately, without holding any lock. This usually @@ -57202,7 +58938,7 @@ static int walIndexReadHdr(Wal *pWal, int *pChanged){ */ assert( badHdr==0 || pWal->writeLock==0 ); if( badHdr ){ - if( pWal->readOnly & WAL_SHM_RDONLY ){ + if( pWal->bShmUnreliable==0 && (pWal->readOnly & WAL_SHM_RDONLY) ){ if( SQLITE_OK==(rc = walLockShared(pWal, WAL_WRITE_LOCK)) ){ walUnlockShared(pWal, WAL_WRITE_LOCK); rc = SQLITE_READONLY_RECOVERY; @@ -57232,15 +58968,193 @@ static int walIndexReadHdr(Wal *pWal, int *pChanged){ if( badHdr==0 && pWal->hdr.iVersion!=WALINDEX_MAX_VERSION ){ rc = SQLITE_CANTOPEN_BKPT; } + if( pWal->bShmUnreliable ){ + if( rc!=SQLITE_OK ){ + walIndexClose(pWal, 0); + pWal->bShmUnreliable = 0; + assert( pWal->nWiData>0 && pWal->apWiData[0]==0 ); + /* walIndexRecover() might have returned SHORT_READ if a concurrent + ** writer truncated the WAL out from under it. If that happens, it + ** indicates that a writer has fixed the SHM file for us, so retry */ + if( rc==SQLITE_IOERR_SHORT_READ ) rc = WAL_RETRY; + } + pWal->exclusiveMode = WAL_NORMAL_MODE; + } return rc; } /* -** This is the value that walTryBeginRead returns when it needs to -** be retried. +** Open a transaction in a connection where the shared-memory is read-only +** and where we cannot verify that there is a separate write-capable connection +** on hand to keep the shared-memory up-to-date with the WAL file. +** +** This can happen, for example, when the shared-memory is implemented by +** memory-mapping a *-shm file, where a prior writer has shut down and +** left the *-shm file on disk, and now the present connection is trying +** to use that database but lacks write permission on the *-shm file. +** Other scenarios are also possible, depending on the VFS implementation. +** +** Precondition: +** +** The *-wal file has been read and an appropriate wal-index has been +** constructed in pWal->apWiData[] using heap memory instead of shared +** memory. +** +** If this function returns SQLITE_OK, then the read transaction has +** been successfully opened. In this case output variable (*pChanged) +** is set to true before returning if the caller should discard the +** contents of the page cache before proceeding. Or, if it returns +** WAL_RETRY, then the heap memory wal-index has been discarded and +** the caller should retry opening the read transaction from the +** beginning (including attempting to map the *-shm file). +** +** If an error occurs, an SQLite error code is returned. */ -#define WAL_RETRY (-1) +static int walBeginShmUnreliable(Wal *pWal, int *pChanged){ + i64 szWal; /* Size of wal file on disk in bytes */ + i64 iOffset; /* Current offset when reading wal file */ + u8 aBuf[WAL_HDRSIZE]; /* Buffer to load WAL header into */ + u8 *aFrame = 0; /* Malloc'd buffer to load entire frame */ + int szFrame; /* Number of bytes in buffer aFrame[] */ + u8 *aData; /* Pointer to data part of aFrame buffer */ + volatile void *pDummy; /* Dummy argument for xShmMap */ + int rc; /* Return code */ + u32 aSaveCksum[2]; /* Saved copy of pWal->hdr.aFrameCksum */ + + assert( pWal->bShmUnreliable ); + assert( pWal->readOnly & WAL_SHM_RDONLY ); + assert( pWal->nWiData>0 && pWal->apWiData[0] ); + + /* Take WAL_READ_LOCK(0). This has the effect of preventing any + ** writers from running a checkpoint, but does not stop them + ** from running recovery. */ + rc = walLockShared(pWal, WAL_READ_LOCK(0)); + if( rc!=SQLITE_OK ){ + if( rc==SQLITE_BUSY ) rc = WAL_RETRY; + goto begin_unreliable_shm_out; + } + pWal->readLock = 0; + + /* Check to see if a separate writer has attached to the shared-memory area, + ** thus making the shared-memory "reliable" again. Do this by invoking + ** the xShmMap() routine of the VFS and looking to see if the return + ** is SQLITE_READONLY instead of SQLITE_READONLY_CANTINIT. + ** + ** If the shared-memory is now "reliable" return WAL_RETRY, which will + ** cause the heap-memory WAL-index to be discarded and the actual + ** shared memory to be used in its place. + ** + ** This step is important because, even though this connection is holding + ** the WAL_READ_LOCK(0) which prevents a checkpoint, a writer might + ** have already checkpointed the WAL file and, while the current + ** is active, wrap the WAL and start overwriting frames that this + ** process wants to use. + ** + ** Once sqlite3OsShmMap() has been called for an sqlite3_file and has + ** returned any SQLITE_READONLY value, it must return only SQLITE_READONLY + ** or SQLITE_READONLY_CANTINIT or some error for all subsequent invocations, + ** even if some external agent does a "chmod" to make the shared-memory + ** writable by us, until sqlite3OsShmUnmap() has been called. + ** This is a requirement on the VFS implementation. + */ + rc = sqlite3OsShmMap(pWal->pDbFd, 0, WALINDEX_PGSZ, 0, &pDummy); + assert( rc!=SQLITE_OK ); /* SQLITE_OK not possible for read-only connection */ + if( rc!=SQLITE_READONLY_CANTINIT ){ + rc = (rc==SQLITE_READONLY ? WAL_RETRY : rc); + goto begin_unreliable_shm_out; + } + + /* We reach this point only if the real shared-memory is still unreliable. + ** Assume the in-memory WAL-index substitute is correct and load it + ** into pWal->hdr. + */ + memcpy(&pWal->hdr, (void*)walIndexHdr(pWal), sizeof(WalIndexHdr)); + + /* Make sure some writer hasn't come in and changed the WAL file out + ** from under us, then disconnected, while we were not looking. + */ + rc = sqlite3OsFileSize(pWal->pWalFd, &szWal); + if( rc!=SQLITE_OK ){ + goto begin_unreliable_shm_out; + } + if( szWalhdr.mxFrame==0 ? SQLITE_OK : WAL_RETRY); + goto begin_unreliable_shm_out; + } + + /* Check the salt keys at the start of the wal file still match. */ + rc = sqlite3OsRead(pWal->pWalFd, aBuf, WAL_HDRSIZE, 0); + if( rc!=SQLITE_OK ){ + goto begin_unreliable_shm_out; + } + if( memcmp(&pWal->hdr.aSalt, &aBuf[16], 8) ){ + /* Some writer has wrapped the WAL file while we were not looking. + ** Return WAL_RETRY which will cause the in-memory WAL-index to be + ** rebuilt. */ + rc = WAL_RETRY; + goto begin_unreliable_shm_out; + } + + /* Allocate a buffer to read frames into */ + szFrame = pWal->hdr.szPage + WAL_FRAME_HDRSIZE; + aFrame = (u8 *)sqlite3_malloc64(szFrame); + if( aFrame==0 ){ + rc = SQLITE_NOMEM_BKPT; + goto begin_unreliable_shm_out; + } + aData = &aFrame[WAL_FRAME_HDRSIZE]; + + /* Check to see if a complete transaction has been appended to the + ** wal file since the heap-memory wal-index was created. If so, the + ** heap-memory wal-index is discarded and WAL_RETRY returned to + ** the caller. */ + aSaveCksum[0] = pWal->hdr.aFrameCksum[0]; + aSaveCksum[1] = pWal->hdr.aFrameCksum[1]; + for(iOffset=walFrameOffset(pWal->hdr.mxFrame+1, pWal->hdr.szPage); + iOffset+szFrame<=szWal; + iOffset+=szFrame + ){ + u32 pgno; /* Database page number for frame */ + u32 nTruncate; /* dbsize field from frame header */ + + /* Read and decode the next log frame. */ + rc = sqlite3OsRead(pWal->pWalFd, aFrame, szFrame, iOffset); + if( rc!=SQLITE_OK ) break; + if( !walDecodeFrame(pWal, &pgno, &nTruncate, aData, aFrame) ) break; + + /* If nTruncate is non-zero, then a complete transaction has been + ** appended to this wal file. Set rc to WAL_RETRY and break out of + ** the loop. */ + if( nTruncate ){ + rc = WAL_RETRY; + break; + } + } + pWal->hdr.aFrameCksum[0] = aSaveCksum[0]; + pWal->hdr.aFrameCksum[1] = aSaveCksum[1]; + + begin_unreliable_shm_out: + sqlite3_free(aFrame); + if( rc!=SQLITE_OK ){ + int i; + for(i=0; inWiData; i++){ + sqlite3_free((void*)pWal->apWiData[i]); + pWal->apWiData[i] = 0; + } + pWal->bShmUnreliable = 0; + sqlite3WalEndReadTransaction(pWal); + *pChanged = 1; + } + return rc; +} /* ** Attempt to start a read transaction. This might fail due to a race or @@ -57256,7 +59170,7 @@ static int walIndexReadHdr(Wal *pWal, int *pChanged){ ** checkpointed. If useWal==0 then this routine calls walIndexReadHdr() ** to make a copy of the wal-index header into pWal->hdr. If the ** wal-index header has changed, *pChanged is set to 1 (as an indication -** to the caller that the local paget cache is obsolete and needs to be +** to the caller that the local page cache is obsolete and needs to be ** flushed.) When useWal==1, the wal-index header is assumed to already ** be loaded and the pChanged parameter is unused. ** @@ -57302,6 +59216,9 @@ static int walTryBeginRead(Wal *pWal, int *pChanged, int useWal, int cnt){ assert( pWal->readLock<0 ); /* Not currently locked */ + /* useWal may only be set for read/write connections */ + assert( (pWal->readOnly & WAL_SHM_RDONLY)==0 || useWal==0 ); + /* Take steps to avoid spinning forever if there is a protocol error. ** ** Circumstances that cause a RETRY should only last for the briefest @@ -57330,7 +59247,10 @@ static int walTryBeginRead(Wal *pWal, int *pChanged, int useWal, int cnt){ } if( !useWal ){ - rc = walIndexReadHdr(pWal, pChanged); + assert( rc==SQLITE_OK ); + if( pWal->bShmUnreliable==0 ){ + rc = walIndexReadHdr(pWal, pChanged); + } if( rc==SQLITE_BUSY ){ /* If there is not a recovery running in another thread or process ** then convert BUSY errors to WAL_RETRY. If recovery is known to @@ -57359,13 +59279,17 @@ static int walTryBeginRead(Wal *pWal, int *pChanged, int useWal, int cnt){ if( rc!=SQLITE_OK ){ return rc; } + else if( pWal->bShmUnreliable ){ + return walBeginShmUnreliable(pWal, pChanged); + } } + assert( pWal->nWiData>0 ); + assert( pWal->apWiData[0]!=0 ); pInfo = walCkptInfo(pWal); - if( !useWal && pInfo->nBackfill==pWal->hdr.mxFrame + if( !useWal && pInfo->nBackfill==pWal->hdr.mxFrame #ifdef SQLITE_ENABLE_SNAPSHOT - && (pWal->pSnapshot==0 || pWal->hdr.mxFrame==0 - || 0==memcmp(&pWal->hdr, pWal->pSnapshot, sizeof(WalIndexHdr))) + && (pWal->pSnapshot==0 || pWal->hdr.mxFrame==0) #endif ){ /* The WAL has been completely backfilled (or it is empty). @@ -57436,7 +59360,7 @@ static int walTryBeginRead(Wal *pWal, int *pChanged, int useWal, int cnt){ } if( mxI==0 ){ assert( rc==SQLITE_BUSY || (pWal->readOnly & WAL_SHM_RDONLY)!=0 ); - return rc==SQLITE_BUSY ? WAL_RETRY : SQLITE_READONLY_CANTLOCK; + return rc==SQLITE_BUSY ? WAL_RETRY : SQLITE_READONLY_CANTINIT; } rc = walLockShared(pWal, WAL_READ_LOCK(mxI)); @@ -57708,7 +59632,7 @@ SQLITE_PRIVATE int sqlite3WalFindFrame( ** then the WAL is ignored by the reader so return early, as if the ** WAL were empty. */ - if( iLast==0 || pWal->readLock==0 ){ + if( iLast==0 || (pWal->readLock==0 && pWal->bShmUnreliable==0) ){ *piRead = 0; return SQLITE_OK; } @@ -57739,7 +59663,7 @@ SQLITE_PRIVATE int sqlite3WalFindFrame( ** table after the current read-transaction had started. */ iMinHash = walFramePage(pWal->minFrame); - for(iHash=walFramePage(iLast); iHash>=iMinHash && iRead==0; iHash--){ + for(iHash=walFramePage(iLast); iHash>=iMinHash; iHash--){ volatile ht_slot *aHash; /* Pointer to hash table */ volatile u32 *aPgno; /* Pointer to array of page numbers */ u32 iZero; /* Frame number corresponding to aPgno[0] */ @@ -57762,6 +59686,7 @@ SQLITE_PRIVATE int sqlite3WalFindFrame( return SQLITE_CORRUPT_BKPT; } } + if( iRead ) break; } #ifdef SQLITE_ENABLE_EXPENSIVE_ASSERT @@ -57771,8 +59696,8 @@ SQLITE_PRIVATE int sqlite3WalFindFrame( { u32 iRead2 = 0; u32 iTest; - assert( pWal->minFrame>0 ); - for(iTest=iLast; iTest>=pWal->minFrame; iTest--){ + assert( pWal->bShmUnreliable || pWal->minFrame>0 ); + for(iTest=iLast; iTest>=pWal->minFrame && iTest>0; iTest--){ if( walFramePgno(pWal, iTest)==pgno ){ iRead2 = iTest; break; @@ -58548,24 +60473,24 @@ SQLITE_PRIVATE int sqlite3WalExclusiveMode(Wal *pWal, int op){ assert( pWal->readLock>=0 || (op<=0 && pWal->exclusiveMode==0) ); if( op==0 ){ - if( pWal->exclusiveMode ){ - pWal->exclusiveMode = 0; + if( pWal->exclusiveMode!=WAL_NORMAL_MODE ){ + pWal->exclusiveMode = WAL_NORMAL_MODE; if( walLockShared(pWal, WAL_READ_LOCK(pWal->readLock))!=SQLITE_OK ){ - pWal->exclusiveMode = 1; + pWal->exclusiveMode = WAL_EXCLUSIVE_MODE; } - rc = pWal->exclusiveMode==0; + rc = pWal->exclusiveMode==WAL_NORMAL_MODE; }else{ /* Already in locking_mode=NORMAL */ rc = 0; } }else if( op>0 ){ - assert( pWal->exclusiveMode==0 ); + assert( pWal->exclusiveMode==WAL_NORMAL_MODE ); assert( pWal->readLock>=0 ); walUnlockShared(pWal, WAL_READ_LOCK(pWal->readLock)); - pWal->exclusiveMode = 1; + pWal->exclusiveMode = WAL_EXCLUSIVE_MODE; rc = 1; }else{ - rc = pWal->exclusiveMode==0; + rc = pWal->exclusiveMode==WAL_NORMAL_MODE; } return rc; } @@ -59176,20 +61101,20 @@ struct BtCursor { u8 curFlags; /* zero or more BTCF_* flags defined below */ u8 curPagerFlags; /* Flags to send to sqlite3PagerGet() */ u8 hints; /* As configured by CursorSetHints() */ - int nOvflAlloc; /* Allocated size of aOverflow[] array */ - Btree *pBtree; /* The Btree to which this cursor belongs */ - BtShared *pBt; /* The BtShared this cursor points to */ - BtCursor *pNext; /* Forms a linked list of all cursors */ - Pgno *aOverflow; /* Cache of overflow page locations */ - CellInfo info; /* A parse of the cell we are pointing at */ - i64 nKey; /* Size of pKey, or last integer key */ - void *pKey; /* Saved key that was cursor last known position */ - Pgno pgnoRoot; /* The root page of this tree */ int skipNext; /* Prev() is noop if negative. Next() is noop if positive. ** Error code if eState==CURSOR_FAULT */ + Btree *pBtree; /* The Btree to which this cursor belongs */ + Pgno *aOverflow; /* Cache of overflow page locations */ + void *pKey; /* Saved key that was cursor last known position */ /* All fields above are zeroed when the cursor is allocated. See ** sqlite3BtreeCursorZero(). Fields that follow must be manually ** initialized. */ +#define BTCURSOR_FIRST_UNINIT pBt /* Name of first uninitialized field */ + BtShared *pBt; /* The BtShared this cursor points to */ + BtCursor *pNext; /* Forms a linked list of all cursors */ + CellInfo info; /* A parse of the cell we are pointing at */ + i64 nKey; /* Size of pKey, or last integer key */ + Pgno pgnoRoot; /* The root page of this tree */ i8 iPage; /* Index of current page in apPage */ u8 curIntKey; /* Value of apPage[0]->intKey */ u16 ix; /* Current index for apPage[iPage] */ @@ -59239,8 +61164,8 @@ struct BtCursor { ** Do nothing else with this cursor. Any attempt to use the cursor ** should return the error code stored in BtCursor.skipNext */ -#define CURSOR_INVALID 0 -#define CURSOR_VALID 1 +#define CURSOR_VALID 0 +#define CURSOR_INVALID 1 #define CURSOR_SKIPNEXT 2 #define CURSOR_REQUIRESEEK 3 #define CURSOR_FAULT 4 @@ -59785,6 +61710,34 @@ SQLITE_API int sqlite3_enable_shared_cache(int enable){ #define hasReadConflicts(a, b) 0 #endif +/* +** Implementation of the SQLITE_CORRUPT_PAGE() macro. Takes a single +** (MemPage*) as an argument. The (MemPage*) must not be NULL. +** +** If SQLITE_DEBUG is not defined, then this macro is equivalent to +** SQLITE_CORRUPT_BKPT. Or, if SQLITE_DEBUG is set, then the log message +** normally produced as a side-effect of SQLITE_CORRUPT_BKPT is augmented +** with the page number and filename associated with the (MemPage*). +*/ +#ifdef SQLITE_DEBUG +int corruptPageError(int lineno, MemPage *p){ + char *zMsg; + sqlite3BeginBenignMalloc(); + zMsg = sqlite3_mprintf("database corruption page %d of %s", + (int)p->pgno, sqlite3PagerFilename(p->pBt->pPager, 0) + ); + sqlite3EndBenignMalloc(); + if( zMsg ){ + sqlite3ReportError(SQLITE_CORRUPT, lineno, zMsg); + } + sqlite3_free(zMsg); + return SQLITE_CORRUPT_BKPT; +} +# define SQLITE_CORRUPT_PAGE(pMemPage) corruptPageError(__LINE__, pMemPage) +#else +# define SQLITE_CORRUPT_PAGE(pMemPage) SQLITE_CORRUPT_PGNO(pMemPage->pgno) +#endif + #ifndef SQLITE_OMIT_SHARED_CACHE #ifdef SQLITE_DEBUG @@ -61073,7 +63026,7 @@ static int defragmentPage(MemPage *pPage, int nMaxFrag){ int sz = get2byte(&data[iFree+2]); int top = get2byte(&data[hdr+5]); if( top>=iFree ){ - return SQLITE_CORRUPT_PGNO(pPage->pgno); + return SQLITE_CORRUPT_PAGE(pPage); } if( iFree2 ){ assert( iFree+sz<=iFree2 ); /* Verified by pageFindSlot() */ @@ -61107,13 +63060,13 @@ static int defragmentPage(MemPage *pPage, int nMaxFrag){ ** if PRAGMA cell_size_check=ON. */ if( pciCellLast ){ - return SQLITE_CORRUPT_PGNO(pPage->pgno); + return SQLITE_CORRUPT_PAGE(pPage); } assert( pc>=iCellFirst && pc<=iCellLast ); size = pPage->xCellSize(pPage, &src[pc]); cbrk -= size; if( cbrkusableSize ){ - return SQLITE_CORRUPT_PGNO(pPage->pgno); + return SQLITE_CORRUPT_PAGE(pPage); } assert( cbrk+size<=usableSize && cbrk>=iCellFirst ); testcase( cbrk+size==usableSize ); @@ -61133,7 +63086,7 @@ static int defragmentPage(MemPage *pPage, int nMaxFrag){ defragment_out: if( data[hdr+7]+cbrk-iCellFirst!=pPage->nFree ){ - return SQLITE_CORRUPT_PGNO(pPage->pgno); + return SQLITE_CORRUPT_PAGE(pPage); } assert( cbrk>=iCellFirst ); put2byte(&data[hdr+5], cbrk); @@ -61177,7 +63130,7 @@ static u8 *pageFindSlot(MemPage *pPg, int nByte, int *pRc){ testcase( x==4 ); testcase( x==3 ); if( size+pc > usableSize ){ - *pRc = SQLITE_CORRUPT_PGNO(pPg->pgno); + *pRc = SQLITE_CORRUPT_PAGE(pPg); return 0; }else if( x<4 ){ /* EVIDENCE-OF: R-11498-58022 In a well-formed b-tree page, the total @@ -61200,7 +63153,7 @@ static u8 *pageFindSlot(MemPage *pPg, int nByte, int *pRc){ if( pcpgno); + *pRc = SQLITE_CORRUPT_PAGE(pPg); } return 0; @@ -61248,7 +63201,7 @@ static int allocateSpace(MemPage *pPage, int nByte, int *pIdx){ if( top==0 && pPage->pBt->usableSize==65536 ){ top = 65536; }else{ - return SQLITE_CORRUPT_PGNO(pPage->pgno); + return SQLITE_CORRUPT_PAGE(pPage); } } @@ -61338,12 +63291,12 @@ static int freeSpace(MemPage *pPage, u16 iStart, u16 iSize){ while( (iFreeBlk = get2byte(&data[iPtr]))pgno); + return SQLITE_CORRUPT_PAGE(pPage); } iPtr = iFreeBlk; } if( iFreeBlk>pPage->pBt->usableSize-4 ){ - return SQLITE_CORRUPT_PGNO(pPage->pgno); + return SQLITE_CORRUPT_PAGE(pPage); } assert( iFreeBlk>iPtr || iFreeBlk==0 ); @@ -61355,10 +63308,10 @@ static int freeSpace(MemPage *pPage, u16 iStart, u16 iSize){ */ if( iFreeBlk && iEnd+3>=iFreeBlk ){ nFrag = iFreeBlk - iEnd; - if( iEnd>iFreeBlk ) return SQLITE_CORRUPT_PGNO(pPage->pgno); + if( iEnd>iFreeBlk ) return SQLITE_CORRUPT_PAGE(pPage); iEnd = iFreeBlk + get2byte(&data[iFreeBlk+2]); if( iEnd > pPage->pBt->usableSize ){ - return SQLITE_CORRUPT_PGNO(pPage->pgno); + return SQLITE_CORRUPT_PAGE(pPage); } iSize = iEnd - iStart; iFreeBlk = get2byte(&data[iFreeBlk]); @@ -61371,13 +63324,13 @@ static int freeSpace(MemPage *pPage, u16 iStart, u16 iSize){ if( iPtr>hdr+1 ){ int iPtrEnd = iPtr + get2byte(&data[iPtr+2]); if( iPtrEnd+3>=iStart ){ - if( iPtrEnd>iStart ) return SQLITE_CORRUPT_PGNO(pPage->pgno); + if( iPtrEnd>iStart ) return SQLITE_CORRUPT_PAGE(pPage); nFrag += iStart - iPtrEnd; iSize = iEnd - iPtr; iStart = iPtr; } } - if( nFrag>data[hdr+7] ) return SQLITE_CORRUPT_PGNO(pPage->pgno); + if( nFrag>data[hdr+7] ) return SQLITE_CORRUPT_PAGE(pPage); data[hdr+7] -= nFrag; } x = get2byte(&data[hdr+5]); @@ -61385,7 +63338,7 @@ static int freeSpace(MemPage *pPage, u16 iStart, u16 iSize){ /* The new freeblock is at the beginning of the cell content area, ** so just extend the cell content area rather than create another ** freelist entry */ - if( iStartpgno); + if( iStartpgno); + return SQLITE_CORRUPT_PAGE(pPage); } pPage->max1bytePayload = pBt->max1bytePayload; return SQLITE_OK; @@ -61499,7 +63452,7 @@ static int btreeInitPage(MemPage *pPage){ /* EVIDENCE-OF: R-28594-02890 The one-byte flag at offset 0 indicating ** the b-tree page type. */ if( decodeFlags(pPage, data[hdr]) ){ - return SQLITE_CORRUPT_PGNO(pPage->pgno); + return SQLITE_CORRUPT_PAGE(pPage); } assert( pBt->pageSize>=512 && pBt->pageSize<=65536 ); pPage->maskPage = (u16)(pBt->pageSize - 1); @@ -61518,7 +63471,7 @@ static int btreeInitPage(MemPage *pPage){ pPage->nCell = get2byte(&data[hdr+3]); if( pPage->nCell>MX_CELL(pBt) ){ /* To many cells for a single page. The page must be corrupt */ - return SQLITE_CORRUPT_PGNO(pPage->pgno); + return SQLITE_CORRUPT_PAGE(pPage); } testcase( pPage->nCell==MX_CELL(pBt) ); /* EVIDENCE-OF: R-24089-57979 If a page contains no cells (which is only @@ -61546,12 +63499,12 @@ static int btreeInitPage(MemPage *pPage){ testcase( pc==iCellFirst ); testcase( pc==iCellLast ); if( pciCellLast ){ - return SQLITE_CORRUPT_PGNO(pPage->pgno); + return SQLITE_CORRUPT_PAGE(pPage); } sz = pPage->xCellSize(pPage, &data[pc]); testcase( pc+sz==usableSize ); if( pc+sz>usableSize ){ - return SQLITE_CORRUPT_PGNO(pPage->pgno); + return SQLITE_CORRUPT_PAGE(pPage); } } if( !pPage->leaf ) iCellLast++; @@ -61569,12 +63522,12 @@ static int btreeInitPage(MemPage *pPage){ /* EVIDENCE-OF: R-55530-52930 In a well-formed b-tree page, there will ** always be at least one cell before the first freeblock. */ - return SQLITE_CORRUPT_PGNO(pPage->pgno); + return SQLITE_CORRUPT_PAGE(pPage); } while( 1 ){ if( pc>iCellLast ){ /* Freeblock off the end of the page */ - return SQLITE_CORRUPT_PGNO(pPage->pgno); + return SQLITE_CORRUPT_PAGE(pPage); } next = get2byte(&data[pc]); size = get2byte(&data[pc+2]); @@ -61584,11 +63537,11 @@ static int btreeInitPage(MemPage *pPage){ } if( next>0 ){ /* Freeblock not in ascending order */ - return SQLITE_CORRUPT_PGNO(pPage->pgno); + return SQLITE_CORRUPT_PAGE(pPage); } if( pc+size>(unsigned int)usableSize ){ /* Last freeblock extends past page end */ - return SQLITE_CORRUPT_PGNO(pPage->pgno); + return SQLITE_CORRUPT_PAGE(pPage); } } @@ -61600,7 +63553,7 @@ static int btreeInitPage(MemPage *pPage){ ** area, according to the page header, lies within the page. */ if( nFree>usableSize ){ - return SQLITE_CORRUPT_PGNO(pPage->pgno); + return SQLITE_CORRUPT_PAGE(pPage); } pPage->nFree = (u16)(nFree - iCellFirst); pPage->isInit = 1; @@ -61876,7 +63829,8 @@ static int btreeInvokeBusyHandler(void *pArg){ BtShared *pBt = (BtShared*)pArg; assert( pBt->db ); assert( sqlite3_mutex_held(pBt->db->mutex) ); - return sqlite3InvokeBusyHandler(&pBt->db->busyHandler); + return sqlite3InvokeBusyHandler(&pBt->db->busyHandler, + sqlite3PagerFile(pBt->pPager)); } /* @@ -62054,7 +64008,7 @@ SQLITE_PRIVATE int sqlite3BtreeOpen( } pBt->openFlags = (u8)flags; pBt->db = db; - sqlite3PagerSetBusyhandler(pBt->pPager, btreeInvokeBusyHandler, pBt); + sqlite3PagerSetBusyHandler(pBt->pPager, btreeInvokeBusyHandler, pBt); p->pBt = pBt; pBt->pCursor = 0; @@ -63017,6 +64971,7 @@ SQLITE_PRIVATE int sqlite3BtreeBeginTrans(Btree *p, int wrflag){ } }while( (rc&0xFF)==SQLITE_BUSY && pBt->inTransaction==TRANS_NONE && btreeInvokeBusyHandler(pBt) ); + sqlite3PagerResetLockTimeout(pBt->pPager); if( rc==SQLITE_OK ){ if( p->inTrans==TRANS_NONE ){ @@ -63131,7 +65086,7 @@ static int modifyPagePointer(MemPage *pPage, Pgno iFrom, Pgno iTo, u8 eType){ if( eType==PTRMAP_OVERFLOW2 ){ /* The pointer is always the first 4 bytes of the page in this case. */ if( get4byte(pPage->aData)!=iFrom ){ - return SQLITE_CORRUPT_PGNO(pPage->pgno); + return SQLITE_CORRUPT_PAGE(pPage); } put4byte(pPage->aData, iTo); }else{ @@ -63150,7 +65105,7 @@ static int modifyPagePointer(MemPage *pPage, Pgno iFrom, Pgno iTo, u8 eType){ pPage->xParseCell(pPage, pCell, &info); if( info.nLocal pPage->aData+pPage->pBt->usableSize ){ - return SQLITE_CORRUPT_PGNO(pPage->pgno); + return SQLITE_CORRUPT_PAGE(pPage); } if( iFrom==get4byte(pCell+info.nSize-4) ){ put4byte(pCell+info.nSize-4, iTo); @@ -63168,7 +65123,7 @@ static int modifyPagePointer(MemPage *pPage, Pgno iFrom, Pgno iTo, u8 eType){ if( i==nCell ){ if( eType!=PTRMAP_BTREE || get4byte(&pPage->aData[pPage->hdrOffset+8])!=iFrom ){ - return SQLITE_CORRUPT_PGNO(pPage->pgno); + return SQLITE_CORRUPT_PAGE(pPage); } put4byte(&pPage->aData[pPage->hdrOffset+8], iTo); } @@ -63990,7 +65945,7 @@ SQLITE_PRIVATE int sqlite3BtreeCursorSize(void){ ** of run-time by skipping the initialization of those elements. */ SQLITE_PRIVATE void sqlite3BtreeCursorZero(BtCursor *p){ - memset(p, 0, offsetof(BtCursor, iPage)); + memset(p, 0, offsetof(BtCursor, BTCURSOR_FIRST_UNINIT)); } /* @@ -64033,11 +65988,19 @@ SQLITE_PRIVATE int sqlite3BtreeCloseCursor(BtCursor *pCur){ ** Using this cache reduces the number of calls to btreeParseCell(). */ #ifndef NDEBUG + static int cellInfoEqual(CellInfo *a, CellInfo *b){ + if( a->nKey!=b->nKey ) return 0; + if( a->pPayload!=b->pPayload ) return 0; + if( a->nPayload!=b->nPayload ) return 0; + if( a->nLocal!=b->nLocal ) return 0; + if( a->nSize!=b->nSize ) return 0; + return 1; + } static void assertCellInfo(BtCursor *pCur){ CellInfo info; memset(&info, 0, sizeof(info)); btreeParseCell(pCur->pPage, pCur->ix, &info); - assert( CORRUPT_DB || memcmp(&info, &pCur->info, sizeof(info))==0 ); + assert( CORRUPT_DB || cellInfoEqual(&info, &pCur->info) ); } #else #define assertCellInfo(x) @@ -64080,6 +66043,20 @@ SQLITE_PRIVATE i64 sqlite3BtreeIntegerKey(BtCursor *pCur){ return pCur->info.nKey; } +#ifdef SQLITE_ENABLE_OFFSET_SQL_FUNC +/* +** Return the offset into the database file for the start of the +** payload to which the cursor is pointing. +*/ +SQLITE_PRIVATE i64 sqlite3BtreeOffset(BtCursor *pCur){ + assert( cursorHoldsMutex(pCur) ); + assert( pCur->eState==CURSOR_VALID ); + getCellInfo(pCur); + return (i64)pCur->pBt->pageSize*((i64)pCur->pPage->pgno - 1) + + (i64)(pCur->info.pPayload - pCur->pPage->aData); +} +#endif /* SQLITE_ENABLE_OFFSET_SQL_FUNC */ + /* ** Return the number of bytes of payload for the entry that pCur is ** currently pointing to. For table btrees, this will be the amount @@ -64266,7 +66243,7 @@ static int accessPayload( ** &aPayload[pCur->info.nLocal] > &pPage->aData[pBt->usableSize] ** but is recast into its current form to avoid integer overflow problems */ - return SQLITE_CORRUPT_PGNO(pPage->pgno); + return SQLITE_CORRUPT_PAGE(pPage); } /* Check if data must be read/written to/from the btree page itself. */ @@ -64299,14 +66276,15 @@ static int accessPayload( */ if( (pCur->curFlags & BTCF_ValidOvfl)==0 ){ int nOvfl = (pCur->info.nPayload-pCur->info.nLocal+ovflSize-1)/ovflSize; - if( nOvfl>pCur->nOvflAlloc ){ + if( pCur->aOverflow==0 + || nOvfl*(int)sizeof(Pgno) > sqlite3MallocSize(pCur->aOverflow) + ){ Pgno *aNew = (Pgno*)sqlite3Realloc( pCur->aOverflow, nOvfl*2*sizeof(Pgno) ); if( aNew==0 ){ return SQLITE_NOMEM_BKPT; }else{ - pCur->nOvflAlloc = nOvfl*2; pCur->aOverflow = aNew; } } @@ -64414,7 +66392,7 @@ static int accessPayload( if( rc==SQLITE_OK && amt>0 ){ /* Overflow chain ends prematurely */ - return SQLITE_CORRUPT_PGNO(pPage->pgno); + return SQLITE_CORRUPT_PAGE(pPage); } return rc; } @@ -64692,7 +66670,7 @@ static int moveToRoot(BtCursor *pCur){ ** (or the freelist). */ assert( pRoot->intKey==1 || pRoot->intKey==0 ); if( pRoot->isInit==0 || (pCur->pKeyInfo==0)!=pRoot->intKey ){ - return SQLITE_CORRUPT_PGNO(pCur->pPage->pgno); + return SQLITE_CORRUPT_PAGE(pCur->pPage); } skip_init: @@ -64965,7 +66943,7 @@ SQLITE_PRIVATE int sqlite3BtreeMovetoUnpacked( if( pPage->intKeyLeaf ){ while( 0x80 <= *(pCell++) ){ if( pCell>=pPage->aDataEnd ){ - return SQLITE_CORRUPT_PGNO(pPage->pgno); + return SQLITE_CORRUPT_PAGE(pPage); } } } @@ -65039,7 +67017,7 @@ SQLITE_PRIVATE int sqlite3BtreeMovetoUnpacked( testcase( nCell==1 ); /* Invalid key size: 0x80 0x80 0x01 */ testcase( nCell==2 ); /* Minimum legal index key size */ if( nCell<2 ){ - rc = SQLITE_CORRUPT_PGNO(pPage->pgno); + rc = SQLITE_CORRUPT_PAGE(pPage); goto moveto_finish; } pCellKey = sqlite3Malloc( nCell+18 ); @@ -65820,9 +67798,8 @@ static void freePage(MemPage *pPage, int *pRC){ } /* -** Free any overflow pages associated with the given Cell. Write the -** local Cell size (the number of bytes on the original page, omitting -** overflow) into *pnSize. +** Free any overflow pages associated with the given Cell. Store +** size information about the cell in pInfo. */ static int clearCell( MemPage *pPage, /* The page that contains the Cell */ @@ -65842,7 +67819,7 @@ static int clearCell( } if( pCell+pInfo->nSize-1 > pPage->aData+pPage->maskPage ){ /* Cell extends past end of page */ - return SQLITE_CORRUPT_PGNO(pPage->pgno); + return SQLITE_CORRUPT_PAGE(pPage); } ovflPgno = get4byte(pCell + pInfo->nSize - 4); pBt = pPage->pBt; @@ -67026,7 +69003,7 @@ static int balance_nonroot( } /* Load b.apCell[] with pointers to all cells in pOld. If pOld - ** constains overflow cells, include them in the b.apCell[] array + ** contains overflow cells, include them in the b.apCell[] array ** in the correct spot. ** ** Note that when there are multiple overflow cells, it is always the @@ -70461,7 +72438,7 @@ SQLITE_PRIVATE int sqlite3VdbeCheckMemInvariants(Mem *p){ if( p->flags & MEM_Null ){ /* Cannot be both MEM_Null and some other type */ assert( (p->flags & (MEM_Int|MEM_Real|MEM_Str|MEM_Blob - |MEM_RowSet|MEM_Frame|MEM_Agg|MEM_Zero))==0 ); + |MEM_RowSet|MEM_Frame|MEM_Agg))==0 ); /* If MEM_Null is set, then either the value is a pure NULL (the usual ** case) or it is a pointer set using sqlite3_bind_pointer() or @@ -70511,6 +72488,51 @@ SQLITE_PRIVATE int sqlite3VdbeCheckMemInvariants(Mem *p){ } #endif +#ifdef SQLITE_DEBUG +/* +** Check that string value of pMem agrees with its integer or real value. +** +** A single int or real value always converts to the same strings. But +** many different strings can be converted into the same int or real. +** If a table contains a numeric value and an index is based on the +** corresponding string value, then it is important that the string be +** derived from the numeric value, not the other way around, to ensure +** that the index and table are consistent. See ticket +** https://www.sqlite.org/src/info/343634942dd54ab (2018-01-31) for +** an example. +** +** This routine looks at pMem to verify that if it has both a numeric +** representation and a string representation then the string rep has +** been derived from the numeric and not the other way around. It returns +** true if everything is ok and false if there is a problem. +** +** This routine is for use inside of assert() statements only. +*/ +SQLITE_PRIVATE int sqlite3VdbeMemConsistentDualRep(Mem *p){ + char zBuf[100]; + char *z; + int i, j, incr; + if( (p->flags & MEM_Str)==0 ) return 1; + if( (p->flags & (MEM_Int|MEM_Real))==0 ) return 1; + if( p->flags & MEM_Int ){ + sqlite3_snprintf(sizeof(zBuf),zBuf,"%lld",p->u.i); + }else{ + sqlite3_snprintf(sizeof(zBuf),zBuf,"%!.15g",p->u.r); + } + z = p->z; + i = j = 0; + incr = 1; + if( p->enc!=SQLITE_UTF8 ){ + incr = 2; + if( p->enc==SQLITE_UTF16BE ) z++; + } + while( zBuf[j] ){ + if( zBuf[j++]!=z[i] ) return 0; + i += incr; + } + return 1; +} +#endif /* SQLITE_DEBUG */ /* ** If pMem is an object with a valid string representation, this routine @@ -70768,26 +72790,24 @@ SQLITE_PRIVATE int sqlite3VdbeMemStringify(Mem *pMem, u8 enc, u8 bForce){ ** otherwise. */ SQLITE_PRIVATE int sqlite3VdbeMemFinalize(Mem *pMem, FuncDef *pFunc){ - int rc = SQLITE_OK; - if( ALWAYS(pFunc && pFunc->xFinalize) ){ - sqlite3_context ctx; - Mem t; - assert( (pMem->flags & MEM_Null)!=0 || pFunc==pMem->u.pDef ); - assert( pMem->db==0 || sqlite3_mutex_held(pMem->db->mutex) ); - memset(&ctx, 0, sizeof(ctx)); - memset(&t, 0, sizeof(t)); - t.flags = MEM_Null; - t.db = pMem->db; - ctx.pOut = &t; - ctx.pMem = pMem; - ctx.pFunc = pFunc; - pFunc->xFinalize(&ctx); /* IMP: R-24505-23230 */ - assert( (pMem->flags & MEM_Dyn)==0 ); - if( pMem->szMalloc>0 ) sqlite3DbFreeNN(pMem->db, pMem->zMalloc); - memcpy(pMem, &t, sizeof(t)); - rc = ctx.isError; - } - return rc; + sqlite3_context ctx; + Mem t; + assert( pFunc!=0 ); + assert( pFunc->xFinalize!=0 ); + assert( (pMem->flags & MEM_Null)!=0 || pFunc==pMem->u.pDef ); + assert( pMem->db==0 || sqlite3_mutex_held(pMem->db->mutex) ); + memset(&ctx, 0, sizeof(ctx)); + memset(&t, 0, sizeof(t)); + t.flags = MEM_Null; + t.db = pMem->db; + ctx.pOut = &t; + ctx.pMem = pMem; + ctx.pFunc = pFunc; + pFunc->xFinalize(&ctx); /* IMP: R-24505-23230 */ + assert( (pMem->flags & MEM_Dyn)==0 ); + if( pMem->szMalloc>0 ) sqlite3DbFreeNN(pMem->db, pMem->zMalloc); + memcpy(pMem, &t, sizeof(t)); + return ctx.isError; } /* @@ -70947,6 +72967,16 @@ SQLITE_PRIVATE double sqlite3VdbeRealValue(Mem *pMem){ } } +/* +** Return 1 if pMem represents true, and return 0 if pMem represents false. +** Return the value ifNull if pMem is NULL. +*/ +SQLITE_PRIVATE int sqlite3VdbeBooleanValue(Mem *pMem, int ifNull){ + if( pMem->flags & MEM_Int ) return pMem->u.i!=0; + if( pMem->flags & MEM_Null ) return ifNull; + return sqlite3VdbeRealValue(pMem)!=0.0; +} + /* ** The MEM structure is already a MEM_Real. Try to also make it a ** MEM_Int if we can. @@ -71002,6 +73032,18 @@ SQLITE_PRIVATE int sqlite3VdbeMemRealify(Mem *pMem){ return SQLITE_OK; } +/* Compare a floating point value to an integer. Return true if the two +** values are the same within the precision of the floating point value. +** +** For some versions of GCC on 32-bit machines, if you do the more obvious +** comparison of "r1==(double)i" you sometimes get an answer of false even +** though the r1 and (double)i values are bit-for-bit the same. +*/ +static int sqlite3RealSameAsInt(double r1, sqlite3_int64 i){ + double r2 = (double)i; + return memcmp(&r1, &r2, sizeof(r1))==0; +} + /* ** Convert pMem so that it has types MEM_Real or MEM_Int or both. ** Invalidate any prior representations. @@ -71021,7 +73063,7 @@ SQLITE_PRIVATE int sqlite3VdbeMemNumerify(Mem *pMem){ }else{ i64 i = pMem->u.i; sqlite3AtoF(pMem->z, &pMem->u.r, pMem->n, pMem->enc); - if( rc==1 && pMem->u.r==(double)i ){ + if( rc==1 && sqlite3RealSameAsInt(pMem->u.r, i) ){ pMem->u.i = i; MemSetTypeFlag(pMem, MEM_Int); }else{ @@ -71504,6 +73546,7 @@ static SQLITE_NOINLINE const void *valueToText(sqlite3_value* pVal, u8 enc){ assert(pVal->enc==(enc & ~SQLITE_UTF16_ALIGNED) || pVal->db==0 || pVal->db->mallocFailed ); if( pVal->enc==(enc & ~SQLITE_UTF16_ALIGNED) ){ + assert( sqlite3VdbeMemConsistentDualRep(pVal) ); return pVal->z; }else{ return 0; @@ -71526,6 +73569,7 @@ SQLITE_PRIVATE const void *sqlite3ValueText(sqlite3_value* pVal, u8 enc){ assert( (enc&3)==(enc&~SQLITE_UTF16_ALIGNED) ); assert( (pVal->flags & MEM_RowSet)==0 ); if( (pVal->flags&(MEM_Str|MEM_Term))==(MEM_Str|MEM_Term) && pVal->enc==enc ){ + assert( sqlite3VdbeMemConsistentDualRep(pVal) ); return pVal->z; } if( pVal->flags&MEM_Null ){ @@ -71741,7 +73785,11 @@ static int valueFromExpr( assert( pExpr!=0 ); while( (op = pExpr->op)==TK_UPLUS || op==TK_SPAN ) pExpr = pExpr->pLeft; +#if defined(SQLITE_ENABLE_STAT3_OR_STAT4) + if( op==TK_REGISTER ) op = pExpr->op2; +#else if( NEVER(op==TK_REGISTER) ) op = pExpr->op2; +#endif /* Compressed expressions only appear when parsing the DEFAULT clause ** on a table column definition, and hence only when pCtx==0. This @@ -71836,7 +73884,10 @@ static int valueFromExpr( return rc; no_mem: - sqlite3OomFault(db); +#ifdef SQLITE_ENABLE_STAT3_OR_STAT4 + if( pCtx==0 || pCtx->pParse->nErr==0 ) +#endif + sqlite3OomFault(db); sqlite3DbFree(db, zVal); assert( *ppVal==0 ); #ifdef SQLITE_ENABLE_STAT3_OR_STAT4 @@ -73049,6 +75100,7 @@ static void freeP4(sqlite3 *db, int p4type, void *p4){ case P4_REAL: case P4_INT64: case P4_DYNAMIC: + case P4_DYNBLOB: case P4_INTARRAY: { sqlite3DbFree(db, p4); break; @@ -73590,6 +75642,7 @@ static char *displayP4(Op *pOp, char *zTemp, int nTemp){ sqlite3XPrintf(&x, "program"); break; } + case P4_DYNBLOB: case P4_ADVANCE: { zTemp[0] = 0; break; @@ -73822,6 +75875,8 @@ SQLITE_PRIVATE int sqlite3VdbeList( int i; /* Loop counter */ int rc = SQLITE_OK; /* Return code */ Mem *pMem = &p->aMem[1]; /* First Mem of result set */ + int bListSubprogs = (p->explain==1 || (db->flags & SQLITE_TriggerEQP)!=0); + Op *pOp = 0; assert( p->explain ); assert( p->magic==VDBE_MAGIC_RUN ); @@ -73834,7 +75889,7 @@ SQLITE_PRIVATE int sqlite3VdbeList( releaseMemArray(pMem, 8); p->pResultSet = 0; - if( p->rc==SQLITE_NOMEM_BKPT ){ + if( p->rc==SQLITE_NOMEM ){ /* This happens if a malloc() inside a call to sqlite3_column_text() or ** sqlite3_column_text16() failed. */ sqlite3OomFault(db); @@ -73849,7 +75904,7 @@ SQLITE_PRIVATE int sqlite3VdbeList( ** encountered, but p->pc will eventually catch up to nRow. */ nRow = p->nOp; - if( p->explain==1 ){ + if( bListSubprogs ){ /* The first 8 memory cells are used for the result set. So we will ** commandeer the 9th cell to use as storage for an array of pointers ** to trigger subprograms. The VDBE is guaranteed to have at least 9 @@ -73869,17 +75924,11 @@ SQLITE_PRIVATE int sqlite3VdbeList( do{ i = p->pc++; - }while( iexplain==2 && p->aOp[i].opcode!=OP_Explain ); - if( i>=nRow ){ - p->rc = SQLITE_OK; - rc = SQLITE_DONE; - }else if( db->u1.isInterrupted ){ - p->rc = SQLITE_INTERRUPT; - rc = SQLITE_ERROR; - sqlite3VdbeError(p, sqlite3ErrStr(p->rc)); - }else{ - char *zP4; - Op *pOp; + if( i>=nRow ){ + p->rc = SQLITE_OK; + rc = SQLITE_DONE; + break; + } if( inOp ){ /* The output line number is small enough that we are still in the ** main program. */ @@ -73894,94 +75943,110 @@ SQLITE_PRIVATE int sqlite3VdbeList( } pOp = &apSub[j]->aOp[i]; } - if( p->explain==1 ){ - pMem->flags = MEM_Int; - pMem->u.i = i; /* Program counter */ - pMem++; - - pMem->flags = MEM_Static|MEM_Str|MEM_Term; - pMem->z = (char*)sqlite3OpcodeName(pOp->opcode); /* Opcode */ - assert( pMem->z!=0 ); - pMem->n = sqlite3Strlen30(pMem->z); - pMem->enc = SQLITE_UTF8; - pMem++; - /* When an OP_Program opcode is encounter (the only opcode that has - ** a P4_SUBPROGRAM argument), expand the size of the array of subprograms - ** kept in p->aMem[9].z to hold the new program - assuming this subprogram - ** has not already been seen. - */ - if( pOp->p4type==P4_SUBPROGRAM ){ - int nByte = (nSub+1)*sizeof(SubProgram*); - int j; - for(j=0; jp4.pProgram ) break; - } - if( j==nSub && SQLITE_OK==sqlite3VdbeMemGrow(pSub, nByte, nSub!=0) ){ - apSub = (SubProgram **)pSub->z; - apSub[nSub++] = pOp->p4.pProgram; - pSub->flags |= MEM_Blob; - pSub->n = nSub*sizeof(SubProgram*); + /* When an OP_Program opcode is encounter (the only opcode that has + ** a P4_SUBPROGRAM argument), expand the size of the array of subprograms + ** kept in p->aMem[9].z to hold the new program - assuming this subprogram + ** has not already been seen. + */ + if( bListSubprogs && pOp->p4type==P4_SUBPROGRAM ){ + int nByte = (nSub+1)*sizeof(SubProgram*); + int j; + for(j=0; jp4.pProgram ) break; + } + if( j==nSub ){ + p->rc = sqlite3VdbeMemGrow(pSub, nByte, nSub!=0); + if( p->rc!=SQLITE_OK ){ + rc = SQLITE_ERROR; + break; } + apSub = (SubProgram **)pSub->z; + apSub[nSub++] = pOp->p4.pProgram; + pSub->flags |= MEM_Blob; + pSub->n = nSub*sizeof(SubProgram*); + nRow += pOp->p4.pProgram->nOp; } } + }while( p->explain==2 && pOp->opcode!=OP_Explain ); - pMem->flags = MEM_Int; - pMem->u.i = pOp->p1; /* P1 */ - pMem++; - - pMem->flags = MEM_Int; - pMem->u.i = pOp->p2; /* P2 */ - pMem++; - - pMem->flags = MEM_Int; - pMem->u.i = pOp->p3; /* P3 */ - pMem++; - - if( sqlite3VdbeMemClearAndResize(pMem, 100) ){ /* P4 */ - assert( p->db->mallocFailed ); - return SQLITE_ERROR; - } - pMem->flags = MEM_Str|MEM_Term; - zP4 = displayP4(pOp, pMem->z, pMem->szMalloc); - if( zP4!=pMem->z ){ - pMem->n = 0; - sqlite3VdbeMemSetStr(pMem, zP4, -1, SQLITE_UTF8, 0); + if( rc==SQLITE_OK ){ + if( db->u1.isInterrupted ){ + p->rc = SQLITE_INTERRUPT; + rc = SQLITE_ERROR; + sqlite3VdbeError(p, sqlite3ErrStr(p->rc)); }else{ - assert( pMem->z!=0 ); - pMem->n = sqlite3Strlen30(pMem->z); - pMem->enc = SQLITE_UTF8; - } - pMem++; - - if( p->explain==1 ){ - if( sqlite3VdbeMemClearAndResize(pMem, 4) ){ - assert( p->db->mallocFailed ); - return SQLITE_ERROR; + char *zP4; + if( p->explain==1 ){ + pMem->flags = MEM_Int; + pMem->u.i = i; /* Program counter */ + pMem++; + + pMem->flags = MEM_Static|MEM_Str|MEM_Term; + pMem->z = (char*)sqlite3OpcodeName(pOp->opcode); /* Opcode */ + assert( pMem->z!=0 ); + pMem->n = sqlite3Strlen30(pMem->z); + pMem->enc = SQLITE_UTF8; + pMem++; } - pMem->flags = MEM_Str|MEM_Term; - pMem->n = 2; - sqlite3_snprintf(3, pMem->z, "%.2x", pOp->p5); /* P5 */ - pMem->enc = SQLITE_UTF8; + + pMem->flags = MEM_Int; + pMem->u.i = pOp->p1; /* P1 */ pMem++; - -#ifdef SQLITE_ENABLE_EXPLAIN_COMMENTS - if( sqlite3VdbeMemClearAndResize(pMem, 500) ){ + + pMem->flags = MEM_Int; + pMem->u.i = pOp->p2; /* P2 */ + pMem++; + + pMem->flags = MEM_Int; + pMem->u.i = pOp->p3; /* P3 */ + pMem++; + + if( sqlite3VdbeMemClearAndResize(pMem, 100) ){ /* P4 */ assert( p->db->mallocFailed ); return SQLITE_ERROR; } pMem->flags = MEM_Str|MEM_Term; - pMem->n = displayComment(pOp, zP4, pMem->z, 500); - pMem->enc = SQLITE_UTF8; -#else - pMem->flags = MEM_Null; /* Comment */ -#endif - } + zP4 = displayP4(pOp, pMem->z, pMem->szMalloc); + if( zP4!=pMem->z ){ + pMem->n = 0; + sqlite3VdbeMemSetStr(pMem, zP4, -1, SQLITE_UTF8, 0); + }else{ + assert( pMem->z!=0 ); + pMem->n = sqlite3Strlen30(pMem->z); + pMem->enc = SQLITE_UTF8; + } + pMem++; - p->nResColumn = 8 - 4*(p->explain-1); - p->pResultSet = &p->aMem[1]; - p->rc = SQLITE_OK; - rc = SQLITE_ROW; + if( p->explain==1 ){ + if( sqlite3VdbeMemClearAndResize(pMem, 4) ){ + assert( p->db->mallocFailed ); + return SQLITE_ERROR; + } + pMem->flags = MEM_Str|MEM_Term; + pMem->n = 2; + sqlite3_snprintf(3, pMem->z, "%.2x", pOp->p5); /* P5 */ + pMem->enc = SQLITE_UTF8; + pMem++; + +#ifdef SQLITE_ENABLE_EXPLAIN_COMMENTS + if( sqlite3VdbeMemClearAndResize(pMem, 500) ){ + assert( p->db->mallocFailed ); + return SQLITE_ERROR; + } + pMem->flags = MEM_Str|MEM_Term; + pMem->n = displayComment(pOp, zP4, pMem->z, 500); + pMem->enc = SQLITE_UTF8; +#else + pMem->flags = MEM_Null; /* Comment */ +#endif + } + + p->nResColumn = 8 - 4*(p->explain-1); + p->pResultSet = &p->aMem[1]; + p->rc = SQLITE_OK; + rc = SQLITE_ROW; + } } return rc; } @@ -74451,6 +76516,7 @@ static int vdbeCommit(sqlite3 *db, Vdbe *p){ pPager = sqlite3BtreePager(pBt); if( db->aDb[i].safety_level!=PAGER_SYNCHRONOUS_OFF && aMJNeeded[sqlite3PagerGetJournalMode(pPager)] + && sqlite3PagerIsMemdb(pPager)==0 ){ assert( i!=1 ); nTrans++; @@ -75226,7 +77292,7 @@ SQLITE_PRIVATE void sqlite3VdbeClearObject(sqlite3 *db, Vdbe *p){ SQLITE_PRIVATE void sqlite3VdbeDelete(Vdbe *p){ sqlite3 *db; - if( NEVER(p==0) ) return; + assert( p!=0 ); db = p->db; assert( sqlite3_mutex_held(db->mutex) ); sqlite3VdbeClearObject(db, p); @@ -75622,7 +77688,13 @@ SQLITE_PRIVATE u32 sqlite3VdbeSerialGet( Mem *pMem /* Memory cell to write value into */ ){ switch( serial_type ){ - case 10: /* Reserved for future use */ + case 10: { /* Internal use only: NULL with virtual table + ** UPDATE no-change flag set */ + pMem->flags = MEM_Null|MEM_Zero; + pMem->n = 0; + pMem->u.nZero = 0; + break; + } case 11: /* Reserved for future use */ case 0: { /* Null */ /* EVIDENCE-OF: R-24078-09375 Value is a NULL. */ @@ -77175,6 +79247,11 @@ SQLITE_API int sqlite3_value_type(sqlite3_value* pVal){ return aType[pVal->flags&MEM_AffMask]; } +/* Return true if a parameter to xUpdate represents an unchanged column */ +SQLITE_API int sqlite3_value_nochange(sqlite3_value *pVal){ + return (pVal->flags&(MEM_Null|MEM_Zero))==(MEM_Null|MEM_Zero); +} + /* Make a copy of an sqlite3_value object */ SQLITE_API sqlite3_value *sqlite3_value_dup(const sqlite3_value *pOrig){ @@ -77274,14 +79351,12 @@ SQLITE_API void sqlite3_result_double(sqlite3_context *pCtx, double rVal){ SQLITE_API void sqlite3_result_error(sqlite3_context *pCtx, const char *z, int n){ assert( sqlite3_mutex_held(pCtx->pOut->db->mutex) ); pCtx->isError = SQLITE_ERROR; - pCtx->fErrorOrAux = 1; sqlite3VdbeMemSetStr(pCtx->pOut, z, n, SQLITE_UTF8, SQLITE_TRANSIENT); } #ifndef SQLITE_OMIT_UTF16 SQLITE_API void sqlite3_result_error16(sqlite3_context *pCtx, const void *z, int n){ assert( sqlite3_mutex_held(pCtx->pOut->db->mutex) ); pCtx->isError = SQLITE_ERROR; - pCtx->fErrorOrAux = 1; sqlite3VdbeMemSetStr(pCtx->pOut, z, n, SQLITE_UTF16NATIVE, SQLITE_TRANSIENT); } #endif @@ -77387,8 +79462,7 @@ SQLITE_API int sqlite3_result_zeroblob64(sqlite3_context *pCtx, u64 n){ return SQLITE_OK; } SQLITE_API void sqlite3_result_error_code(sqlite3_context *pCtx, int errCode){ - pCtx->isError = errCode; - pCtx->fErrorOrAux = 1; + pCtx->isError = errCode ? errCode : -1; #ifdef SQLITE_DEBUG if( pCtx->pVdbe ) pCtx->pVdbe->rcApp = errCode; #endif @@ -77402,7 +79476,6 @@ SQLITE_API void sqlite3_result_error_code(sqlite3_context *pCtx, int errCode){ SQLITE_API void sqlite3_result_error_toobig(sqlite3_context *pCtx){ assert( sqlite3_mutex_held(pCtx->pOut->db->mutex) ); pCtx->isError = SQLITE_TOOBIG; - pCtx->fErrorOrAux = 1; sqlite3VdbeMemSetStr(pCtx->pOut, "string or blob too big", -1, SQLITE_UTF8, SQLITE_STATIC); } @@ -77412,7 +79485,6 @@ SQLITE_API void sqlite3_result_error_nomem(sqlite3_context *pCtx){ assert( sqlite3_mutex_held(pCtx->pOut->db->mutex) ); sqlite3VdbeMemSetNull(pCtx->pOut); pCtx->isError = SQLITE_NOMEM_BKPT; - pCtx->fErrorOrAux = 1; sqlite3OomFault(pCtx->pOut->db); } @@ -77652,6 +79724,25 @@ SQLITE_API sqlite3 *sqlite3_context_db_handle(sqlite3_context *p){ return p->pOut->db; } +/* +** If this routine is invoked from within an xColumn method of a virtual +** table, then it returns true if and only if the the call is during an +** UPDATE operation and the value of the column will not be modified +** by the UPDATE. +** +** If this routine is called from any context other than within the +** xColumn method of a virtual table, then the return value is meaningless +** and arbitrary. +** +** Virtual table implements might use this routine to optimize their +** performance by substituting a NULL result, or some other light-weight +** value, as a signal to the xUpdate routine that the column is unchanged. +*/ +SQLITE_API int sqlite3_vtab_nochange(sqlite3_context *p){ + assert( p ); + return sqlite3_value_nochange(p->pOut); +} + /* ** Return the current time for a statement. If the current time ** is requested more than once within the same run of a single prepared @@ -77800,10 +79891,7 @@ SQLITE_API void sqlite3_set_auxdata( pAuxData->iAuxArg = iArg; pAuxData->pNextAux = pVdbe->pAuxData; pVdbe->pAuxData = pAuxData; - if( pCtx->fErrorOrAux==0 ){ - pCtx->isError = 0; - pCtx->fErrorOrAux = 1; - } + if( pCtx->isError==0 ) pCtx->isError = -1; }else if( pAuxData->xDeleteAux ){ pAuxData->xDeleteAux(pAuxData->pAux); } @@ -78559,7 +80647,9 @@ SQLITE_API int sqlite3_stmt_status(sqlite3_stmt *pStmt, int op, int resetFlag){ Vdbe *pVdbe = (Vdbe*)pStmt; u32 v; #ifdef SQLITE_ENABLE_API_ARMOR - if( !pStmt ){ + if( !pStmt + || (op!=SQLITE_STMTSTATUS_MEMUSED && (op<0||op>=ArraySize(pVdbe->aCounter))) + ){ (void)SQLITE_MISUSE_BKPT; return 0; } @@ -79333,6 +81423,11 @@ static void applyNumericAffinity(Mem *pRec, int bTryForInt){ pRec->flags |= MEM_Real; if( bTryForInt ) sqlite3VdbeIntegerAffinity(pRec); } + /* TEXT->NUMERIC is many->one. Hence, it is important to invalidate the + ** string representation after computing a numeric equivalent, because the + ** string representation might not be the canonical representation for the + ** numeric value. Ticket [343634942dd54ab57b7024] 2018-01-31. */ + pRec->flags &= ~MEM_Str; } /* @@ -79533,7 +81628,7 @@ static void memTracePrint(Mem *p){ if( p->flags & MEM_Undefined ){ printf(" undefined"); }else if( p->flags & MEM_Null ){ - printf(" NULL"); + printf(p->flags & MEM_Zero ? " NULL-nochng" : " NULL"); }else if( (p->flags & (MEM_Int|MEM_Str))==(MEM_Int|MEM_Str) ){ printf(" si:%lld", p->u.i); }else if( p->flags & MEM_Int ){ @@ -79801,7 +81896,7 @@ SQLITE_PRIVATE int sqlite3VdbeExec( assert( pOp>=aOp && pOp<&aOp[p->nOp]); #ifdef VDBE_PROFILE - start = sqlite3Hwtime(); + start = sqlite3NProfileCnt ? sqlite3NProfileCnt : sqlite3Hwtime(); #endif nVmStep++; #ifdef SQLITE_ENABLE_STMT_SCANSTATUS @@ -81325,18 +83420,8 @@ case OP_Or: { /* same as TK_OR, in1, in2, out3 */ int v1; /* Left operand: 0==FALSE, 1==TRUE, 2==UNKNOWN or NULL */ int v2; /* Right operand: 0==FALSE, 1==TRUE, 2==UNKNOWN or NULL */ - pIn1 = &aMem[pOp->p1]; - if( pIn1->flags & MEM_Null ){ - v1 = 2; - }else{ - v1 = sqlite3VdbeIntValue(pIn1)!=0; - } - pIn2 = &aMem[pOp->p2]; - if( pIn2->flags & MEM_Null ){ - v2 = 2; - }else{ - v2 = sqlite3VdbeIntValue(pIn2)!=0; - } + v1 = sqlite3VdbeBooleanValue(&aMem[pOp->p1], 2); + v2 = sqlite3VdbeBooleanValue(&aMem[pOp->p2], 2); if( pOp->opcode==OP_And ){ static const unsigned char and_logic[] = { 0, 0, 0, 0, 1, 2, 0, 2, 2 }; v1 = and_logic[v1*3+v2]; @@ -81354,6 +83439,35 @@ case OP_Or: { /* same as TK_OR, in1, in2, out3 */ break; } +/* Opcode: IsTrue P1 P2 P3 P4 * +** Synopsis: r[P2] = coalesce(r[P1]==TRUE,P3) ^ P4 +** +** This opcode implements the IS TRUE, IS FALSE, IS NOT TRUE, and +** IS NOT FALSE operators. +** +** Interpret the value in register P1 as a boolean value. Store that +** boolean (a 0 or 1) in register P2. Or if the value in register P1 is +** NULL, then the P3 is stored in register P2. Invert the answer if P4 +** is 1. +** +** The logic is summarized like this: +** +**
    +**
  • If P3==0 and P4==0 then r[P2] := r[P1] IS TRUE +**
  • If P3==1 and P4==1 then r[P2] := r[P1] IS FALSE +**
  • If P3==0 and P4==1 then r[P2] := r[P1] IS NOT TRUE +**
  • If P3==1 and P4==0 then r[P2] := r[P1] IS NOT FALSE +**
+*/ +case OP_IsTrue: { /* in1, out2 */ + assert( pOp->p4type==P4_INT32 ); + assert( pOp->p4.i==0 || pOp->p4.i==1 ); + assert( pOp->p3==0 || pOp->p3==1 ); + sqlite3VdbeMemSetInt64(&aMem[pOp->p2], + sqlite3VdbeBooleanValue(&aMem[pOp->p1], pOp->p3) ^ pOp->p4.i); + break; +} + /* Opcode: Not P1 P2 * * * ** Synopsis: r[P2]= !r[P1] ** @@ -81364,10 +83478,10 @@ case OP_Or: { /* same as TK_OR, in1, in2, out3 */ case OP_Not: { /* same as TK_NOT, in1, out2 */ pIn1 = &aMem[pOp->p1]; pOut = &aMem[pOp->p2]; - sqlite3VdbeMemSetNull(pOut); if( (pIn1->flags & MEM_Null)==0 ){ - pOut->flags = MEM_Int; - pOut->u.i = !sqlite3VdbeIntValue(pIn1); + sqlite3VdbeMemSetInt64(pOut, !sqlite3VdbeBooleanValue(pIn1,0)); + }else{ + sqlite3VdbeMemSetNull(pOut); } break; } @@ -81434,30 +83548,25 @@ case OP_Once: { /* jump */ ** is considered true if it is numeric and non-zero. If the value ** in P1 is NULL then take the jump if and only if P3 is non-zero. */ +case OP_If: { /* jump, in1 */ + int c; + c = sqlite3VdbeBooleanValue(&aMem[pOp->p1], pOp->p3); + VdbeBranchTaken(c!=0, 2); + if( c ) goto jump_to_p2; + break; +} + /* Opcode: IfNot P1 P2 P3 * * ** ** Jump to P2 if the value in register P1 is False. The value ** is considered false if it has a numeric value of zero. If the value ** in P1 is NULL then take the jump if and only if P3 is non-zero. */ -case OP_If: /* jump, in1 */ case OP_IfNot: { /* jump, in1 */ int c; - pIn1 = &aMem[pOp->p1]; - if( pIn1->flags & MEM_Null ){ - c = pOp->p3; - }else{ -#ifdef SQLITE_OMIT_FLOATING_POINT - c = sqlite3VdbeIntValue(pIn1)!=0; -#else - c = sqlite3VdbeRealValue(pIn1)!=0.0; -#endif - if( pOp->opcode==OP_IfNot ) c = !c; - } + c = !sqlite3VdbeBooleanValue(&aMem[pOp->p1], !pOp->p3); VdbeBranchTaken(c!=0, 2); - if( c ){ - goto jump_to_p2; - } + if( c ) goto jump_to_p2; break; } @@ -81507,6 +83616,36 @@ case OP_IfNullRow: { /* jump */ break; } +#ifdef SQLITE_ENABLE_OFFSET_SQL_FUNC +/* Opcode: Offset P1 P2 P3 * * +** Synopsis: r[P3] = sqlite_offset(P1) +** +** Store in register r[P3] the byte offset into the database file that is the +** start of the payload for the record at which that cursor P1 is currently +** pointing. +** +** P2 is the column number for the argument to the sqlite_offset() function. +** This opcode does not use P2 itself, but the P2 value is used by the +** code generator. The P1, P2, and P3 operands to this opcode are the +** same as for OP_Column. +** +** This opcode is only available if SQLite is compiled with the +** -DSQLITE_ENABLE_OFFSET_SQL_FUNC option. +*/ +case OP_Offset: { /* out3 */ + VdbeCursor *pC; /* The VDBE cursor */ + assert( pOp->p1>=0 && pOp->p1nCursor ); + pC = p->apCsr[pOp->p1]; + pOut = &p->aMem[pOp->p3]; + if( NEVER(pC==0) || pC->eCurType!=CURTYPE_BTREE ){ + sqlite3VdbeMemSetNull(pOut); + }else{ + sqlite3VdbeMemSetInt64(pOut, sqlite3BtreeOffset(pC->uc.pCursor)); + } + break; +} +#endif /* SQLITE_ENABLE_OFFSET_SQL_FUNC */ + /* Opcode: Column P1 P2 P3 P4 P5 ** Synopsis: r[P3]=PX ** @@ -81920,9 +84059,18 @@ case OP_MakeRecord: { pRec = pLast; do{ assert( memIsValid(pRec) ); - pRec->uTemp = serial_type = sqlite3VdbeSerialType(pRec, file_format, &len); + serial_type = sqlite3VdbeSerialType(pRec, file_format, &len); if( pRec->flags & MEM_Zero ){ - if( nData ){ + if( serial_type==0 ){ + /* Values with MEM_Null and MEM_Zero are created by xColumn virtual + ** table methods that never invoke sqlite3_result_xxxxx() while + ** computing an unchanging column value in an UPDATE statement. + ** Give such values a special internal-use-only serial-type of 10 + ** so that they can be passed through to xUpdate and have + ** a true sqlite3_value_nochange(). */ + assert( pOp->p5==OPFLAG_NOCHNG_MAGIC || CORRUPT_DB ); + serial_type = 10; + }else if( nData ){ if( sqlite3VdbeMemExpandBlob(pRec) ) goto no_mem; }else{ nZero += pRec->u.nZero; @@ -81933,6 +84081,7 @@ case OP_MakeRecord: { testcase( serial_type==127 ); testcase( serial_type==128 ); nHdr += serial_type<=127 ? 1 : sqlite3VarintLen(serial_type); + pRec->uTemp = serial_type; if( pRec==pData0 ) break; pRec--; }while(1); @@ -83386,6 +85535,10 @@ case OP_NewRowid: { /* out2 */ pOut = out2Prerelease(p, pOp); assert( pOp->p1>=0 && pOp->p1nCursor ); pC = p->apCsr[pOp->p1]; + if( !pC->isTable ){ + rc = SQLITE_CORRUPT_BKPT; + goto abort_due_to_error; + } assert( pC!=0 ); assert( pC->eCurType==CURTYPE_BTREE ); assert( pC->uc.pCursor!=0 ); @@ -83543,10 +85696,8 @@ case OP_InsertInt: { int seekResult; /* Result of prior seek or 0 if no USESEEKRESULT flag */ const char *zDb; /* database name - used by the update hook */ Table *pTab; /* Table structure - used by update and pre-update hooks */ - int op; /* Opcode for update hook: SQLITE_UPDATE or SQLITE_INSERT */ BtreePayload x; /* Payload to be inserted */ - op = 0; pData = &aMem[pOp->p2]; assert( pOp->p1>=0 && pOp->p1nCursor ); assert( memIsValid(pData) ); @@ -83574,19 +85725,21 @@ case OP_InsertInt: { zDb = db->aDb[pC->iDb].zDbSName; pTab = pOp->p4.pTab; assert( (pOp->p5 & OPFLAG_ISNOOP) || HasRowid(pTab) ); - op = ((pOp->p5 & OPFLAG_ISUPDATE) ? SQLITE_UPDATE : SQLITE_INSERT); }else{ - pTab = 0; /* Not needed. Silence a compiler warning. */ + pTab = 0; zDb = 0; /* Not needed. Silence a compiler warning. */ } #ifdef SQLITE_ENABLE_PREUPDATE_HOOK /* Invoke the pre-update hook, if any */ - if( db->xPreUpdateCallback - && pOp->p4type==P4_TABLE - && !(pOp->p5 & OPFLAG_ISUPDATE) - ){ - sqlite3VdbePreUpdateHook(p, pC, SQLITE_INSERT, zDb, pTab, x.nKey, pOp->p2); + if( pTab ){ + if( db->xPreUpdateCallback && !(pOp->p5 & OPFLAG_ISUPDATE) ){ + sqlite3VdbePreUpdateHook(p, pC, SQLITE_INSERT, zDb, pTab, x.nKey,pOp->p2); + } + if( db->xUpdateCallback==0 || pTab->aCol==0 ){ + /* Prevent post-update hook from running in cases when it should not */ + pTab = 0; + } } if( pOp->p5 & OPFLAG_ISNOOP ) break; #endif @@ -83611,8 +85764,12 @@ case OP_InsertInt: { /* Invoke the update-hook if required. */ if( rc ) goto abort_due_to_error; - if( db->xUpdateCallback && op ){ - db->xUpdateCallback(db->pUpdateArg, op, zDb, pTab->zName, x.nKey); + if( pTab ){ + assert( db->xUpdateCallback!=0 ); + assert( pTab->aCol!=0 ); + db->xUpdateCallback(db->pUpdateArg, + (pOp->p5 & OPFLAG_ISUPDATE) ? SQLITE_UPDATE : SQLITE_INSERT, + zDb, pTab->zName, x.nKey); } break; } @@ -85318,12 +87475,17 @@ case OP_AggStep0: { assert( pOp->p3>0 && pOp->p3<=(p->nMem+1 - p->nCursor) ); assert( n==0 || (pOp->p2>0 && pOp->p2+n<=(p->nMem+1 - p->nCursor)+1) ); assert( pOp->p3p2 || pOp->p3>=pOp->p2+n ); - pCtx = sqlite3DbMallocRawNN(db, sizeof(*pCtx) + (n-1)*sizeof(sqlite3_value*)); + pCtx = sqlite3DbMallocRawNN(db, n*sizeof(sqlite3_value*) + + (sizeof(pCtx[0]) + sizeof(Mem) - sizeof(sqlite3_value*))); if( pCtx==0 ) goto no_mem; pCtx->pMem = 0; + pCtx->pOut = (Mem*)&(pCtx->argv[n]); + sqlite3VdbeMemInit(pCtx->pOut, db, MEM_Null); pCtx->pFunc = pOp->p4.pFunc; pCtx->iOp = (int)(pOp - aOp); pCtx->pVdbe = p; + pCtx->skipFlag = 0; + pCtx->isError = 0; pCtx->argc = n; pOp->p4type = P4_FUNCCTX; pOp->p4.pCtx = pCtx; @@ -85334,7 +87496,6 @@ case OP_AggStep: { int i; sqlite3_context *pCtx; Mem *pMem; - Mem t; assert( pOp->p4type==P4_FUNCCTX ); pCtx = pOp->p4.pCtx; @@ -85357,26 +87518,28 @@ case OP_AggStep: { #endif pMem->n++; - sqlite3VdbeMemInit(&t, db, MEM_Null); - pCtx->pOut = &t; - pCtx->fErrorOrAux = 0; - pCtx->skipFlag = 0; + assert( pCtx->pOut->flags==MEM_Null ); + assert( pCtx->isError==0 ); + assert( pCtx->skipFlag==0 ); (pCtx->pFunc->xSFunc)(pCtx,pCtx->argc,pCtx->argv); /* IMP: R-24505-23230 */ - if( pCtx->fErrorOrAux ){ - if( pCtx->isError ){ - sqlite3VdbeError(p, "%s", sqlite3_value_text(&t)); + if( pCtx->isError ){ + if( pCtx->isError>0 ){ + sqlite3VdbeError(p, "%s", sqlite3_value_text(pCtx->pOut)); rc = pCtx->isError; } - sqlite3VdbeMemRelease(&t); + if( pCtx->skipFlag ){ + assert( pOp[-1].opcode==OP_CollSeq ); + i = pOp[-1].p1; + if( i ) sqlite3VdbeMemSetInt64(&aMem[i], 1); + pCtx->skipFlag = 0; + } + sqlite3VdbeMemRelease(pCtx->pOut); + pCtx->pOut->flags = MEM_Null; + pCtx->isError = 0; if( rc ) goto abort_due_to_error; - }else{ - assert( t.flags==MEM_Null ); - } - if( pCtx->skipFlag ){ - assert( pOp[-1].opcode==OP_CollSeq ); - i = pOp[-1].p1; - if( i ) sqlite3VdbeMemSetInt64(&aMem[i], 1); } + assert( pCtx->pOut->flags==MEM_Null ); + assert( pCtx->skipFlag==0 ); break; } @@ -85821,12 +87984,18 @@ case OP_VFilter: { /* jump */ #endif /* SQLITE_OMIT_VIRTUALTABLE */ #ifndef SQLITE_OMIT_VIRTUALTABLE -/* Opcode: VColumn P1 P2 P3 * * +/* Opcode: VColumn P1 P2 P3 * P5 ** Synopsis: r[P3]=vcolumn(P2) ** -** Store the value of the P2-th column of -** the row of the virtual-table that the -** P1 cursor is pointing to into register P3. +** Store in register P3 the value of the P2-th column of +** the current row of the virtual-table of cursor P1. +** +** If the VColumn opcode is being used to fetch the value of +** an unchanging column during an UPDATE operation, then the P5 +** value is 1. Otherwise, P5 is 0. The P5 value is returned +** by sqlite3_vtab_nochange() routine can can be used +** by virtual table implementations to return special "no-change" +** marks which can be more efficient, depending on the virtual table. */ case OP_VColumn: { sqlite3_vtab *pVtab; @@ -85848,10 +88017,17 @@ case OP_VColumn: { assert( pModule->xColumn ); memset(&sContext, 0, sizeof(sContext)); sContext.pOut = pDest; - MemSetTypeFlag(pDest, MEM_Null); + if( pOp->p5 ){ + sqlite3VdbeMemSetNull(pDest); + pDest->flags = MEM_Null|MEM_Zero; + pDest->u.nZero = 0; + }else{ + MemSetTypeFlag(pDest, MEM_Null); + } rc = pModule->xColumn(pCur->uc.pVCur, &sContext, pOp->p2); sqlite3VtabImportErrmsg(p, pVtab); - if( sContext.isError ){ + if( sContext.isError>0 ){ + sqlite3VdbeError(p, "%s", sqlite3_value_text(pDest)); rc = sContext.isError; } sqlite3VdbeChangeEncoding(pDest, encoding); @@ -86116,6 +88292,7 @@ case OP_Function0: { pCtx->pFunc = pOp->p4.pFunc; pCtx->iOp = (int)(pOp - aOp); pCtx->pVdbe = p; + pCtx->isError = 0; pCtx->argc = n; pOp->p4type = P4_FUNCCTX; pOp->p4.pCtx = pCtx; @@ -86150,16 +88327,17 @@ case OP_Function: { } #endif MemSetTypeFlag(pOut, MEM_Null); - pCtx->fErrorOrAux = 0; + assert( pCtx->isError==0 ); (*pCtx->pFunc->xSFunc)(pCtx, pCtx->argc, pCtx->argv);/* IMP: R-24505-23230 */ /* If the function returned an error, throw an exception */ - if( pCtx->fErrorOrAux ){ - if( pCtx->isError ){ + if( pCtx->isError ){ + if( pCtx->isError>0 ){ sqlite3VdbeError(p, "%s", sqlite3_value_text(pOut)); rc = pCtx->isError; } sqlite3VdbeDeleteAuxData(db, &p->pAuxData, pCtx->iOp, pOp->p1); + pCtx->isError = 0; if( rc ) goto abort_due_to_error; } @@ -86174,7 +88352,13 @@ case OP_Function: { break; } - +/* Opcode: Trace P1 P2 * P4 * +** +** Write P4 on the statement trace output if statement tracing is +** enabled. +** +** Operand P1 must be 0x7fffffff and P2 must positive. +*/ /* Opcode: Init P1 P2 P3 P4 * ** Synopsis: Start at P2 ** @@ -86193,9 +88377,12 @@ case OP_Function: { ** If P3 is not zero, then it is an address to jump to if an SQLITE_CORRUPT ** error is encountered. */ +case OP_Trace: case OP_Init: { /* jump */ - char *zTrace; int i; +#ifndef SQLITE_OMIT_TRACE + char *zTrace; +#endif /* If the P4 argument is not NULL, then it must be an SQL comment string. ** The "--" string is broken up to prevent false-positives with srcck1.c. @@ -86207,7 +88394,9 @@ case OP_Init: { /* jump */ ** sqlite3_expanded_sql(P) otherwise. */ assert( pOp->p4.z==0 || strncmp(pOp->p4.z, "-" "- ", 3)==0 ); - assert( pOp==p->aOp ); /* Always instruction 0 */ + + /* OP_Init is always instruction 0 */ + assert( pOp==p->aOp || pOp->opcode==OP_Trace ); #ifndef SQLITE_OMIT_TRACE if( (db->mTrace & (SQLITE_TRACE_STMT|SQLITE_TRACE_LEGACY))!=0 @@ -86250,6 +88439,7 @@ case OP_Init: { /* jump */ #endif /* SQLITE_OMIT_TRACE */ assert( pOp->p2>0 ); if( pOp->p1>=sqlite3GlobalConfig.iOnceResetThreshold ){ + if( pOp->opcode==OP_Trace ) break; for(i=1; inOp; i++){ if( p->aOp[i].opcode==OP_Once ) p->aOp[i].p1 = 0; } @@ -86309,7 +88499,7 @@ default: { /* This is really OP_Noop and OP_Explain */ #ifdef VDBE_PROFILE { - u64 endTime = sqlite3Hwtime(); + u64 endTime = sqlite3NProfileCnt ? sqlite3NProfileCnt : sqlite3Hwtime(); if( endTime>start ) pOrigOp->cycles += endTime - start; pOrigOp->cnt++; } @@ -90194,7 +92384,6 @@ SQLITE_PRIVATE int sqlite3WalkSelectExpr(Walker *pWalker, Select *p){ if( sqlite3WalkExpr(pWalker, p->pHaving) ) return WRC_Abort; if( sqlite3WalkExprList(pWalker, p->pOrderBy) ) return WRC_Abort; if( sqlite3WalkExpr(pWalker, p->pLimit) ) return WRC_Abort; - if( sqlite3WalkExpr(pWalker, p->pOffset) ) return WRC_Abort; return WRC_Continue; } @@ -90211,16 +92400,15 @@ SQLITE_PRIVATE int sqlite3WalkSelectFrom(Walker *pWalker, Select *p){ struct SrcList_item *pItem; pSrc = p->pSrc; - if( ALWAYS(pSrc) ){ - for(i=pSrc->nSrc, pItem=pSrc->a; i>0; i--, pItem++){ - if( pItem->pSelect && sqlite3WalkSelect(pWalker, pItem->pSelect) ){ - return WRC_Abort; - } - if( pItem->fg.isTabFunc - && sqlite3WalkExprList(pWalker, pItem->u1.pFuncArg) - ){ - return WRC_Abort; - } + assert( pSrc!=0 ); + for(i=pSrc->nSrc, pItem=pSrc->a; i>0; i--, pItem++){ + if( pItem->pSelect && sqlite3WalkSelect(pWalker, pItem->pSelect) ){ + return WRC_Abort; + } + if( pItem->fg.isTabFunc + && sqlite3WalkExprList(pWalker, pItem->u1.pFuncArg) + ){ + return WRC_Abort; } } return WRC_Continue; @@ -90698,10 +92886,16 @@ static int lookupName( ** Because no reference was made to outer contexts, the pNC->nRef ** fields are not changed in any context. */ - if( cnt==0 && zTab==0 && ExprHasProperty(pExpr,EP_DblQuoted) ){ - pExpr->op = TK_STRING; - pExpr->pTab = 0; - return WRC_Prune; + if( cnt==0 && zTab==0 ){ + assert( pExpr->op==TK_ID ); + if( ExprHasProperty(pExpr,EP_DblQuoted) ){ + pExpr->op = TK_STRING; + pExpr->pTab = 0; + return WRC_Prune; + } + if( sqlite3ExprIdToTrueFalse(pExpr) ){ + return WRC_Prune; + } } /* @@ -90863,7 +93057,8 @@ static int resolveExprStep(Walker *pWalker, Expr *pExpr){ SrcList *pSrcList = pNC->pSrcList; struct SrcList_item *pItem; assert( pSrcList && pSrcList->nSrc==1 ); - pItem = pSrcList->a; + pItem = pSrcList->a; + assert( HasRowid(pItem->pTab) && pItem->pTab->pSelect==0 ); pExpr->op = TK_COLUMN; pExpr->pTab = pItem->pTab; pExpr->iTable = pItem->iCursor; @@ -91049,15 +93244,30 @@ static int resolveExprStep(Walker *pWalker, Expr *pExpr){ notValid(pParse, pNC, "parameters", NC_IsCheck|NC_PartIdx|NC_IdxExpr); break; } + case TK_IS: + case TK_ISNOT: { + Expr *pRight; + assert( !ExprHasProperty(pExpr, EP_Reduced) ); + /* Handle special cases of "x IS TRUE", "x IS FALSE", "x IS NOT TRUE", + ** and "x IS NOT FALSE". */ + if( (pRight = pExpr->pRight)->op==TK_ID ){ + int rc = resolveExprStep(pWalker, pRight); + if( rc==WRC_Abort ) return WRC_Abort; + if( pRight->op==TK_TRUEFALSE ){ + pExpr->op2 = pExpr->op; + pExpr->op = TK_TRUTH; + return WRC_Continue; + } + } + /* Fall thru */ + } case TK_BETWEEN: case TK_EQ: case TK_NE: case TK_LT: case TK_LE: case TK_GT: - case TK_GE: - case TK_IS: - case TK_ISNOT: { + case TK_GE: { int nLeft, nRight; if( pParse->db->mallocFailed ) break; assert( pExpr->pLeft!=0 ); @@ -91462,8 +93672,7 @@ static int resolveSelectStep(Walker *pWalker, Select *p){ */ memset(&sNC, 0, sizeof(sNC)); sNC.pParse = pParse; - if( sqlite3ResolveExprNames(&sNC, p->pLimit) || - sqlite3ResolveExprNames(&sNC, p->pOffset) ){ + if( sqlite3ResolveExprNames(&sNC, p->pLimit) ){ return WRC_Abort; } @@ -92459,16 +94668,15 @@ static void heightOfExprList(ExprList *p, int *pnHeight){ } } } -static void heightOfSelect(Select *p, int *pnHeight){ - if( p ){ +static void heightOfSelect(Select *pSelect, int *pnHeight){ + Select *p; + for(p=pSelect; p; p=p->pPrior){ heightOfExpr(p->pWhere, pnHeight); heightOfExpr(p->pHaving, pnHeight); heightOfExpr(p->pLimit, pnHeight); - heightOfExpr(p->pOffset, pnHeight); heightOfExprList(p->pEList, pnHeight); heightOfExprList(p->pGroupBy, pnHeight); heightOfExprList(p->pOrderBy, pnHeight); - heightOfSelect(p->pPrior, pnHeight); } } @@ -92753,6 +94961,7 @@ SQLITE_PRIVATE Expr *sqlite3ExprFunction(Parse *pParse, ExprList *pList, Token * return 0; } pNew->x.pList = pList; + ExprSetProperty(pNew, EP_HasFunc); assert( !ExprHasProperty(pNew, EP_xIsSelect) ); sqlite3ExprSetHeightAndFlags(pParse, pNew); return pNew; @@ -93262,7 +95471,6 @@ SQLITE_PRIVATE Select *sqlite3SelectDup(sqlite3 *db, Select *pDup, int flags){ pNew->pNext = pNext; pNew->pPrior = 0; pNew->pLimit = sqlite3ExprDup(db, p->pLimit, flags); - pNew->pOffset = sqlite3ExprDup(db, p->pOffset, flags); pNew->iLimit = 0; pNew->iOffset = 0; pNew->selFlags = p->selFlags & ~SF_UsesEphemeral; @@ -93456,17 +95664,16 @@ SQLITE_PRIVATE void sqlite3ExprListSetName( SQLITE_PRIVATE void sqlite3ExprListSetSpan( Parse *pParse, /* Parsing context */ ExprList *pList, /* List to which to add the span. */ - ExprSpan *pSpan /* The span to be added */ + const char *zStart, /* Start of the span */ + const char *zEnd /* End of the span */ ){ sqlite3 *db = pParse->db; assert( pList!=0 || db->mallocFailed!=0 ); if( pList ){ struct ExprList_item *pItem = &pList->a[pList->nExpr-1]; assert( pList->nExpr>0 ); - assert( db->mallocFailed || pItem->pExpr==pSpan->pExpr ); sqlite3DbFree(db, pItem->zSpan); - pItem->zSpan = sqlite3DbStrNDup(db, (char*)pSpan->zStart, - (int)(pSpan->zEnd - pSpan->zStart)); + pItem->zSpan = sqlite3DbSpanDup(db, zStart, zEnd); } } @@ -93535,6 +95742,34 @@ SQLITE_PRIVATE int sqlite3SelectWalkFail(Walker *pWalker, Select *NotUsed){ return WRC_Abort; } +/* +** If the input expression is an ID with the name "true" or "false" +** then convert it into an TK_TRUEFALSE term. Return non-zero if +** the conversion happened, and zero if the expression is unaltered. +*/ +SQLITE_PRIVATE int sqlite3ExprIdToTrueFalse(Expr *pExpr){ + assert( pExpr->op==TK_ID || pExpr->op==TK_STRING ); + if( sqlite3StrICmp(pExpr->u.zToken, "true")==0 + || sqlite3StrICmp(pExpr->u.zToken, "false")==0 + ){ + pExpr->op = TK_TRUEFALSE; + return 1; + } + return 0; +} + +/* +** The argument must be a TK_TRUEFALSE Expr node. Return 1 if it is TRUE +** and 0 if it is FALSE. +*/ +SQLITE_PRIVATE int sqlite3ExprTruthValue(const Expr *pExpr){ + assert( pExpr->op==TK_TRUEFALSE ); + assert( sqlite3StrICmp(pExpr->u.zToken,"true")==0 + || sqlite3StrICmp(pExpr->u.zToken,"false")==0 ); + return pExpr->u.zToken[4]==0; +} + + /* ** These routines are Walker callbacks used to check expressions to ** see if they are "constant" for some definition of constant. The @@ -93582,6 +95817,12 @@ static int exprNodeIsConstant(Walker *pWalker, Expr *pExpr){ return WRC_Abort; } case TK_ID: + /* Convert "true" or "false" in a DEFAULT clause into the + ** appropriate TK_TRUEFALSE operator */ + if( sqlite3ExprIdToTrueFalse(pExpr) ){ + return WRC_Prune; + } + /* Fall thru */ case TK_COLUMN: case TK_AGG_FUNCTION: case TK_AGG_COLUMN: @@ -93899,7 +96140,6 @@ static Select *isCandidateForInOpt(Expr *pX){ } assert( p->pGroupBy==0 ); /* Has no GROUP BY clause */ if( p->pLimit ) return 0; /* Has no LIMIT clause */ - assert( p->pOffset==0 ); /* No LIMIT means no OFFSET */ if( p->pWhere ) return 0; /* Has no WHERE clause */ pSrc = p->pSrc; assert( pSrc!=0 ); @@ -93989,16 +96229,15 @@ static int sqlite3InRhsIsConstant(Expr *pIn){ ** pX->iTable made to point to the ephemeral table instead of an ** existing table. ** -** The inFlags parameter must contain exactly one of the bits -** IN_INDEX_MEMBERSHIP or IN_INDEX_LOOP. If inFlags contains -** IN_INDEX_MEMBERSHIP, then the generated table will be used for a -** fast membership test. When the IN_INDEX_LOOP bit is set, the -** IN index will be used to loop over all values of the RHS of the -** IN operator. +** The inFlags parameter must contain, at a minimum, one of the bits +** IN_INDEX_MEMBERSHIP or IN_INDEX_LOOP but not both. If inFlags contains +** IN_INDEX_MEMBERSHIP, then the generated table will be used for a fast +** membership test. When the IN_INDEX_LOOP bit is set, the IN index will +** be used to loop over all values of the RHS of the IN operator. ** ** When IN_INDEX_LOOP is used (and the b-tree will be used to iterate ** through the set members) then the b-tree must not contain duplicates. -** An epheremal table must be used unless the selected columns are guaranteed +** An epheremal table will be created unless the selected columns are guaranteed ** to be unique - either because it is an INTEGER PRIMARY KEY or due to ** a UNIQUE constraint or index. ** @@ -94539,6 +96778,7 @@ SQLITE_PRIVATE int sqlite3CodeSubselect( Select *pSel; /* SELECT statement to encode */ SelectDest dest; /* How to deal with SELECT result */ int nReg; /* Registers to allocate */ + Expr *pLimit; /* New limit expression */ testcase( pExpr->op==TK_EXISTS ); testcase( pExpr->op==TK_SELECT ); @@ -94560,11 +96800,14 @@ SQLITE_PRIVATE int sqlite3CodeSubselect( sqlite3VdbeAddOp2(v, OP_Integer, 0, dest.iSDParm); VdbeComment((v, "Init EXISTS result")); } - sqlite3ExprDelete(pParse->db, pSel->pLimit); - pSel->pLimit = sqlite3ExprAlloc(pParse->db, TK_INTEGER, - &sqlite3IntTokens[1], 0); + pLimit = sqlite3ExprAlloc(pParse->db, TK_INTEGER,&sqlite3IntTokens[1], 0); + if( pSel->pLimit ){ + sqlite3ExprDelete(pParse->db, pSel->pLimit->pLeft); + pSel->pLimit->pLeft = pLimit; + }else{ + pSel->pLimit = sqlite3PExpr(pParse, TK_LIMIT, pLimit, 0); + } pSel->iLimit = 0; - pSel->selFlags &= ~SF_MultiValue; if( sqlite3Select(pParse, pSel, &dest) ){ return 0; } @@ -95344,6 +97587,10 @@ SQLITE_PRIVATE int sqlite3ExprCodeTarget(Parse *pParse, Expr *pExpr, int target) codeInteger(pParse, pExpr, 0, target); return target; } + case TK_TRUEFALSE: { + sqlite3VdbeAddOp2(v, OP_Integer, sqlite3ExprTruthValue(pExpr), target); + return target; + } #ifndef SQLITE_OMIT_FLOATING_POINT case TK_FLOAT: { assert( !ExprHasProperty(pExpr, EP_IntValue) ); @@ -95499,6 +97746,18 @@ SQLITE_PRIVATE int sqlite3ExprCodeTarget(Parse *pParse, Expr *pExpr, int target) sqlite3VdbeAddOp2(v, op, r1, inReg); break; } + case TK_TRUTH: { + int isTrue; /* IS TRUE or IS NOT TRUE */ + int bNormal; /* IS TRUE or IS FALSE */ + r1 = sqlite3ExprCodeTemp(pParse, pExpr->pLeft, ®Free1); + testcase( regFree1==0 ); + isTrue = sqlite3ExprTruthValue(pExpr->pRight); + bNormal = pExpr->op2==TK_IS; + testcase( isTrue && bNormal); + testcase( !isTrue && bNormal); + sqlite3VdbeAddOp4Int(v, OP_IsTrue, r1, inReg, !isTrue, isTrue ^ bNormal); + break; + } case TK_ISNULL: case TK_NOTNULL: { int addr; @@ -95670,9 +97929,21 @@ SQLITE_PRIVATE int sqlite3ExprCodeTarget(Parse *pParse, Expr *pExpr, int target) if( !pColl ) pColl = db->pDfltColl; sqlite3VdbeAddOp4(v, OP_CollSeq, 0, 0, 0, (char *)pColl, P4_COLLSEQ); } - sqlite3VdbeAddOp4(v, pParse->iSelfTab ? OP_PureFunc0 : OP_Function0, - constMask, r1, target, (char*)pDef, P4_FUNCDEF); - sqlite3VdbeChangeP5(v, (u8)nFarg); +#ifdef SQLITE_ENABLE_OFFSET_SQL_FUNC + if( pDef->funcFlags & SQLITE_FUNC_OFFSET ){ + Expr *pArg = pFarg->a[0].pExpr; + if( pArg->op==TK_COLUMN ){ + sqlite3VdbeAddOp3(v, OP_Offset, pArg->iTable, pArg->iColumn, target); + }else{ + sqlite3VdbeAddOp2(v, OP_Null, 0, target); + } + }else +#endif + { + sqlite3VdbeAddOp4(v, pParse->iSelfTab ? OP_PureFunc0 : OP_Function0, + constMask, r1, target, (char*)pDef, P4_FUNCDEF); + sqlite3VdbeChangeP5(v, (u8)nFarg); + } if( nFarg && constMask==0 ){ sqlite3ReleaseTempRange(pParse, r1, nFarg); } @@ -96262,6 +98533,23 @@ SQLITE_PRIVATE void sqlite3ExprIfTrue(Parse *pParse, Expr *pExpr, int dest, int sqlite3ExprIfFalse(pParse, pExpr->pLeft, dest, jumpIfNull); break; } + case TK_TRUTH: { + int isNot; /* IS NOT TRUE or IS NOT FALSE */ + int isTrue; /* IS TRUE or IS NOT TRUE */ + testcase( jumpIfNull==0 ); + isNot = pExpr->op2==TK_ISNOT; + isTrue = sqlite3ExprTruthValue(pExpr->pRight); + testcase( isTrue && isNot ); + testcase( !isTrue && isNot ); + if( isTrue ^ isNot ){ + sqlite3ExprIfTrue(pParse, pExpr->pLeft, dest, + isNot ? SQLITE_JUMPIFNULL : 0); + }else{ + sqlite3ExprIfFalse(pParse, pExpr->pLeft, dest, + isNot ? SQLITE_JUMPIFNULL : 0); + } + break; + } case TK_IS: case TK_ISNOT: testcase( op==TK_IS ); @@ -96416,6 +98704,26 @@ SQLITE_PRIVATE void sqlite3ExprIfFalse(Parse *pParse, Expr *pExpr, int dest, int sqlite3ExprIfTrue(pParse, pExpr->pLeft, dest, jumpIfNull); break; } + case TK_TRUTH: { + int isNot; /* IS NOT TRUE or IS NOT FALSE */ + int isTrue; /* IS TRUE or IS NOT TRUE */ + testcase( jumpIfNull==0 ); + isNot = pExpr->op2==TK_ISNOT; + isTrue = sqlite3ExprTruthValue(pExpr->pRight); + testcase( isTrue && isNot ); + testcase( !isTrue && isNot ); + if( isTrue ^ isNot ){ + /* IS TRUE and IS NOT FALSE */ + sqlite3ExprIfFalse(pParse, pExpr->pLeft, dest, + isNot ? 0 : SQLITE_JUMPIFNULL); + + }else{ + /* IS FALSE and IS NOT TRUE */ + sqlite3ExprIfTrue(pParse, pExpr->pLeft, dest, + isNot ? 0 : SQLITE_JUMPIFNULL); + } + break; + } case TK_IS: case TK_ISNOT: testcase( pExpr->op==TK_IS ); @@ -96703,6 +99011,105 @@ SQLITE_PRIVATE int sqlite3ExprImpliesExpr(Parse *pParse, Expr *pE1, Expr *pE2, i return 0; } +/* +** This is the Expr node callback for sqlite3ExprImpliesNotNullRow(). +** If the expression node requires that the table at pWalker->iCur +** have a non-NULL column, then set pWalker->eCode to 1 and abort. +*/ +static int impliesNotNullRow(Walker *pWalker, Expr *pExpr){ + /* This routine is only called for WHERE clause expressions and so it + ** cannot have any TK_AGG_COLUMN entries because those are only found + ** in HAVING clauses. We can get a TK_AGG_FUNCTION in a WHERE clause, + ** but that is an illegal construct and the query will be rejected at + ** a later stage of processing, so the TK_AGG_FUNCTION case does not + ** need to be considered here. */ + assert( pExpr->op!=TK_AGG_COLUMN ); + testcase( pExpr->op==TK_AGG_FUNCTION ); + + if( ExprHasProperty(pExpr, EP_FromJoin) ) return WRC_Prune; + switch( pExpr->op ){ + case TK_ISNOT: + case TK_NOT: + case TK_ISNULL: + case TK_IS: + case TK_OR: + case TK_CASE: + case TK_IN: + case TK_FUNCTION: + testcase( pExpr->op==TK_ISNOT ); + testcase( pExpr->op==TK_NOT ); + testcase( pExpr->op==TK_ISNULL ); + testcase( pExpr->op==TK_IS ); + testcase( pExpr->op==TK_OR ); + testcase( pExpr->op==TK_CASE ); + testcase( pExpr->op==TK_IN ); + testcase( pExpr->op==TK_FUNCTION ); + return WRC_Prune; + case TK_COLUMN: + if( pWalker->u.iCur==pExpr->iTable ){ + pWalker->eCode = 1; + return WRC_Abort; + } + return WRC_Prune; + + /* Virtual tables are allowed to use constraints like x=NULL. So + ** a term of the form x=y does not prove that y is not null if x + ** is the column of a virtual table */ + case TK_EQ: + case TK_NE: + case TK_LT: + case TK_LE: + case TK_GT: + case TK_GE: + testcase( pExpr->op==TK_EQ ); + testcase( pExpr->op==TK_NE ); + testcase( pExpr->op==TK_LT ); + testcase( pExpr->op==TK_LE ); + testcase( pExpr->op==TK_GT ); + testcase( pExpr->op==TK_GE ); + if( (pExpr->pLeft->op==TK_COLUMN && IsVirtual(pExpr->pLeft->pTab)) + || (pExpr->pRight->op==TK_COLUMN && IsVirtual(pExpr->pRight->pTab)) + ){ + return WRC_Prune; + } + default: + return WRC_Continue; + } +} + +/* +** Return true (non-zero) if expression p can only be true if at least +** one column of table iTab is non-null. In other words, return true +** if expression p will always be NULL or false if every column of iTab +** is NULL. +** +** False negatives are acceptable. In other words, it is ok to return +** zero even if expression p will never be true of every column of iTab +** is NULL. A false negative is merely a missed optimization opportunity. +** +** False positives are not allowed, however. A false positive may result +** in an incorrect answer. +** +** Terms of p that are marked with EP_FromJoin (and hence that come from +** the ON or USING clauses of LEFT JOINS) are excluded from the analysis. +** +** This routine is used to check if a LEFT JOIN can be converted into +** an ordinary JOIN. The p argument is the WHERE clause. If the WHERE +** clause requires that some column of the right table of the LEFT JOIN +** be non-NULL, then the LEFT JOIN can be safely converted into an +** ordinary join. +*/ +SQLITE_PRIVATE int sqlite3ExprImpliesNonNullRow(Expr *p, int iTab){ + Walker w; + w.xExprCallback = impliesNotNullRow; + w.xSelectCallback = 0; + w.xSelectCallback2 = 0; + w.eCode = 0; + w.u.iCur = iTab; + sqlite3WalkExpr(&w, p); + return w.eCode; +} + /* ** An instance of the following structure is used by the tree walker ** to determine if an expression can be evaluated by reference to the @@ -98166,6 +100573,10 @@ static void openStatTable( "DELETE FROM %Q.%s WHERE %s=%Q", pDb->zDbSName, zTab, zWhereType, zWhere ); +#ifdef SQLITE_ENABLE_PREUPDATE_HOOK + }else if( db->xPreUpdateCallback ){ + sqlite3NestedParse(pParse, "DELETE FROM %Q.%s", pDb->zDbSName, zTab); +#endif }else{ /* The sqlite_stat[134] table already exists. Delete all rows. */ sqlite3VdbeAddOp2(v, OP_Clear, aRoot[i], iDb); @@ -98930,6 +101341,9 @@ static void analyzeOneTable( int regIdxname = iMem++; /* Register containing index name */ int regStat1 = iMem++; /* Value for the stat column of sqlite_stat1 */ int regPrev = iMem; /* MUST BE LAST (see below) */ +#ifdef SQLITE_ENABLE_PREUPDATE_HOOK + Table *pStat1 = 0; +#endif pParse->nMem = MAX(pParse->nMem, iMem); v = sqlite3GetVdbe(pParse); @@ -98940,7 +101354,7 @@ static void analyzeOneTable( /* Do not gather statistics on views or virtual tables */ return; } - if( sqlite3_strlike("sqlite_%", pTab->zName, 0)==0 ){ + if( sqlite3_strlike("sqlite\\_%", pTab->zName, '\\')==0 ){ /* Do not gather statistics on system tables */ return; } @@ -98955,6 +101369,18 @@ static void analyzeOneTable( } #endif +#ifdef SQLITE_ENABLE_PREUPDATE_HOOK + if( db->xPreUpdateCallback ){ + pStat1 = (Table*)sqlite3DbMallocZero(db, sizeof(Table) + 13); + if( pStat1==0 ) return; + pStat1->zName = (char*)&pStat1[1]; + memcpy(pStat1->zName, "sqlite_stat1", 13); + pStat1->nCol = 3; + pStat1->iPKey = -1; + sqlite3VdbeAddOp4(pParse->pVdbe, OP_Noop, 0, 0, 0,(char*)pStat1,P4_DYNBLOB); + } +#endif + /* Establish a read-lock on the table at the shared-cache level. ** Open a read-only cursor on the table. Also allocate a cursor number ** to use for scanning indexes (iIdxCur). No index cursor is opened at @@ -99156,6 +101582,9 @@ static void analyzeOneTable( sqlite3VdbeAddOp4(v, OP_MakeRecord, regTabname, 3, regTemp, "BBB", 0); sqlite3VdbeAddOp2(v, OP_NewRowid, iStatCur, regNewRowid); sqlite3VdbeAddOp3(v, OP_Insert, iStatCur, regTemp, regNewRowid); +#ifdef SQLITE_ENABLE_PREUPDATE_HOOK + sqlite3VdbeChangeP4(v, -1, (char*)pStat1, P4_TABLE); +#endif sqlite3VdbeChangeP5(v, OPFLAG_APPEND); /* Add the entries to the stat3 or stat4 table. */ @@ -99219,6 +101648,9 @@ static void analyzeOneTable( sqlite3VdbeAddOp2(v, OP_NewRowid, iStatCur, regNewRowid); sqlite3VdbeAddOp3(v, OP_Insert, iStatCur, regTemp, regNewRowid); sqlite3VdbeChangeP5(v, OPFLAG_APPEND); +#ifdef SQLITE_ENABLE_PREUPDATE_HOOK + sqlite3VdbeChangeP4(v, -1, (char*)pStat1, P4_TABLE); +#endif sqlite3VdbeJumpHere(v, jZeroRows); } } @@ -99901,6 +102333,10 @@ static int resolveAttachExpr(NameContext *pName, Expr *pExpr) ** ** If the optional "KEY z" syntax is omitted, an SQL NULL is passed as the ** third argument. +** +** If the db->init.reopenMemdb flags is set, then instead of attaching a +** new database, close the database on db->init.iDb and reopen it as an +** empty MemDB. */ static void attachFunc( sqlite3_context *context, @@ -99921,65 +102357,85 @@ static void attachFunc( sqlite3_vfs *pVfs; UNUSED_PARAMETER(NotUsed); - zFile = (const char *)sqlite3_value_text(argv[0]); zName = (const char *)sqlite3_value_text(argv[1]); if( zFile==0 ) zFile = ""; if( zName==0 ) zName = ""; - /* Check for the following errors: - ** - ** * Too many attached databases, - ** * Transaction currently open - ** * Specified database name already being used. - */ - if( db->nDb>=db->aLimit[SQLITE_LIMIT_ATTACHED]+2 ){ - zErrDyn = sqlite3MPrintf(db, "too many attached databases - max %d", - db->aLimit[SQLITE_LIMIT_ATTACHED] - ); - goto attach_error; - } - for(i=0; inDb; i++){ - char *z = db->aDb[i].zDbSName; - assert( z && zName ); - if( sqlite3StrICmp(z, zName)==0 ){ - zErrDyn = sqlite3MPrintf(db, "database %s is already in use", zName); +#ifdef SQLITE_ENABLE_DESERIALIZE +# define REOPEN_AS_MEMDB(db) (db->init.reopenMemdb) +#else +# define REOPEN_AS_MEMDB(db) (0) +#endif + + if( REOPEN_AS_MEMDB(db) ){ + /* This is not a real ATTACH. Instead, this routine is being called + ** from sqlite3_deserialize() to close database db->init.iDb and + ** reopen it as a MemDB */ + pVfs = sqlite3_vfs_find("memdb"); + if( pVfs==0 ) return; + pNew = &db->aDb[db->init.iDb]; + if( pNew->pBt ) sqlite3BtreeClose(pNew->pBt); + pNew->pBt = 0; + pNew->pSchema = 0; + rc = sqlite3BtreeOpen(pVfs, "x", db, &pNew->pBt, 0, SQLITE_OPEN_MAIN_DB); + }else{ + /* This is a real ATTACH + ** + ** Check for the following errors: + ** + ** * Too many attached databases, + ** * Transaction currently open + ** * Specified database name already being used. + */ + if( db->nDb>=db->aLimit[SQLITE_LIMIT_ATTACHED]+2 ){ + zErrDyn = sqlite3MPrintf(db, "too many attached databases - max %d", + db->aLimit[SQLITE_LIMIT_ATTACHED] + ); goto attach_error; } + for(i=0; inDb; i++){ + char *z = db->aDb[i].zDbSName; + assert( z && zName ); + if( sqlite3StrICmp(z, zName)==0 ){ + zErrDyn = sqlite3MPrintf(db, "database %s is already in use", zName); + goto attach_error; + } + } + + /* Allocate the new entry in the db->aDb[] array and initialize the schema + ** hash tables. + */ + if( db->aDb==db->aDbStatic ){ + aNew = sqlite3DbMallocRawNN(db, sizeof(db->aDb[0])*3 ); + if( aNew==0 ) return; + memcpy(aNew, db->aDb, sizeof(db->aDb[0])*2); + }else{ + aNew = sqlite3DbRealloc(db, db->aDb, sizeof(db->aDb[0])*(db->nDb+1) ); + if( aNew==0 ) return; + } + db->aDb = aNew; + pNew = &db->aDb[db->nDb]; + memset(pNew, 0, sizeof(*pNew)); + + /* Open the database file. If the btree is successfully opened, use + ** it to obtain the database schema. At this point the schema may + ** or may not be initialized. + */ + flags = db->openFlags; + rc = sqlite3ParseUri(db->pVfs->zName, zFile, &flags, &pVfs, &zPath, &zErr); + if( rc!=SQLITE_OK ){ + if( rc==SQLITE_NOMEM ) sqlite3OomFault(db); + sqlite3_result_error(context, zErr, -1); + sqlite3_free(zErr); + return; + } + assert( pVfs ); + flags |= SQLITE_OPEN_MAIN_DB; + rc = sqlite3BtreeOpen(pVfs, zPath, db, &pNew->pBt, 0, flags); + sqlite3_free( zPath ); + db->nDb++; } - - /* Allocate the new entry in the db->aDb[] array and initialize the schema - ** hash tables. - */ - if( db->aDb==db->aDbStatic ){ - aNew = sqlite3DbMallocRawNN(db, sizeof(db->aDb[0])*3 ); - if( aNew==0 ) return; - memcpy(aNew, db->aDb, sizeof(db->aDb[0])*2); - }else{ - aNew = sqlite3DbRealloc(db, db->aDb, sizeof(db->aDb[0])*(db->nDb+1) ); - if( aNew==0 ) return; - } - db->aDb = aNew; - pNew = &db->aDb[db->nDb]; - memset(pNew, 0, sizeof(*pNew)); - - /* Open the database file. If the btree is successfully opened, use - ** it to obtain the database schema. At this point the schema may - ** or may not be initialized. - */ - flags = db->openFlags; - rc = sqlite3ParseUri(db->pVfs->zName, zFile, &flags, &pVfs, &zPath, &zErr); - if( rc!=SQLITE_OK ){ - if( rc==SQLITE_NOMEM ) sqlite3OomFault(db); - sqlite3_result_error(context, zErr, -1); - sqlite3_free(zErr); - return; - } - assert( pVfs ); - flags |= SQLITE_OPEN_MAIN_DB; - rc = sqlite3BtreeOpen(pVfs, zPath, db, &pNew->pBt, 0, flags); - sqlite3_free( zPath ); - db->nDb++; db->skipBtreeMutex = 0; if( rc==SQLITE_CONSTRAINT ){ rc = SQLITE_ERROR; @@ -100006,7 +102462,7 @@ static void attachFunc( sqlite3BtreeLeave(pNew->pBt); } pNew->safety_level = SQLITE_DEFAULT_SYNCHRONOUS+1; - pNew->zDbSName = sqlite3DbStrDup(db, zName); + if( !REOPEN_AS_MEMDB(db) ) pNew->zDbSName = sqlite3DbStrDup(db, zName); if( rc==SQLITE_OK && pNew->zDbSName==0 ){ rc = SQLITE_NOMEM_BKPT; } @@ -100046,13 +102502,15 @@ static void attachFunc( /* If the file was opened successfully, read the schema for the new database. ** If this fails, or if opening the file failed, then close the file and - ** remove the entry from the db->aDb[] array. i.e. put everything back the way - ** we found it. + ** remove the entry from the db->aDb[] array. i.e. put everything back the + ** way we found it. */ if( rc==SQLITE_OK ){ sqlite3BtreeEnterAll(db); + db->init.iDb = 0; rc = sqlite3Init(db, &zErrDyn); sqlite3BtreeLeaveAll(db); + assert( zErrDyn==0 || rc!=SQLITE_OK ); } #ifdef SQLITE_USER_AUTHENTICATION if( rc==SQLITE_OK ){ @@ -100064,21 +102522,23 @@ static void attachFunc( } #endif if( rc ){ - int iDb = db->nDb - 1; - assert( iDb>=2 ); - if( db->aDb[iDb].pBt ){ - sqlite3BtreeClose(db->aDb[iDb].pBt); - db->aDb[iDb].pBt = 0; - db->aDb[iDb].pSchema = 0; - } - sqlite3ResetAllSchemasOfConnection(db); - db->nDb = iDb; - if( rc==SQLITE_NOMEM || rc==SQLITE_IOERR_NOMEM ){ - sqlite3OomFault(db); - sqlite3DbFree(db, zErrDyn); - zErrDyn = sqlite3MPrintf(db, "out of memory"); - }else if( zErrDyn==0 ){ - zErrDyn = sqlite3MPrintf(db, "unable to open database: %s", zFile); + if( !REOPEN_AS_MEMDB(db) ){ + int iDb = db->nDb - 1; + assert( iDb>=2 ); + if( db->aDb[iDb].pBt ){ + sqlite3BtreeClose(db->aDb[iDb].pBt); + db->aDb[iDb].pBt = 0; + db->aDb[iDb].pSchema = 0; + } + sqlite3ResetAllSchemasOfConnection(db); + db->nDb = iDb; + if( rc==SQLITE_NOMEM || rc==SQLITE_IOERR_NOMEM ){ + sqlite3OomFault(db); + sqlite3DbFree(db, zErrDyn); + zErrDyn = sqlite3MPrintf(db, "out of memory"); + }else if( zErrDyn==0 ){ + zErrDyn = sqlite3MPrintf(db, "unable to open database: %s", zFile); + } } goto attach_error; } @@ -100350,8 +102810,13 @@ SQLITE_PRIVATE int sqlite3FixSelect( if( sqlite3FixExpr(pFix, pSelect->pLimit) ){ return 1; } - if( sqlite3FixExpr(pFix, pSelect->pOffset) ){ - return 1; + if( pSelect->pWith ){ + int i; + for(i=0; ipWith->nCte; i++){ + if( sqlite3FixSelect(pFix, pSelect->pWith->a[i].pSelect) ){ + return 1; + } + } } pSelect = pSelect->pPrior; } @@ -101816,10 +104281,24 @@ SQLITE_PRIVATE void sqlite3AddColumn(Parse *pParse, Token *pName, Token *pType){ */ SQLITE_PRIVATE void sqlite3AddNotNull(Parse *pParse, int onError){ Table *p; + Column *pCol; p = pParse->pNewTable; if( p==0 || NEVER(p->nCol<1) ) return; - p->aCol[p->nCol-1].notNull = (u8)onError; + pCol = &p->aCol[p->nCol-1]; + pCol->notNull = (u8)onError; p->tabFlags |= TF_HasNotNull; + + /* Set the uniqNotNull flag on any UNIQUE or PK indexes already created + ** on this column. */ + if( pCol->colFlags & COLFLAG_UNIQUE ){ + Index *pIdx; + for(pIdx=p->pIndex; pIdx; pIdx=pIdx->pNext){ + assert( pIdx->nKeyCol==1 && pIdx->onError!=OE_None ); + if( pIdx->aiColumn[0]==p->nCol-1 ){ + pIdx->uniqNotNull = 1; + } + } + } } /* @@ -101919,34 +104398,37 @@ SQLITE_PRIVATE char sqlite3AffinityType(const char *zIn, u8 *pszEst){ ** This routine is called by the parser while in the middle of ** parsing a CREATE TABLE statement. */ -SQLITE_PRIVATE void sqlite3AddDefaultValue(Parse *pParse, ExprSpan *pSpan){ +SQLITE_PRIVATE void sqlite3AddDefaultValue( + Parse *pParse, /* Parsing context */ + Expr *pExpr, /* The parsed expression of the default value */ + const char *zStart, /* Start of the default value text */ + const char *zEnd /* First character past end of defaut value text */ +){ Table *p; Column *pCol; sqlite3 *db = pParse->db; p = pParse->pNewTable; if( p!=0 ){ pCol = &(p->aCol[p->nCol-1]); - if( !sqlite3ExprIsConstantOrFunction(pSpan->pExpr, db->init.busy) ){ + if( !sqlite3ExprIsConstantOrFunction(pExpr, db->init.busy) ){ sqlite3ErrorMsg(pParse, "default value of column [%s] is not constant", pCol->zName); }else{ /* A copy of pExpr is used instead of the original, as pExpr contains - ** tokens that point to volatile memory. The 'span' of the expression - ** is required by pragma table_info. + ** tokens that point to volatile memory. */ Expr x; sqlite3ExprDelete(db, pCol->pDflt); memset(&x, 0, sizeof(x)); x.op = TK_SPAN; - x.u.zToken = sqlite3DbStrNDup(db, (char*)pSpan->zStart, - (int)(pSpan->zEnd - pSpan->zStart)); - x.pLeft = pSpan->pExpr; + x.u.zToken = sqlite3DbSpanDup(db, zStart, zEnd); + x.pLeft = pExpr; x.flags = EP_Skip; pCol->pDflt = sqlite3ExprDup(db, &x, EXPRDUP_REDUCE); sqlite3DbFree(db, x.u.zToken); } } - sqlite3ExprDelete(db, pSpan->pExpr); + sqlite3ExprDelete(db, pExpr); } /* @@ -102177,7 +104659,7 @@ SQLITE_PRIVATE void sqlite3ChangeCookie(Parse *pParse, int iDb){ Vdbe *v = pParse->pVdbe; assert( sqlite3SchemaMutexHeld(db, iDb, 0) ); sqlite3VdbeAddOp3(v, OP_SetCookie, iDb, BTREE_SCHEMA_VERSION, - db->aDb[iDb].pSchema->schema_cookie+1); + (int)(1+(unsigned)db->aDb[iDb].pSchema->schema_cookie)); } /* @@ -102551,8 +105033,6 @@ SQLITE_PRIVATE void sqlite3EndTable( p = pParse->pNewTable; if( p==0 ) return; - assert( !db->init.busy || !pSelect ); - /* If the db->init.busy is 1 it means we are reading the SQL off the ** "sqlite_master" or "sqlite_temp_master" table on the disk. ** So do not write to the disk again. Extract the root page number @@ -102563,6 +105043,10 @@ SQLITE_PRIVATE void sqlite3EndTable( ** table itself. So mark it read-only. */ if( db->init.busy ){ + if( pSelect ){ + sqlite3ErrorMsg(pParse, ""); + return; + } p->tnum = db->init.newTnum; if( p->tnum==1 ) p->tabFlags |= TF_Readonly; } @@ -102663,10 +105147,6 @@ SQLITE_PRIVATE void sqlite3EndTable( pParse->nTab = 2; addrTop = sqlite3VdbeCurrentAddr(v) + 1; sqlite3VdbeAddOp3(v, OP_InitCoroutine, regYield, 0, addrTop); - sqlite3SelectDestInit(&dest, SRT_Coroutine, regYield); - sqlite3Select(pParse, pSelect, &dest); - sqlite3VdbeEndCoroutine(v, regYield); - sqlite3VdbeJumpHere(v, addrTop - 1); if( pParse->nErr ) return; pSelTab = sqlite3ResultSetOfSelect(pParse, pSelect); if( pSelTab==0 ) return; @@ -102676,6 +105156,11 @@ SQLITE_PRIVATE void sqlite3EndTable( pSelTab->nCol = 0; pSelTab->aCol = 0; sqlite3DeleteTable(db, pSelTab); + sqlite3SelectDestInit(&dest, SRT_Coroutine, regYield); + sqlite3Select(pParse, pSelect, &dest); + if( pParse->nErr ) return; + sqlite3VdbeEndCoroutine(v, regYield); + sqlite3VdbeJumpHere(v, addrTop - 1); addrInsLoop = sqlite3VdbeAddOp1(v, OP_Yield, dest.iSDParm); VdbeCoverage(v); sqlite3VdbeAddOp3(v, OP_MakeRecord, dest.iSdst, dest.nSdst, regRec); @@ -102818,7 +105303,7 @@ SQLITE_PRIVATE void sqlite3CreateView( ** the end. */ sEnd = pParse->sLastToken; - assert( sEnd.z[0]!=0 ); + assert( sEnd.z[0]!=0 || sEnd.n==0 ); if( sEnd.z[0]!=';' ){ sEnd.z += sEnd.n; } @@ -102852,7 +105337,7 @@ SQLITE_PRIVATE int sqlite3ViewGetColumnNames(Parse *pParse, Table *pTable){ int nErr = 0; /* Number of errors encountered */ int n; /* Temporarily holds the number of cursors assigned */ sqlite3 *db = pParse->db; /* Database connection for malloc errors */ -#ifndef SQLITE_OMIT_VIRTUALTABLE +#ifndef SQLITE_OMIT_VIRTUALTABLE int rc; #endif #ifndef SQLITE_OMIT_AUTHORIZATION @@ -103779,7 +106264,9 @@ SQLITE_PRIVATE void sqlite3CreateIndex( */ if( pList==0 ){ Token prevCol; - sqlite3TokenInit(&prevCol, pTab->aCol[pTab->nCol-1].zName); + Column *pCol = &pTab->aCol[pTab->nCol-1]; + pCol->colFlags |= COLFLAG_UNIQUE; + sqlite3TokenInit(&prevCol, pCol->zName); pList = sqlite3ExprListAppend(pParse, 0, sqlite3ExprAlloc(db, TK_ID, &prevCol, 0)); if( pList==0 ) goto exit_create_index; @@ -104550,9 +107037,10 @@ SQLITE_PRIVATE SrcList *sqlite3SrcListAppendFromTerm( goto append_from_error; } p = sqlite3SrcListAppend(db, p, pTable, pDatabase); - if( p==0 || NEVER(p->nSrc==0) ){ + if( p==0 ){ goto append_from_error; } + assert( p->nSrc>0 ); pItem = &p->a[p->nSrc-1]; assert( pAlias!=0 ); if( pAlias->n ){ @@ -105061,6 +107549,18 @@ SQLITE_PRIVATE KeyInfo *sqlite3KeyInfoOfIndex(Parse *pParse, Index *pIdx){ pKey->aSortOrder[i] = pIdx->aSortOrder[i]; } if( pParse->nErr ){ + assert( pParse->rc==SQLITE_ERROR_MISSING_COLLSEQ ); + if( pIdx->bNoQuery==0 ){ + /* Deactivate the index because it contains an unknown collating + ** sequence. The only way to reactive the index is to reload the + ** schema. Adding the missing collating sequence later does not + ** reactive the index. The application had the chance to register + ** the missing index using the collation-needed callback. For + ** simplicity, SQLite will not give the application a second chance. + */ + pIdx->bNoQuery = 1; + pParse->rc = SQLITE_ERROR_RETRY; + } sqlite3KeyInfoUnref(pKey); pKey = 0; } @@ -105246,6 +107746,7 @@ SQLITE_PRIVATE CollSeq *sqlite3GetCollSeq( assert( !p || p->xCmp ); if( p==0 ){ sqlite3ErrorMsg(pParse, "no such collation sequence: %s", zName); + pParse->rc = SQLITE_ERROR_MISSING_COLLSEQ; } return p; } @@ -105719,6 +108220,8 @@ SQLITE_PRIVATE void sqlite3MaterializeView( Parse *pParse, /* Parsing context */ Table *pView, /* View definition */ Expr *pWhere, /* Optional WHERE clause to be added */ + ExprList *pOrderBy, /* Optional ORDER BY clause */ + Expr *pLimit, /* Optional LIMIT clause */ int iCur /* Cursor number for ephemeral table */ ){ SelectDest dest; @@ -105735,8 +108238,8 @@ SQLITE_PRIVATE void sqlite3MaterializeView( assert( pFrom->a[0].pOn==0 ); assert( pFrom->a[0].pUsing==0 ); } - pSel = sqlite3SelectNew(pParse, 0, pFrom, pWhere, 0, 0, 0, - SF_IncludeHidden, 0, 0); + pSel = sqlite3SelectNew(pParse, 0, pFrom, pWhere, 0, 0, pOrderBy, + SF_IncludeHidden, pLimit); sqlite3SelectDestInit(&dest, SRT_EphemTab, iCur); sqlite3Select(pParse, pSel, &dest); sqlite3SelectDelete(db, pSel); @@ -105758,29 +108261,29 @@ SQLITE_PRIVATE Expr *sqlite3LimitWhere( Expr *pWhere, /* The WHERE clause. May be null */ ExprList *pOrderBy, /* The ORDER BY clause. May be null */ Expr *pLimit, /* The LIMIT clause. May be null */ - Expr *pOffset, /* The OFFSET clause. May be null */ char *zStmtType /* Either DELETE or UPDATE. For err msgs. */ ){ - Expr *pWhereRowid = NULL; /* WHERE rowid .. */ + sqlite3 *db = pParse->db; + Expr *pLhs = NULL; /* LHS of IN(SELECT...) operator */ Expr *pInClause = NULL; /* WHERE rowid IN ( select ) */ - Expr *pSelectRowid = NULL; /* SELECT rowid ... */ ExprList *pEList = NULL; /* Expression list contaning only pSelectRowid */ SrcList *pSelectSrc = NULL; /* SELECT rowid FROM x ... (dup of pSrc) */ Select *pSelect = NULL; /* Complete SELECT tree */ + Table *pTab; /* Check that there isn't an ORDER BY without a LIMIT clause. */ - if( pOrderBy && (pLimit == 0) ) { + if( pOrderBy && pLimit==0 ) { sqlite3ErrorMsg(pParse, "ORDER BY without LIMIT on %s", zStmtType); - goto limit_where_cleanup; + sqlite3ExprDelete(pParse->db, pWhere); + sqlite3ExprListDelete(pParse->db, pOrderBy); + return 0; } /* We only need to generate a select expression if there ** is a limit/offset term to enforce. */ if( pLimit == 0 ) { - /* if pLimit is null, pOffset will always be null as well. */ - assert( pOffset == 0 ); return pWhere; } @@ -105793,36 +108296,47 @@ SQLITE_PRIVATE Expr *sqlite3LimitWhere( ** ); */ - pSelectRowid = sqlite3PExpr(pParse, TK_ROW, 0, 0); - if( pSelectRowid == 0 ) goto limit_where_cleanup; - pEList = sqlite3ExprListAppend(pParse, 0, pSelectRowid); - if( pEList == 0 ) goto limit_where_cleanup; + pTab = pSrc->a[0].pTab; + if( HasRowid(pTab) ){ + pLhs = sqlite3PExpr(pParse, TK_ROW, 0, 0); + pEList = sqlite3ExprListAppend( + pParse, 0, sqlite3PExpr(pParse, TK_ROW, 0, 0) + ); + }else{ + Index *pPk = sqlite3PrimaryKeyIndex(pTab); + if( pPk->nKeyCol==1 ){ + const char *zName = pTab->aCol[pPk->aiColumn[0]].zName; + pLhs = sqlite3Expr(db, TK_ID, zName); + pEList = sqlite3ExprListAppend(pParse, 0, sqlite3Expr(db, TK_ID, zName)); + }else{ + int i; + for(i=0; inKeyCol; i++){ + Expr *p = sqlite3Expr(db, TK_ID, pTab->aCol[pPk->aiColumn[i]].zName); + pEList = sqlite3ExprListAppend(pParse, pEList, p); + } + pLhs = sqlite3PExpr(pParse, TK_VECTOR, 0, 0); + if( pLhs ){ + pLhs->x.pList = sqlite3ExprListDup(db, pEList, 0); + } + } + } /* duplicate the FROM clause as it is needed by both the DELETE/UPDATE tree ** and the SELECT subtree. */ + pSrc->a[0].pTab = 0; pSelectSrc = sqlite3SrcListDup(pParse->db, pSrc, 0); - if( pSelectSrc == 0 ) { - sqlite3ExprListDelete(pParse->db, pEList); - goto limit_where_cleanup; - } + pSrc->a[0].pTab = pTab; + pSrc->a[0].pIBIndex = 0; /* generate the SELECT expression tree. */ - pSelect = sqlite3SelectNew(pParse,pEList,pSelectSrc,pWhere,0,0, - pOrderBy,0,pLimit,pOffset); - if( pSelect == 0 ) return 0; + pSelect = sqlite3SelectNew(pParse, pEList, pSelectSrc, pWhere, 0 ,0, + pOrderBy,0,pLimit + ); /* now generate the new WHERE rowid IN clause for the DELETE/UDPATE */ - pWhereRowid = sqlite3PExpr(pParse, TK_ROW, 0, 0); - pInClause = pWhereRowid ? sqlite3PExpr(pParse, TK_IN, pWhereRowid, 0) : 0; + pInClause = sqlite3PExpr(pParse, TK_IN, pLhs, 0); sqlite3PExprAddSelect(pParse, pInClause, pSelect); return pInClause; - -limit_where_cleanup: - sqlite3ExprDelete(pParse->db, pWhere); - sqlite3ExprListDelete(pParse->db, pOrderBy); - sqlite3ExprDelete(pParse->db, pLimit); - sqlite3ExprDelete(pParse->db, pOffset); - return 0; } #endif /* defined(SQLITE_ENABLE_UPDATE_DELETE_LIMIT) */ /* && !defined(SQLITE_OMIT_SUBQUERY) */ @@ -105837,7 +108351,9 @@ limit_where_cleanup: SQLITE_PRIVATE void sqlite3DeleteFrom( Parse *pParse, /* The parser context */ SrcList *pTabList, /* The table from which we should delete things */ - Expr *pWhere /* The WHERE clause. May be null */ + Expr *pWhere, /* The WHERE clause. May be null */ + ExprList *pOrderBy, /* ORDER BY clause. May be null */ + Expr *pLimit /* LIMIT clause. May be null */ ){ Vdbe *v; /* The virtual database engine */ Table *pTab; /* The table from which records will be deleted */ @@ -105882,6 +108398,7 @@ SQLITE_PRIVATE void sqlite3DeleteFrom( } assert( pTabList->nSrc==1 ); + /* Locate the table which we want to delete. This table has to be ** put in an SrcList structure because some of the subroutines we ** will be calling are designed to work with multiple tables and expect @@ -105896,16 +108413,26 @@ SQLITE_PRIVATE void sqlite3DeleteFrom( #ifndef SQLITE_OMIT_TRIGGER pTrigger = sqlite3TriggersExist(pParse, pTab, TK_DELETE, 0, 0); isView = pTab->pSelect!=0; - bComplex = pTrigger || sqlite3FkRequired(pParse, pTab, 0, 0); #else # define pTrigger 0 # define isView 0 #endif + bComplex = pTrigger || sqlite3FkRequired(pParse, pTab, 0, 0); #ifdef SQLITE_OMIT_VIEW # undef isView # define isView 0 #endif +#ifdef SQLITE_ENABLE_UPDATE_DELETE_LIMIT + if( !isView ){ + pWhere = sqlite3LimitWhere( + pParse, pTabList, pWhere, pOrderBy, pLimit, "DELETE" + ); + pOrderBy = 0; + pLimit = 0; + } +#endif + /* If pTab is really a view, make sure it has been initialized. */ if( sqlite3ViewGetColumnNames(pParse, pTab) ){ @@ -105953,8 +108480,12 @@ SQLITE_PRIVATE void sqlite3DeleteFrom( */ #if !defined(SQLITE_OMIT_VIEW) && !defined(SQLITE_OMIT_TRIGGER) if( isView ){ - sqlite3MaterializeView(pParse, pTab, pWhere, iTabCur); + sqlite3MaterializeView(pParse, pTab, + pWhere, pOrderBy, pLimit, iTabCur + ); iDataCur = iIdxCur = iTabCur; + pOrderBy = 0; + pLimit = 0; } #endif @@ -106198,6 +108729,10 @@ delete_from_cleanup: sqlite3AuthContextPop(&sContext); sqlite3SrcListDelete(db, pTabList); sqlite3ExprDelete(db, pWhere); +#if defined(SQLITE_ENABLE_UPDATE_DELETE_LIMIT) + sqlite3ExprListDelete(db, pOrderBy); + sqlite3ExprDelete(db, pLimit); +#endif sqlite3DbFree(db, aToOpen); return; } @@ -106355,7 +108890,7 @@ SQLITE_PRIVATE void sqlite3GenerateRowDelete( u8 p5 = 0; sqlite3GenerateRowIndexDelete(pParse, pTab, iDataCur, iIdxCur,0,iIdxNoSeek); sqlite3VdbeAddOp2(v, OP_Delete, iDataCur, (count?OPFLAG_NCHANGE:0)); - if( pParse->nested==0 ){ + if( pParse->nested==0 || 0==sqlite3_stricmp(pTab->zName, "sqlite_stat1") ){ sqlite3VdbeAppendP4(v, (char*)pTab, P4_TABLE); } if( eMode!=ONEPASS_OFF ){ @@ -106576,6 +109111,8 @@ static CollSeq *sqlite3GetFuncCollSeq(sqlite3_context *context){ ** iteration of the aggregate loop. */ static void sqlite3SkipAccumulatorLoad(sqlite3_context *context){ + assert( context->isError<=0 ); + context->isError = -1; context->skipFlag = 1; } @@ -106642,8 +109179,6 @@ static void lengthFunc( int argc, sqlite3_value **argv ){ - int len; - assert( argc==1 ); UNUSED_PARAMETER(argc); switch( sqlite3_value_type(argv[0]) ){ @@ -106655,13 +109190,17 @@ static void lengthFunc( } case SQLITE_TEXT: { const unsigned char *z = sqlite3_value_text(argv[0]); + const unsigned char *z0; + unsigned char c; if( z==0 ) return; - len = 0; - while( *z ){ - len++; - SQLITE_SKIP_UTF8(z); + z0 = z; + while( (c = *z)!=0 ){ + z++; + if( c>=0xc0 ){ + while( (*z & 0xc0)==0x80 ){ z++; z0++; } + } } - sqlite3_result_int(context, len); + sqlite3_result_int(context, (int)(z-z0)); break; } default: { @@ -107239,16 +109778,20 @@ static int patternCompare( ** c or cx. */ if( c<=0x80 ){ - u32 cx; + char zStop[3]; int bMatch; if( noCase ){ - cx = sqlite3Toupper(c); - c = sqlite3Tolower(c); + zStop[0] = sqlite3Toupper(c); + zStop[1] = sqlite3Tolower(c); + zStop[2] = 0; }else{ - cx = c; + zStop[0] = c; + zStop[1] = 0; } - while( (c2 = *(zString++))!=0 ){ - if( c2!=c && c2!=cx ) continue; + while(1){ + zString += strcspn((const char*)zString, zStop); + if( zString[0]==0 ) break; + zString++; bMatch = patternCompare(zPattern,zString,pInfo,matchOther); if( bMatch!=SQLITE_NOMATCH ) return bMatch; } @@ -107732,6 +110275,8 @@ static void replaceFunc( i64 nOut; /* Maximum size of zOut */ int loopLimit; /* Last zStr[] that might match zPattern[] */ int i, j; /* Loop counters */ + unsigned cntExpand; /* Number zOut expansions */ + sqlite3 *db = sqlite3_context_db_handle(context); assert( argc==3 ); UNUSED_PARAMETER(argc); @@ -107763,33 +110308,40 @@ static void replaceFunc( return; } loopLimit = nStr - nPattern; + cntExpand = 0; for(i=j=0; i<=loopLimit; i++){ if( zStr[i]!=zPattern[0] || memcmp(&zStr[i], zPattern, nPattern) ){ zOut[j++] = zStr[i]; }else{ - u8 *zOld; - sqlite3 *db = sqlite3_context_db_handle(context); - nOut += nRep - nPattern; - testcase( nOut-1==db->aLimit[SQLITE_LIMIT_LENGTH] ); - testcase( nOut-2==db->aLimit[SQLITE_LIMIT_LENGTH] ); - if( nOut-1>db->aLimit[SQLITE_LIMIT_LENGTH] ){ - sqlite3_result_error_toobig(context); - sqlite3_free(zOut); - return; - } - zOld = zOut; - zOut = sqlite3_realloc64(zOut, (int)nOut); - if( zOut==0 ){ - sqlite3_result_error_nomem(context); - sqlite3_free(zOld); - return; + if( nRep>nPattern ){ + nOut += nRep - nPattern; + testcase( nOut-1==db->aLimit[SQLITE_LIMIT_LENGTH] ); + testcase( nOut-2==db->aLimit[SQLITE_LIMIT_LENGTH] ); + if( nOut-1>db->aLimit[SQLITE_LIMIT_LENGTH] ){ + sqlite3_result_error_toobig(context); + sqlite3_free(zOut); + return; + } + cntExpand++; + if( (cntExpand&(cntExpand-1))==0 ){ + /* Grow the size of the output buffer only on substitutions + ** whose index is a power of two: 1, 2, 4, 8, 16, 32, ... */ + u8 *zOld; + zOld = zOut; + zOut = sqlite3_realloc64(zOut, (int)nOut + (nOut - nStr - 1)); + if( zOut==0 ){ + sqlite3_result_error_nomem(context); + sqlite3_free(zOld); + return; + } + } } memcpy(&zOut[j], zRep, nRep); j += nRep; i += nPattern-1; } } - assert( j+nStr-i+1==nOut ); + assert( j+nStr-i+1<=nOut ); memcpy(&zOut[j], &zStr[i], nStr-i); j += nStr - i; assert( j<=nOut ); @@ -108335,6 +110887,10 @@ SQLITE_PRIVATE void sqlite3RegisterBuiltinFunctions(void){ FUNCTION2(likely, 1, 0, 0, noopFunc, SQLITE_FUNC_UNLIKELY), #ifdef SQLITE_DEBUG FUNCTION2(affinity, 1, 0, 0, noopFunc, SQLITE_FUNC_AFFINITY), +#endif +#ifdef SQLITE_ENABLE_OFFSET_SQL_FUNC + FUNCTION2(sqlite_offset, 1, 0, 0, noopFunc, SQLITE_FUNC_OFFSET| + SQLITE_FUNC_TYPEOF), #endif FUNCTION(ltrim, 1, 1, 0, trimFunc ), FUNCTION(ltrim, 2, 1, 0, trimFunc ), @@ -109158,7 +111714,7 @@ SQLITE_PRIVATE void sqlite3FkDropTable(Parse *pParse, SrcList *pName, Table *pTa } pParse->disableTriggers = 1; - sqlite3DeleteFrom(pParse, sqlite3SrcListDup(db, pName, 0), 0); + sqlite3DeleteFrom(pParse, sqlite3SrcListDup(db, pName, 0), 0, 0, 0); pParse->disableTriggers = 0; /* If the DELETE has generated immediate foreign key constraint @@ -109716,7 +112272,7 @@ static Trigger *fkActionTrigger( sqlite3ExprListAppend(pParse, 0, pRaise), sqlite3SrcListAppend(db, 0, &tFrom, 0), pWhere, - 0, 0, 0, 0, 0, 0 + 0, 0, 0, 0, 0 ); pWhere = 0; } @@ -110067,11 +112623,12 @@ static int readsTable(Parse *p, int iDb, Table *pTab){ ** first use of table pTab. On 2nd and subsequent uses, the original ** AutoincInfo structure is used. ** -** Three memory locations are allocated: +** Four consecutive registers are allocated: ** -** (1) Register to hold the name of the pTab table. -** (2) Register to hold the maximum ROWID of pTab. -** (3) Register to hold the rowid in sqlite_sequence of pTab +** (1) The name of the pTab table. +** (2) The maximum ROWID of pTab. +** (3) The rowid in sqlite_sequence of pTab +** (4) The original value of the max ROWID in pTab, or NULL if none ** ** The 2nd register is the one that is returned. That is all the ** insert routine needs to know about. @@ -110099,7 +112656,7 @@ static int autoIncBegin( pInfo->iDb = iDb; pToplevel->nMem++; /* Register to hold name of table */ pInfo->regCtr = ++pToplevel->nMem; /* Max rowid register */ - pToplevel->nMem++; /* Rowid in sqlite_sequence */ + pToplevel->nMem +=2; /* Rowid in sqlite_sequence + orig max val */ } memId = pInfo->regCtr; } @@ -110127,15 +112684,17 @@ SQLITE_PRIVATE void sqlite3AutoincrementBegin(Parse *pParse){ static const int iLn = VDBE_OFFSET_LINENO(2); static const VdbeOpList autoInc[] = { /* 0 */ {OP_Null, 0, 0, 0}, - /* 1 */ {OP_Rewind, 0, 9, 0}, + /* 1 */ {OP_Rewind, 0, 10, 0}, /* 2 */ {OP_Column, 0, 0, 0}, - /* 3 */ {OP_Ne, 0, 7, 0}, + /* 3 */ {OP_Ne, 0, 9, 0}, /* 4 */ {OP_Rowid, 0, 0, 0}, /* 5 */ {OP_Column, 0, 1, 0}, - /* 6 */ {OP_Goto, 0, 9, 0}, - /* 7 */ {OP_Next, 0, 2, 0}, - /* 8 */ {OP_Integer, 0, 0, 0}, - /* 9 */ {OP_Close, 0, 0, 0} + /* 6 */ {OP_AddImm, 0, 0, 0}, + /* 7 */ {OP_Copy, 0, 0, 0}, + /* 8 */ {OP_Goto, 0, 11, 0}, + /* 9 */ {OP_Next, 0, 2, 0}, + /* 10 */ {OP_Integer, 0, 0, 0}, + /* 11 */ {OP_Close, 0, 0, 0} }; VdbeOp *aOp; pDb = &db->aDb[p->iDb]; @@ -110146,14 +112705,17 @@ SQLITE_PRIVATE void sqlite3AutoincrementBegin(Parse *pParse){ aOp = sqlite3VdbeAddOpList(v, ArraySize(autoInc), autoInc, iLn); if( aOp==0 ) break; aOp[0].p2 = memId; - aOp[0].p3 = memId+1; + aOp[0].p3 = memId+2; aOp[2].p3 = memId; aOp[3].p1 = memId-1; aOp[3].p3 = memId; aOp[3].p5 = SQLITE_JUMPIFNULL; aOp[4].p2 = memId+1; aOp[5].p3 = memId; - aOp[8].p2 = memId; + aOp[6].p1 = memId; + aOp[7].p2 = memId+2; + aOp[7].p1 = memId; + aOp[10].p2 = memId; } } @@ -110200,6 +112762,8 @@ static SQLITE_NOINLINE void autoIncrementEnd(Parse *pParse){ iRec = sqlite3GetTempReg(pParse); assert( sqlite3SchemaMutexHeld(db, 0, pDb->pSchema) ); + sqlite3VdbeAddOp3(v, OP_Le, memId+2, sqlite3VdbeCurrentAddr(v)+7, memId); + VdbeCoverage(v); sqlite3OpenTable(pParse, 0, p->iDb, pDb->pSchema->pSeqTab, OP_OpenWrite); aOp = sqlite3VdbeAddOpList(v, ArraySize(autoIncEnd), autoIncEnd, iLn); if( aOp==0 ) break; @@ -110766,7 +113330,8 @@ SQLITE_PRIVATE void sqlite3Insert( VdbeOp *pOp; sqlite3ExprCode(pParse, pList->a[ipkColumn].pExpr, regRowid); pOp = sqlite3VdbeGetOp(v, -1); - if( ALWAYS(pOp) && pOp->opcode==OP_Null && !IsVirtual(pTab) ){ + assert( pOp!=0 ); + if( pOp->opcode==OP_Null && !IsVirtual(pTab) ){ appendFlag = 1; pOp->opcode = OP_NewRowid; pOp->p1 = iDataCur; @@ -111427,6 +113992,7 @@ SQLITE_PRIVATE void sqlite3GenerateConstraintChecks( } /* Check to see if the new index entry will be unique */ + sqlite3ExprCachePush(pParse); sqlite3VdbeAddOp4Int(v, OP_NoConflict, iThisCur, addrUniqueOk, regIdx, pIdx->nKeyCol); VdbeCoverage(v); @@ -111515,6 +114081,7 @@ SQLITE_PRIVATE void sqlite3GenerateConstraintChecks( } } sqlite3VdbeResolveLabel(v, addrUniqueOk); + sqlite3ExprCachePop(pParse); if( regR!=regIdx ) sqlite3ReleaseTempRange(pParse, regR, nPkField); } if( ipkTop ){ @@ -111863,7 +114430,6 @@ static int xferOptimization( if( pSelect->pLimit ){ return 0; /* SELECT may not have a LIMIT clause */ } - assert( pSelect->pOffset==0 ); /* Must be so if pLimit==0 */ if( pSelect->pPrior ){ return 0; /* SELECT may not be a compound query */ } @@ -112575,6 +115141,9 @@ struct sqlite3_api_routines { int (*bind_pointer)(sqlite3_stmt*,int,void*,const char*,void(*)(void*)); void (*result_pointer)(sqlite3_context*,void*,const char*,void(*)(void*)); void *(*value_pointer)(sqlite3_value*,const char*); + int (*vtab_nochange)(sqlite3_context*); + int (*value_nochange)(sqlite3_value*); + const char *(*vtab_collation)(sqlite3_index_info*,int); }; /* @@ -112841,6 +115410,10 @@ typedef int (*sqlite3_loadext_entry)( #define sqlite3_bind_pointer sqlite3_api->bind_pointer #define sqlite3_result_pointer sqlite3_api->result_pointer #define sqlite3_value_pointer sqlite3_api->value_pointer +/* Version 3.22.0 and later */ +#define sqlite3_vtab_nochange sqlite3_api->vtab_nochange +#define sqlite3_value_nochange sqlite3_api->value_nochange +#define sqlite3_vtab_collation sqlite3_api->vtab_collation #endif /* !defined(SQLITE_CORE) && !defined(SQLITE_OMIT_LOAD_EXTENSION) */ #if !defined(SQLITE_CORE) && !defined(SQLITE_OMIT_LOAD_EXTENSION) @@ -113275,7 +115848,11 @@ static const sqlite3_api_routines sqlite3Apis = { sqlite3_prepare16_v3, sqlite3_bind_pointer, sqlite3_result_pointer, - sqlite3_value_pointer + sqlite3_value_pointer, + /* Version 3.22.0 and later */ + sqlite3_vtab_nochange, + sqlite3_value_nochange, + sqlite3_vtab_collation }; /* @@ -113341,8 +115918,10 @@ static int sqlite3LoadExtension( #if SQLITE_OS_UNIX || SQLITE_OS_WIN for(ii=0; iipzErrMsg); *pData->pzErrMsg = z; } @@ -117261,7 +119841,8 @@ SQLITE_PRIVATE int sqlite3SchemaToIndex(sqlite3 *db, Schema *pSchema){ */ assert( sqlite3_mutex_held(db->mutex) ); if( pSchema ){ - for(i=0; ALWAYS(inDb); i++){ + for(i=0; 1; i++){ + assert( inDb ); if( db->aDb[i].pSchema==pSchema ){ break; } @@ -117442,8 +120023,6 @@ static int sqlite3Prepare( end_prepare: sqlite3ParserReset(&sParse); - rc = sqlite3ApiExit(db, rc); - assert( (rc&db->errMask)==rc ); return rc; } static int sqlite3LockAndPrepare( @@ -117456,6 +120035,7 @@ static int sqlite3LockAndPrepare( const char **pzTail /* OUT: End of parsed string */ ){ int rc; + int cnt = 0; #ifdef SQLITE_ENABLE_API_ARMOR if( ppStmt==0 ) return SQLITE_MISUSE_BKPT; @@ -117466,15 +120046,18 @@ static int sqlite3LockAndPrepare( } sqlite3_mutex_enter(db->mutex); sqlite3BtreeEnterAll(db); - rc = sqlite3Prepare(db, zSql, nBytes, prepFlags, pOld, ppStmt, pzTail); - if( rc==SQLITE_SCHEMA ){ - sqlite3ResetOneSchema(db, -1); - sqlite3_finalize(*ppStmt); + do{ + /* Make multiple attempts to compile the SQL, until it either succeeds + ** or encounters a permanent error. A schema problem after one schema + ** reset is considered a permanent error. */ rc = sqlite3Prepare(db, zSql, nBytes, prepFlags, pOld, ppStmt, pzTail); - } + assert( rc==SQLITE_OK || *ppStmt==0 ); + }while( rc==SQLITE_ERROR_RETRY + || (rc==SQLITE_SCHEMA && (sqlite3ResetOneSchema(db,-1), cnt++)==0) ); sqlite3BtreeLeaveAll(db); + rc = sqlite3ApiExit(db, rc); + assert( (rc&db->errMask)==rc ); sqlite3_mutex_leave(db->mutex); - assert( rc==SQLITE_OK || *ppStmt==0 ); return rc; } @@ -117708,8 +120291,7 @@ SQLITE_API int sqlite3_prepare16_v3( /***/ int sqlite3SelectTrace = 0; # define SELECTTRACE(K,P,S,X) \ if(sqlite3SelectTrace&(K)) \ - sqlite3DebugPrintf("%*s%s.%p: ",(P)->nSelectIndent*2-2,"",\ - (S)->zSelName,(S)),\ + sqlite3DebugPrintf("%s/%p: ",(S)->zSelName,(S)),\ sqlite3DebugPrintf X #else # define SELECTTRACE(K,P,S,X) @@ -117761,7 +120343,6 @@ static void clearSelect(sqlite3 *db, Select *p, int bFree){ sqlite3ExprDelete(db, p->pHaving); sqlite3ExprListDelete(db, p->pOrderBy); sqlite3ExprDelete(db, p->pLimit); - sqlite3ExprDelete(db, p->pOffset); if( OK_IF_ALWAYS_TRUE(p->pWith) ) sqlite3WithDelete(db, p->pWith); if( bFree ) sqlite3DbFreeNN(db, p); p = pPrior; @@ -117794,8 +120375,7 @@ SQLITE_PRIVATE Select *sqlite3SelectNew( Expr *pHaving, /* the HAVING clause */ ExprList *pOrderBy, /* the ORDER BY clause */ u32 selFlags, /* Flag parameters, such as SF_Distinct */ - Expr *pLimit, /* LIMIT value. NULL means not used */ - Expr *pOffset /* OFFSET value. NULL means no offset */ + Expr *pLimit /* LIMIT value. NULL means not used */ ){ Select *pNew; Select standin; @@ -117828,10 +120408,7 @@ SQLITE_PRIVATE Select *sqlite3SelectNew( pNew->pPrior = 0; pNew->pNext = 0; pNew->pLimit = pLimit; - pNew->pOffset = pOffset; pNew->pWith = 0; - assert( pOffset==0 || pLimit!=0 || pParse->nErr>0 - || pParse->db->mallocFailed!=0 ); if( pParse->db->mallocFailed ) { clearSelect(pParse->db, pNew, pNew!=&standin); pNew = 0; @@ -118075,6 +120652,29 @@ static void setJoinExpr(Expr *p, int iTable){ } } +/* Undo the work of setJoinExpr(). In the expression tree p, convert every +** term that is marked with EP_FromJoin and iRightJoinTable==iTable into +** an ordinary term that omits the EP_FromJoin mark. +** +** This happens when a LEFT JOIN is simplified into an ordinary JOIN. +*/ +static void unsetJoinExpr(Expr *p, int iTable){ + while( p ){ + if( ExprHasProperty(p, EP_FromJoin) + && (iTable<0 || p->iRightJoinTable==iTable) ){ + ExprClearProperty(p, EP_FromJoin); + } + if( p->op==TK_FUNCTION && p->x.pList ){ + int i; + for(i=0; ix.pList->nExpr; i++){ + unsetJoinExpr(p->x.pList->a[i].pExpr, iTable); + } + } + unsetJoinExpr(p->pLeft, iTable); + p = p->pRight; + } +} + /* ** This routine processes the join information for a SELECT statement. ** ON and USING clauses are converted into extra terms of the WHERE clause. @@ -118958,12 +121558,15 @@ static void generateSortTail( iSortTab = iTab; bSeq = 1; } - for(i=0, iCol=nKey+bSeq; i=0; i--){ int iRead; if( aOutEx[i].u.x.iOrderByCol ){ iRead = aOutEx[i].u.x.iOrderByCol-1; }else{ - iRead = iCol++; + iRead = iCol--; } sqlite3VdbeAddOp3(v, OP_Column, iSortTab, iRead, regRow+i); VdbeComment((v, "%s", aOutEx[i].zName ? aOutEx[i].zName : aOutEx[i].zSpan)); @@ -119073,8 +121676,9 @@ static const char *columnTypeImpl( assert( pExpr!=0 ); assert( pNC->pSrcList!=0 ); + assert( pExpr->op!=TK_AGG_COLUMN ); /* This routine runes before aggregates + ** are processed */ switch( pExpr->op ){ - case TK_AGG_COLUMN: case TK_COLUMN: { /* The expression is a column. Locate the table the column is being ** extracted from in NameContext.pSrcList. This table may be real @@ -119083,8 +121687,6 @@ static const char *columnTypeImpl( Table *pTab = 0; /* Table structure column is extracted from */ Select *pS = 0; /* Select the column is extracted from */ int iCol = pExpr->iColumn; /* Index of column in pTab */ - testcase( pExpr->op==TK_AGG_COLUMN ); - testcase( pExpr->op==TK_COLUMN ); while( pNC && !pTab ){ SrcList *pTabList = pNC->pSrcList; for(j=0;jnSrc && pTabList->a[j].iCursor!=pExpr->iTable;j++); @@ -119288,6 +121890,7 @@ static void generateColumnNames( if( pParse->colNamesSet || db->mallocFailed ) return; /* Column names are determined by the left-most term of a compound select */ while( pSelect->pPrior ) pSelect = pSelect->pPrior; + SELECTTRACE(1,pParse,pSelect,("generating column names\n")); pTabList = pSelect->pSrc; pEList = pSelect->pEList; assert( v!=0 ); @@ -119396,12 +121999,12 @@ SQLITE_PRIVATE int sqlite3ColumnsFromExprList( pColExpr = pColExpr->pRight; assert( pColExpr!=0 ); } - if( (pColExpr->op==TK_COLUMN || pColExpr->op==TK_AGG_COLUMN) - && pColExpr->pTab!=0 - ){ + assert( pColExpr->op!=TK_AGG_COLUMN ); + if( pColExpr->op==TK_COLUMN ){ /* For columns use the column name name */ int iCol = pColExpr->iColumn; Table *pTab = pColExpr->pTab; + assert( pTab!=0 ); if( iCol<0 ) iCol = pTab->iPKey; zName = iCol>=0 ? pTab->aCol[iCol].zName : "rowid"; }else if( pColExpr->op==TK_ID ){ @@ -119561,7 +122164,7 @@ SQLITE_PRIVATE Vdbe *sqlite3GetVdbe(Parse *pParse){ /* ** Compute the iLimit and iOffset fields of the SELECT based on the -** pLimit and pOffset expressions. pLimit and pOffset hold the expressions +** pLimit expressions. pLimit->pLeft and pLimit->pRight hold the expressions ** that appear in the original SQL statement after the LIMIT and OFFSET ** keywords. Or NULL if those keywords are omitted. iLimit and iOffset ** are the integer memory register numbers for counters used to compute @@ -119569,15 +122172,15 @@ SQLITE_PRIVATE Vdbe *sqlite3GetVdbe(Parse *pParse){ ** iLimit and iOffset are negative. ** ** This routine changes the values of iLimit and iOffset only if -** a limit or offset is defined by pLimit and pOffset. iLimit and -** iOffset should have been preset to appropriate default values (zero) +** a limit or offset is defined by pLimit->pLeft and pLimit->pRight. iLimit +** and iOffset should have been preset to appropriate default values (zero) ** prior to calling this routine. ** ** The iOffset register (if it exists) is initialized to the value ** of the OFFSET. The iLimit register is initialized to LIMIT. Register ** iOffset+1 is initialized to LIMIT+OFFSET. ** -** Only if pLimit!=0 or pOffset!=0 do the limit registers get +** Only if pLimit->pLeft!=0 do the limit registers get ** redefined. The UNION ALL operator uses this property to force ** the reuse of the same limit and offset registers across multiple ** SELECT statements. @@ -119587,6 +122190,8 @@ static void computeLimitRegisters(Parse *pParse, Select *p, int iBreak){ int iLimit = 0; int iOffset; int n; + Expr *pLimit = p->pLimit; + if( p->iLimit ) return; /* @@ -119596,12 +122201,13 @@ static void computeLimitRegisters(Parse *pParse, Select *p, int iBreak){ ** no rows. */ sqlite3ExprCacheClear(pParse); - assert( p->pOffset==0 || p->pLimit!=0 ); - if( p->pLimit ){ + if( pLimit ){ + assert( pLimit->op==TK_LIMIT ); + assert( pLimit->pLeft!=0 ); p->iLimit = iLimit = ++pParse->nMem; v = sqlite3GetVdbe(pParse); assert( v!=0 ); - if( sqlite3ExprIsInteger(p->pLimit, &n) ){ + if( sqlite3ExprIsInteger(pLimit->pLeft, &n) ){ sqlite3VdbeAddOp2(v, OP_Integer, n, iLimit); VdbeComment((v, "LIMIT counter")); if( n==0 ){ @@ -119611,15 +122217,15 @@ static void computeLimitRegisters(Parse *pParse, Select *p, int iBreak){ p->selFlags |= SF_FixedLimit; } }else{ - sqlite3ExprCode(pParse, p->pLimit, iLimit); + sqlite3ExprCode(pParse, pLimit->pLeft, iLimit); sqlite3VdbeAddOp1(v, OP_MustBeInt, iLimit); VdbeCoverage(v); VdbeComment((v, "LIMIT counter")); sqlite3VdbeAddOp2(v, OP_IfNot, iLimit, iBreak); VdbeCoverage(v); } - if( p->pOffset ){ + if( pLimit->pRight ){ p->iOffset = iOffset = ++pParse->nMem; pParse->nMem++; /* Allocate an extra register for limit+offset */ - sqlite3ExprCode(pParse, p->pOffset, iOffset); + sqlite3ExprCode(pParse, pLimit->pRight, iOffset); sqlite3VdbeAddOp1(v, OP_MustBeInt, iOffset); VdbeCoverage(v); VdbeComment((v, "OFFSET counter")); sqlite3VdbeAddOp3(v, OP_OffsetLimit, iLimit, iOffset+1, iOffset); @@ -119749,7 +122355,7 @@ static void generateWithRecursiveQuery( int i; /* Loop counter */ int rc; /* Result code */ ExprList *pOrderBy; /* The ORDER BY clause */ - Expr *pLimit, *pOffset; /* Saved LIMIT and OFFSET */ + Expr *pLimit; /* Saved LIMIT and OFFSET */ int regLimit, regOffset; /* Registers used by LIMIT and OFFSET */ /* Obtain authorization to do a recursive query */ @@ -119760,10 +122366,9 @@ static void generateWithRecursiveQuery( p->nSelectRow = 320; /* 4 billion rows */ computeLimitRegisters(pParse, p, addrBreak); pLimit = p->pLimit; - pOffset = p->pOffset; regLimit = p->iLimit; regOffset = p->iOffset; - p->pLimit = p->pOffset = 0; + p->pLimit = 0; p->iLimit = p->iOffset = 0; pOrderBy = p->pOrderBy; @@ -119856,7 +122461,6 @@ end_of_recursive_query: sqlite3ExprListDelete(pParse->db, p->pOrderBy); p->pOrderBy = pOrderBy; p->pLimit = pLimit; - p->pOffset = pOffset; return; } #endif /* SQLITE_OMIT_CTE */ @@ -119875,9 +122479,14 @@ static int multiSelectOrderBy( ** on a VALUES clause. ** ** Because the Select object originates from a VALUES clause: -** (1) It has no LIMIT or OFFSET +** (1) There is no LIMIT or OFFSET or else there is a LIMIT of exactly 1 ** (2) All terms are UNION ALL ** (3) There is no ORDER BY clause +** +** The "LIMIT of exactly 1" case of condition (1) comes about when a VALUES +** clause occurs within scalar expression (ex: "SELECT (VALUES(1),(2),(3))"). +** The sqlite3CodeSubselect will have added the LIMIT 1 clause in tht case. +** Since the limit is exactly 1, we only need to evalutes the left-most VALUES. */ static int multiSelectValues( Parse *pParse, /* Parsing context */ @@ -119885,14 +122494,13 @@ static int multiSelectValues( SelectDest *pDest /* What to do with query results */ ){ Select *pPrior; + Select *pRightmost = p; int nRow = 1; int rc = 0; assert( p->selFlags & SF_MultiValue ); do{ assert( p->selFlags & SF_Values ); assert( p->op==TK_ALL || (p->op==TK_SELECT && p->pPrior==0) ); - assert( p->pLimit==0 ); - assert( p->pOffset==0 ); assert( p->pNext==0 || p->pEList->nExpr==p->pNext->pEList->nExpr ); if( p->pPrior==0 ) break; assert( p->pPrior->pNext==p ); @@ -119904,7 +122512,7 @@ static int multiSelectValues( p->pPrior = 0; rc = sqlite3Select(pParse, p, pDest); p->pPrior = pPrior; - if( rc ) break; + if( rc || pRightmost->pLimit ) break; p->nSelectRow = nRow; p = p->pNext; } @@ -120019,11 +122627,9 @@ static int multiSelect( pPrior->iLimit = p->iLimit; pPrior->iOffset = p->iOffset; pPrior->pLimit = p->pLimit; - pPrior->pOffset = p->pOffset; explainSetInteger(iSub1, pParse->iNextSelectId); rc = sqlite3Select(pParse, pPrior, &dest); p->pLimit = 0; - p->pOffset = 0; if( rc ){ goto multi_select_end; } @@ -120045,7 +122651,7 @@ static int multiSelect( p->pPrior = pPrior; p->nSelectRow = sqlite3LogEstAdd(p->nSelectRow, pPrior->nSelectRow); if( pPrior->pLimit - && sqlite3ExprIsInteger(pPrior->pLimit, &nLimit) + && sqlite3ExprIsInteger(pPrior->pLimit->pLeft, &nLimit) && nLimit>0 && p->nSelectRow > sqlite3LogEst((u64)nLimit) ){ p->nSelectRow = sqlite3LogEst((u64)nLimit); @@ -120060,7 +122666,7 @@ static int multiSelect( int unionTab; /* Cursor number of the temporary table holding result */ u8 op = 0; /* One of the SRT_ operations to apply to self */ int priorOp; /* The SRT_ operation to apply to prior selects */ - Expr *pLimit, *pOffset; /* Saved values of p->nLimit and p->nOffset */ + Expr *pLimit; /* Saved values of p->nLimit */ int addr; SelectDest uniondest; @@ -120072,7 +122678,6 @@ static int multiSelect( ** right. */ assert( p->pLimit==0 ); /* Not allowed on leftward elements */ - assert( p->pOffset==0 ); /* Not allowed on leftward elements */ unionTab = dest.iSDParm; }else{ /* We will need to create our own temporary table to hold the @@ -120108,8 +122713,6 @@ static int multiSelect( p->pPrior = 0; pLimit = p->pLimit; p->pLimit = 0; - pOffset = p->pOffset; - p->pOffset = 0; uniondest.eDest = op; explainSetInteger(iSub2, pParse->iNextSelectId); rc = sqlite3Select(pParse, p, &uniondest); @@ -120125,7 +122728,6 @@ static int multiSelect( } sqlite3ExprDelete(db, p->pLimit); p->pLimit = pLimit; - p->pOffset = pOffset; p->iLimit = 0; p->iOffset = 0; @@ -120153,7 +122755,7 @@ static int multiSelect( default: assert( p->op==TK_INTERSECT ); { int tab1, tab2; int iCont, iBreak, iStart; - Expr *pLimit, *pOffset; + Expr *pLimit; int addr; SelectDest intersectdest; int r1; @@ -120189,8 +122791,6 @@ static int multiSelect( p->pPrior = 0; pLimit = p->pLimit; p->pLimit = 0; - pOffset = p->pOffset; - p->pOffset = 0; intersectdest.iSDParm = tab2; explainSetInteger(iSub2, pParse->iNextSelectId); rc = sqlite3Select(pParse, p, &intersectdest); @@ -120200,7 +122800,6 @@ static int multiSelect( if( p->nSelectRow>pPrior->nSelectRow ) p->nSelectRow = pPrior->nSelectRow; sqlite3ExprDelete(db, p->pLimit); p->pLimit = pLimit; - p->pOffset = pOffset; /* Generate code to take the intersection of the two temporary ** tables. @@ -120679,8 +123278,6 @@ static int multiSelectOrderBy( } sqlite3ExprDelete(db, p->pLimit); p->pLimit = 0; - sqlite3ExprDelete(db, p->pOffset); - p->pOffset = 0; regAddrA = ++pParse->nMem; regAddrB = ++pParse->nMem; @@ -121070,12 +123667,11 @@ static void substSelect( ** (19) If the subquery uses LIMIT then the outer query may not ** have a WHERE clause. ** -** (**) Subsumed into (17d3). Was: If the sub-query is a compound select, -** then it must not use an ORDER BY clause - Ticket #3773. Because -** of (17d3), then only way to have a compound subquery is if it is -** the only term in the FROM clause of the outer query. But if the -** only term in the FROM clause has an ORDER BY, then it will be -** implemented as a co-routine and the flattener will never be called. +** (20) If the sub-query is a compound select, then it must not use +** an ORDER BY clause. Ticket #3773. We could relax this constraint +** somewhat by saying that the terms of the ORDER BY clause must +** appear as unmodified result columns in the outer query. But we +** have other optimizations in mind to deal with that case. ** ** (21) If the subquery uses LIMIT then the outer query may not be ** DISTINCT. (See ticket [752e1646fc]). @@ -121145,7 +123741,7 @@ static int flattenSubquery( ** became arbitrary expressions, we were forced to add restrictions (13) ** and (14). */ if( pSub->pLimit && p->pLimit ) return 0; /* Restriction (13) */ - if( pSub->pOffset ) return 0; /* Restriction (14) */ + if( pSub->pLimit && pSub->pLimit->pRight ) return 0; /* Restriction (14) */ if( (p->selFlags & SF_Compound)!=0 && pSub->pLimit ){ return 0; /* Restriction (15) */ } @@ -121209,6 +123805,9 @@ static int flattenSubquery( ** queries. */ if( pSub->pPrior ){ + if( pSub->pOrderBy ){ + return 0; /* Restriction (20) */ + } if( isAgg || (p->selFlags & SF_Distinct)!=0 || pSrc->nSrc!=1 ){ return 0; /* (17d1), (17d2), or (17d3) */ } @@ -121243,15 +123842,6 @@ static int flattenSubquery( */ assert( (p->selFlags & SF_Recursive)==0 || pSub->pPrior==0 ); - /* Ex-restriction (20): - ** A compound subquery must be the only term in the FROM clause of the - ** outer query by restriction (17d3). But if that term also has an - ** ORDER BY clause, then the subquery will be implemented by co-routine - ** and so the flattener will never be invoked. Hence, it is not possible - ** for the subquery to be a compound and have an ORDER BY clause. - */ - assert( pSub->pPrior==0 || pSub->pOrderBy==0 ); - /***** If we reach this point, flattening is permitted. *****/ SELECTTRACE(1,pParse,p,("flatten %s.%p from term %d\n", pSub->zSelName, pSub, iFrom)); @@ -121299,16 +123889,13 @@ static int flattenSubquery( Select *pNew; ExprList *pOrderBy = p->pOrderBy; Expr *pLimit = p->pLimit; - Expr *pOffset = p->pOffset; Select *pPrior = p->pPrior; p->pOrderBy = 0; p->pSrc = 0; p->pPrior = 0; p->pLimit = 0; - p->pOffset = 0; pNew = sqlite3SelectDup(db, p, 0); sqlite3SelectSetName(pNew, pSub->zSelName); - p->pOffset = pOffset; p->pLimit = pLimit; p->pOrderBy = pOrderBy; p->pSrc = pSrc; @@ -121456,7 +124043,6 @@ static int flattenSubquery( pOrderBy->a[i].u.x.iOrderByCol = 0; } assert( pParent->pOrderBy==0 ); - assert( pSub->pPrior==0 ); pParent->pOrderBy = pOrderBy; pSub->pOrderBy = 0; } @@ -121540,12 +124126,22 @@ static int flattenSubquery( ** (3) The inner query has a LIMIT clause (since the changes to the WHERE ** close would change the meaning of the LIMIT). ** -** (4) The inner query is the right operand of a LEFT JOIN. (The caller -** enforces this restriction since this routine does not have enough -** information to know.) +** (4) The inner query is the right operand of a LEFT JOIN and the +** expression to be pushed down does not come from the ON clause +** on that LEFT JOIN. ** ** (5) The WHERE clause expression originates in the ON or USING clause -** of a LEFT JOIN. +** of a LEFT JOIN where iCursor is not the right-hand table of that +** left join. An example: +** +** SELECT * +** FROM (SELECT 1 AS a1 UNION ALL SELECT 2) AS aa +** JOIN (SELECT 1 AS b2 UNION ALL SELECT 2) AS bb ON (a1=b2) +** LEFT JOIN (SELECT 8 AS c3 UNION ALL SELECT 9) AS cc ON (b2=2); +** +** The correct answer is three rows: (1,1,NULL),(2,2,8),(2,2,9). +** But if the (b2=2) term were to be pushed down into the bb subquery, +** then the (1,1,NULL) row would be suppressed. ** ** Return 0 if no changes are made and non-zero if one or more WHERE clause ** terms are duplicated into the subquery. @@ -121554,7 +124150,8 @@ static int pushDownWhereTerms( Parse *pParse, /* Parse context (for malloc() and error reporting) */ Select *pSubq, /* The subquery whose WHERE clause is to be augmented */ Expr *pWhere, /* The WHERE clause of the outer query */ - int iCursor /* Cursor number of the subquery */ + int iCursor, /* Cursor number of the subquery */ + int isLeftJoin /* True if pSubq is the right term of a LEFT JOIN */ ){ Expr *pNew; int nChng = 0; @@ -121578,15 +124175,25 @@ static int pushDownWhereTerms( return 0; /* restriction (3) */ } while( pWhere->op==TK_AND ){ - nChng += pushDownWhereTerms(pParse, pSubq, pWhere->pRight, iCursor); + nChng += pushDownWhereTerms(pParse, pSubq, pWhere->pRight, + iCursor, isLeftJoin); pWhere = pWhere->pLeft; } - if( ExprHasProperty(pWhere,EP_FromJoin) ) return 0; /* restriction (5) */ + if( isLeftJoin + && (ExprHasProperty(pWhere,EP_FromJoin)==0 + || pWhere->iRightJoinTable!=iCursor) + ){ + return 0; /* restriction (4) */ + } + if( ExprHasProperty(pWhere,EP_FromJoin) && pWhere->iRightJoinTable!=iCursor ){ + return 0; /* restriction (5) */ + } if( sqlite3ExprIsTableConstant(pWhere, iCursor) ){ nChng++; while( pSubq ){ SubstContext x; pNew = sqlite3ExprDup(pParse->db, pWhere, 0); + unsetJoinExpr(pNew, -1); x.pParse = pParse; x.iTable = iCursor; x.iNewTable = iCursor; @@ -121606,42 +124213,44 @@ static int pushDownWhereTerms( #endif /* !defined(SQLITE_OMIT_SUBQUERY) || !defined(SQLITE_OMIT_VIEW) */ /* -** Based on the contents of the AggInfo structure indicated by the first -** argument, this function checks if the following are true: +** The pFunc is the only aggregate function in the query. Check to see +** if the query is a candidate for the min/max optimization. ** -** * the query contains just a single aggregate function, -** * the aggregate function is either min() or max(), and -** * the argument to the aggregate function is a column value. +** If the query is a candidate for the min/max optimization, then set +** *ppMinMax to be an ORDER BY clause to be used for the optimization +** and return either WHERE_ORDERBY_MIN or WHERE_ORDERBY_MAX depending on +** whether pFunc is a min() or max() function. ** -** If all of the above are true, then WHERE_ORDERBY_MIN or WHERE_ORDERBY_MAX -** is returned as appropriate. Also, *ppMinMax is set to point to the -** list of arguments passed to the aggregate before returning. +** If the query is not a candidate for the min/max optimization, return +** WHERE_ORDERBY_NORMAL (which must be zero). ** -** Or, if the conditions above are not met, *ppMinMax is set to 0 and -** WHERE_ORDERBY_NORMAL is returned. +** This routine must be called after aggregate functions have been +** located but before their arguments have been subjected to aggregate +** analysis. */ -static u8 minMaxQuery(AggInfo *pAggInfo, ExprList **ppMinMax){ - int eRet = WHERE_ORDERBY_NORMAL; /* Return value */ +static u8 minMaxQuery(sqlite3 *db, Expr *pFunc, ExprList **ppMinMax){ + int eRet = WHERE_ORDERBY_NORMAL; /* Return value */ + ExprList *pEList = pFunc->x.pList; /* Arguments to agg function */ + const char *zFunc; /* Name of aggregate function pFunc */ + ExprList *pOrderBy; + u8 sortOrder; - *ppMinMax = 0; - if( pAggInfo->nFunc==1 ){ - Expr *pExpr = pAggInfo->aFunc[0].pExpr; /* Aggregate function */ - ExprList *pEList = pExpr->x.pList; /* Arguments to agg function */ - - assert( pExpr->op==TK_AGG_FUNCTION ); - if( pEList && pEList->nExpr==1 && pEList->a[0].pExpr->op==TK_AGG_COLUMN ){ - const char *zFunc = pExpr->u.zToken; - if( sqlite3StrICmp(zFunc, "min")==0 ){ - eRet = WHERE_ORDERBY_MIN; - *ppMinMax = pEList; - }else if( sqlite3StrICmp(zFunc, "max")==0 ){ - eRet = WHERE_ORDERBY_MAX; - *ppMinMax = pEList; - } - } + assert( *ppMinMax==0 ); + assert( pFunc->op==TK_AGG_FUNCTION ); + if( pEList==0 || pEList->nExpr!=1 ) return eRet; + zFunc = pFunc->u.zToken; + if( sqlite3StrICmp(zFunc, "min")==0 ){ + eRet = WHERE_ORDERBY_MIN; + sortOrder = SQLITE_SO_ASC; + }else if( sqlite3StrICmp(zFunc, "max")==0 ){ + eRet = WHERE_ORDERBY_MAX; + sortOrder = SQLITE_SO_DESC; + }else{ + return eRet; } - - assert( *ppMinMax==0 || (*ppMinMax)->nExpr==1 ); + *ppMinMax = pOrderBy = sqlite3ExprListDup(db, pEList, 0); + assert( pOrderBy!=0 || db->mallocFailed ); + if( pOrderBy ) pOrderBy->a[0].sortOrder = sortOrder; return eRet; } @@ -121772,7 +124381,6 @@ static int convertCompoundSelectToSubquery(Walker *pWalker, Select *p){ assert( pNew->pPrior!=0 ); pNew->pPrior->pNext = pNew; pNew->pLimit = 0; - pNew->pOffset = 0; return WRC_Continue; } @@ -122028,19 +124636,19 @@ static int selectExpander(Walker *pWalker, Select *p){ sqlite3 *db = pParse->db; Expr *pE, *pRight, *pExpr; u16 selFlags = p->selFlags; + u32 elistFlags = 0; p->selFlags |= SF_Expanded; if( db->mallocFailed ){ return WRC_Abort; } - if( NEVER(p->pSrc==0) || (selFlags & SF_Expanded)!=0 ){ + assert( p->pSrc!=0 ); + if( (selFlags & SF_Expanded)!=0 ){ return WRC_Prune; } pTabList = p->pSrc; pEList = p->pEList; - if( OK_IF_ALWAYS_TRUE(p->pWith) ){ - sqlite3WithPush(pParse, p->pWith, 0); - } + sqlite3WithPush(pParse, p->pWith, 0); /* Make sure cursor numbers have been assigned to all entries in ** the FROM clause of the SELECT statement. @@ -122140,6 +124748,7 @@ static int selectExpander(Walker *pWalker, Select *p){ assert( pE->op!=TK_DOT || pE->pRight!=0 ); assert( pE->op!=TK_DOT || (pE->pLeft!=0 && pE->pLeft->op==TK_ID) ); if( pE->op==TK_DOT && pE->pRight->op==TK_ASTERISK ) break; + elistFlags |= pE->flags; } if( knExpr ){ /* @@ -122155,6 +124764,7 @@ static int selectExpander(Walker *pWalker, Select *p){ for(k=0; knExpr; k++){ pE = a[k].pExpr; + elistFlags |= pE->flags; pRight = pE->pRight; assert( pE->op!=TK_DOT || pRight!=0 ); if( pE->op!=TK_ASTERISK @@ -122284,9 +124894,14 @@ static int selectExpander(Walker *pWalker, Select *p){ sqlite3ExprListDelete(db, pEList); p->pEList = pNew; } - if( p->pEList && p->pEList->nExpr>db->aLimit[SQLITE_LIMIT_COLUMN] ){ - sqlite3ErrorMsg(pParse, "too many columns in result set"); - return WRC_Abort; + if( p->pEList ){ + if( p->pEList->nExpr>db->aLimit[SQLITE_LIMIT_COLUMN] ){ + sqlite3ErrorMsg(pParse, "too many columns in result set"); + return WRC_Abort; + } + if( (elistFlags & (EP_HasFunc|EP_Subquery))!=0 ){ + p->selFlags |= SF_ComplexResult; + } } return WRC_Continue; } @@ -122608,14 +125223,6 @@ static void explainSimpleCount( # define explainSimpleCount(a,b,c) #endif -/* -** Context object for havingToWhereExprCb(). -*/ -struct HavingToWhereCtx { - Expr **ppWhere; - ExprList *pGroupBy; -}; - /* ** sqlite3WalkExpr() callback used by havingToWhere(). ** @@ -122629,15 +125236,16 @@ struct HavingToWhereCtx { */ static int havingToWhereExprCb(Walker *pWalker, Expr *pExpr){ if( pExpr->op!=TK_AND ){ - struct HavingToWhereCtx *p = pWalker->u.pHavingCtx; - if( sqlite3ExprIsConstantOrGroupBy(pWalker->pParse, pExpr, p->pGroupBy) ){ + Select *pS = pWalker->u.pSelect; + if( sqlite3ExprIsConstantOrGroupBy(pWalker->pParse, pExpr, pS->pGroupBy) ){ sqlite3 *db = pWalker->pParse->db; Expr *pNew = sqlite3ExprAlloc(db, TK_INTEGER, &sqlite3IntTokens[1], 0); if( pNew ){ - Expr *pWhere = *(p->ppWhere); + Expr *pWhere = pS->pWhere; SWAP(Expr, *pNew, *pExpr); pNew = sqlite3ExprAnd(db, pWhere, pNew); - *(p->ppWhere) = pNew; + pS->pWhere = pNew; + pWalker->eCode = 1; } } return WRC_Prune; @@ -122660,23 +125268,19 @@ static int havingToWhereExprCb(Walker *pWalker, Expr *pExpr){ ** entirely of constants and expressions that are also GROUP BY terms that ** use the "BINARY" collation sequence. */ -static void havingToWhere( - Parse *pParse, - ExprList *pGroupBy, - Expr *pHaving, - Expr **ppWhere -){ - struct HavingToWhereCtx sCtx; +static void havingToWhere(Parse *pParse, Select *p){ Walker sWalker; - - sCtx.ppWhere = ppWhere; - sCtx.pGroupBy = pGroupBy; - memset(&sWalker, 0, sizeof(sWalker)); sWalker.pParse = pParse; sWalker.xExprCallback = havingToWhereExprCb; - sWalker.u.pHavingCtx = &sCtx; - sqlite3WalkExpr(&sWalker, pHaving); + sWalker.u.pSelect = p; + sqlite3WalkExpr(&sWalker, p->pHaving); +#if SELECTTRACE_ENABLED + if( sWalker.eCode && (sqlite3SelectTrace & 0x100)!=0 ){ + SELECTTRACE(0x100,pParse,p,("Move HAVING terms into WHERE:\n")); + sqlite3TreeViewSelect(0, p, 0); + } +#endif } /* @@ -122822,6 +125426,8 @@ SQLITE_PRIVATE int sqlite3Select( AggInfo sAggInfo; /* Information used by aggregate queries */ int iEnd; /* Address of the end of the query */ sqlite3 *db; /* The database connection */ + ExprList *pMinMaxOrderBy = 0; /* Added ORDER BY for min/max queries */ + u8 minMaxFlag; /* Flag for min/max queries */ #ifndef SQLITE_OMIT_EXPLAIN int iRestoreSelectId = pParse->iSelectId; @@ -122835,7 +125441,6 @@ SQLITE_PRIVATE int sqlite3Select( if( sqlite3AuthCheck(pParse, SQLITE_SELECT, 0, 0, 0) ) return 1; memset(&sAggInfo, 0, sizeof(sAggInfo)); #if SELECTTRACE_ENABLED - pParse->nSelectIndent++; SELECTTRACE(1,pParse,p, ("begin processing:\n")); if( sqlite3SelectTrace & 0x100 ){ sqlite3TreeViewSelect(0, p, 0); @@ -122881,13 +125486,29 @@ SQLITE_PRIVATE int sqlite3Select( generateColumnNames(pParse, p); } - /* Try to flatten subqueries in the FROM clause up into the main query + /* Try to various optimizations (flattening subqueries, and strength + ** reduction of join operators) in the FROM clause up into the main query */ #if !defined(SQLITE_OMIT_SUBQUERY) || !defined(SQLITE_OMIT_VIEW) for(i=0; !p->pPrior && inSrc; i++){ struct SrcList_item *pItem = &pTabList->a[i]; Select *pSub = pItem->pSelect; Table *pTab = pItem->pTab; + + /* Convert LEFT JOIN into JOIN if there are terms of the right table + ** of the LEFT JOIN used in the WHERE clause. + */ + if( (pItem->fg.jointype & JT_LEFT)!=0 + && sqlite3ExprImpliesNonNullRow(p->pWhere, pItem->iCursor) + && OptimizationEnabled(db, SQLITE_SimplifyJoin) + ){ + SELECTTRACE(0x100,pParse,p, + ("LEFT-JOIN simplifies to JOIN on term %d\n",i)); + pItem->fg.jointype &= ~(JT_LEFT|JT_OUTER); + unsetJoinExpr(p->pWhere, pItem->iCursor); + } + + /* No futher action if this term of the FROM clause is no a subquery */ if( pSub==0 ) continue; /* Catch mismatch in the declared columns of a view and the number of @@ -122908,7 +125529,9 @@ SQLITE_PRIVATE int sqlite3Select( if( (pSub->selFlags & SF_Aggregate)!=0 ) continue; assert( pSub->pGroupBy==0 ); - /* If the subquery contains an ORDER BY clause and if + /* If the outer query contains a "complex" result set (that is, + ** if the result set of the outer query uses functions or subqueries) + ** and if the subquery contains an ORDER BY clause and if ** it will be implemented as a co-routine, then do not flatten. This ** restriction allows SQL constructs like this: ** @@ -122917,9 +125540,16 @@ SQLITE_PRIVATE int sqlite3Select( ** ** The expensive_function() is only computed on the 10 rows that ** are output, rather than every row of the table. + ** + ** The requirement that the outer query have a complex result set + ** means that flattening does occur on simpler SQL constraints without + ** the expensive_function() like: + ** + ** SELECT x FROM (SELECT x FROM tab ORDER BY y LIMIT 10); */ if( pSub->pOrderBy!=0 && i==0 + && (p->selFlags & SF_ComplexResult)!=0 && (pTabList->nSrc==1 || (pTabList->a[1].fg.jointype&(JT_LEFT|JT_CROSS))!=0) ){ @@ -122947,7 +125577,6 @@ SQLITE_PRIVATE int sqlite3Select( explainSetInteger(pParse->iSelectId, iRestoreSelectId); #if SELECTTRACE_ENABLED SELECTTRACE(1,pParse,p,("end compound-select processing\n")); - pParse->nSelectIndent--; #endif return rc; } @@ -123020,8 +125649,9 @@ SQLITE_PRIVATE int sqlite3Select( /* Make copies of constant WHERE-clause terms in the outer query down ** inside the subquery. This can help the subquery to run more efficiently. */ - if( (pItem->fg.jointype & JT_OUTER)==0 - && pushDownWhereTerms(pParse, pSub, p->pWhere, pItem->iCursor) + if( OptimizationEnabled(db, SQLITE_PushDown) + && pushDownWhereTerms(pParse, pSub, p->pWhere, pItem->iCursor, + (pItem->fg.jointype & JT_OUTER)!=0) ){ #if SELECTTRACE_ENABLED if( sqlite3SelectTrace & 0x100 ){ @@ -123029,6 +125659,8 @@ SQLITE_PRIVATE int sqlite3Select( sqlite3TreeViewSelect(0, p, 0); } #endif + }else{ + SELECTTRACE(0x100,pParse,p,("Push-down not possible\n")); } zSavedAuthContext = pParse->zAuthContext; @@ -123231,6 +125863,7 @@ SQLITE_PRIVATE int sqlite3Select( wctrlFlags |= p->selFlags & SF_FixedLimit; /* Begin the database scan. */ + SELECTTRACE(1,pParse,p,("WhereBegin\n")); pWInfo = sqlite3WhereBegin(pParse, pTabList, pWhere, sSort.pOrderBy, p->pEList, wctrlFlags, p->nSelectRow); if( pWInfo==0 ) goto select_end; @@ -123332,12 +125965,19 @@ SQLITE_PRIVATE int sqlite3Select( if( pHaving ){ if( pGroupBy ){ assert( pWhere==p->pWhere ); - havingToWhere(pParse, pGroupBy, pHaving, &p->pWhere); + assert( pHaving==p->pHaving ); + assert( pGroupBy==p->pGroupBy ); + havingToWhere(pParse, p); pWhere = p->pWhere; } sqlite3ExprAnalyzeAggregates(&sNC, pHaving); } sAggInfo.nAccumulator = sAggInfo.nColumn; + if( p->pGroupBy==0 && p->pHaving==0 && sAggInfo.nFunc==1 ){ + minMaxFlag = minMaxQuery(db, sAggInfo.aFunc[0].pExpr, &pMinMaxOrderBy); + }else{ + minMaxFlag = WHERE_ORDERBY_NORMAL; + } for(i=0; inMem; if( db->mallocFailed ) goto select_end; +#if SELECTTRACE_ENABLED + if( sqlite3SelectTrace & 0x400 ){ + int ii; + SELECTTRACE(0x400,pParse,p,("After aggregate analysis:\n")); + sqlite3TreeViewSelect(0, p, 0); + for(ii=0; iipGroupBy==0 ); - assert( flag==0 ); - if( p->pHaving==0 ){ - flag = minMaxQuery(&sAggInfo, &pMinMax); - } - assert( flag==0 || (pMinMax!=0 && pMinMax->nExpr==1) ); - - if( flag ){ - pMinMax = sqlite3ExprListDup(db, pMinMax, 0); - pDel = pMinMax; - assert( db->mallocFailed || pMinMax!=0 ); - if( !db->mallocFailed ){ - pMinMax->a[0].sortOrder = flag!=WHERE_ORDERBY_MIN ?1:0; - pMinMax->a[0].pExpr->op = TK_COLUMN; - } - } - /* This case runs if the aggregate has no GROUP BY clause. The ** processing is much simpler since there is only a single row ** of output. */ + assert( p->pGroupBy==0 ); resetAccumulator(pParse, &sAggInfo); - pWInfo = sqlite3WhereBegin(pParse, pTabList, pWhere, pMinMax, 0,flag,0); + + /* If this query is a candidate for the min/max optimization, then + ** minMaxFlag will have been previously set to either + ** WHERE_ORDERBY_MIN or WHERE_ORDERBY_MAX and pMinMaxOrderBy will + ** be an appropriate ORDER BY expression for the optimization. + */ + assert( minMaxFlag==WHERE_ORDERBY_NORMAL || pMinMaxOrderBy!=0 ); + assert( pMinMaxOrderBy==0 || pMinMaxOrderBy->nExpr==1 ); + + SELECTTRACE(1,pParse,p,("WhereBegin\n")); + pWInfo = sqlite3WhereBegin(pParse, pTabList, pWhere, pMinMaxOrderBy, + 0, minMaxFlag, 0); if( pWInfo==0 ){ - sqlite3ExprListDelete(db, pDel); goto select_end; } updateAccumulator(pParse, &sAggInfo); - assert( pMinMax==0 || pMinMax->nExpr==1 ); if( sqlite3WhereIsOrdered(pWInfo)>0 ){ sqlite3VdbeGoto(v, sqlite3WhereBreakLabel(pWInfo)); VdbeComment((v, "%s() by index", - (flag==WHERE_ORDERBY_MIN?"min":"max"))); + (minMaxFlag==WHERE_ORDERBY_MIN?"min":"max"))); } sqlite3WhereEnd(pWInfo); finalizeAggFunctions(pParse, &sAggInfo); @@ -123707,7 +126330,6 @@ SQLITE_PRIVATE int sqlite3Select( sqlite3ExprIfFalse(pParse, pHaving, addrEnd, SQLITE_JUMPIFNULL); selectInnerLoop(pParse, p, -1, 0, 0, pDest, addrEnd, addrEnd); - sqlite3ExprListDelete(db, pDel); } sqlite3VdbeResolveLabel(v, addrEnd); @@ -123739,12 +126361,11 @@ SQLITE_PRIVATE int sqlite3Select( */ select_end: explainSetInteger(pParse->iSelectId, iRestoreSelectId); - + sqlite3ExprListDelete(db, pMinMaxOrderBy); sqlite3DbFree(db, sAggInfo.aCol); sqlite3DbFree(db, sAggInfo.aFunc); #if SELECTTRACE_ENABLED SELECTTRACE(1,pParse,p,("end processing\n")); - pParse->nSelectIndent--; #endif return rc; } @@ -123979,6 +126600,7 @@ SQLITE_PRIVATE void sqlite3DeleteTriggerStep(sqlite3 *db, TriggerStep *pTriggerS sqlite3ExprListDelete(db, pTmp->pExprList); sqlite3SelectDelete(db, pTmp->pSelect); sqlite3IdListDelete(db, pTmp->pIdList); + sqlite3DbFree(db, pTmp->zSpan); sqlite3DbFree(db, pTmp); } @@ -124293,6 +126915,17 @@ triggerfinish_cleanup: sqlite3DeleteTriggerStep(db, pStepList); } +/* +** Duplicate a range of text from an SQL statement, then convert all +** whitespace characters into ordinary space characters. +*/ +static char *triggerSpanDup(sqlite3 *db, const char *zStart, const char *zEnd){ + char *z = sqlite3DbSpanDup(db, zStart, zEnd); + int i; + if( z ) for(i=0; z[i]; i++) if( sqlite3Isspace(z[i]) ) z[i] = ' '; + return z; +} + /* ** Turn a SELECT statement (that the pSelect parameter points to) into ** a trigger step. Return a pointer to a TriggerStep structure. @@ -124300,7 +126933,12 @@ triggerfinish_cleanup: ** The parser calls this routine when it finds a SELECT statement in ** body of a TRIGGER. */ -SQLITE_PRIVATE TriggerStep *sqlite3TriggerSelectStep(sqlite3 *db, Select *pSelect){ +SQLITE_PRIVATE TriggerStep *sqlite3TriggerSelectStep( + sqlite3 *db, /* Database connection */ + Select *pSelect, /* The SELECT statement */ + const char *zStart, /* Start of SQL text */ + const char *zEnd /* End of SQL text */ +){ TriggerStep *pTriggerStep = sqlite3DbMallocZero(db, sizeof(TriggerStep)); if( pTriggerStep==0 ) { sqlite3SelectDelete(db, pSelect); @@ -124309,6 +126947,7 @@ SQLITE_PRIVATE TriggerStep *sqlite3TriggerSelectStep(sqlite3 *db, Select *pSelec pTriggerStep->op = TK_SELECT; pTriggerStep->pSelect = pSelect; pTriggerStep->orconf = OE_Default; + pTriggerStep->zSpan = triggerSpanDup(db, zStart, zEnd); return pTriggerStep; } @@ -124321,7 +126960,9 @@ SQLITE_PRIVATE TriggerStep *sqlite3TriggerSelectStep(sqlite3 *db, Select *pSelec static TriggerStep *triggerStepAllocate( sqlite3 *db, /* Database connection */ u8 op, /* Trigger opcode */ - Token *pName /* The target name */ + Token *pName, /* The target name */ + const char *zStart, /* Start of SQL text */ + const char *zEnd /* End of SQL text */ ){ TriggerStep *pTriggerStep; @@ -124332,6 +126973,7 @@ static TriggerStep *triggerStepAllocate( sqlite3Dequote(z); pTriggerStep->zTarget = z; pTriggerStep->op = op; + pTriggerStep->zSpan = triggerSpanDup(db, zStart, zEnd); } return pTriggerStep; } @@ -124348,13 +126990,15 @@ SQLITE_PRIVATE TriggerStep *sqlite3TriggerInsertStep( Token *pTableName, /* Name of the table into which we insert */ IdList *pColumn, /* List of columns in pTableName to insert into */ Select *pSelect, /* A SELECT statement that supplies values */ - u8 orconf /* The conflict algorithm (OE_Abort, OE_Replace, etc.) */ + u8 orconf, /* The conflict algorithm (OE_Abort, OE_Replace, etc.) */ + const char *zStart, /* Start of SQL text */ + const char *zEnd /* End of SQL text */ ){ TriggerStep *pTriggerStep; assert(pSelect != 0 || db->mallocFailed); - pTriggerStep = triggerStepAllocate(db, TK_INSERT, pTableName); + pTriggerStep = triggerStepAllocate(db, TK_INSERT, pTableName, zStart, zEnd); if( pTriggerStep ){ pTriggerStep->pSelect = sqlite3SelectDup(db, pSelect, EXPRDUP_REDUCE); pTriggerStep->pIdList = pColumn; @@ -124377,11 +127021,13 @@ SQLITE_PRIVATE TriggerStep *sqlite3TriggerUpdateStep( Token *pTableName, /* Name of the table to be updated */ ExprList *pEList, /* The SET clause: list of column and new values */ Expr *pWhere, /* The WHERE clause */ - u8 orconf /* The conflict algorithm. (OE_Abort, OE_Ignore, etc) */ + u8 orconf, /* The conflict algorithm. (OE_Abort, OE_Ignore, etc) */ + const char *zStart, /* Start of SQL text */ + const char *zEnd /* End of SQL text */ ){ TriggerStep *pTriggerStep; - pTriggerStep = triggerStepAllocate(db, TK_UPDATE, pTableName); + pTriggerStep = triggerStepAllocate(db, TK_UPDATE, pTableName, zStart, zEnd); if( pTriggerStep ){ pTriggerStep->pExprList = sqlite3ExprListDup(db, pEList, EXPRDUP_REDUCE); pTriggerStep->pWhere = sqlite3ExprDup(db, pWhere, EXPRDUP_REDUCE); @@ -124400,11 +127046,13 @@ SQLITE_PRIVATE TriggerStep *sqlite3TriggerUpdateStep( SQLITE_PRIVATE TriggerStep *sqlite3TriggerDeleteStep( sqlite3 *db, /* Database connection */ Token *pTableName, /* The table from which rows are deleted */ - Expr *pWhere /* The WHERE clause */ + Expr *pWhere, /* The WHERE clause */ + const char *zStart, /* Start of SQL text */ + const char *zEnd /* End of SQL text */ ){ TriggerStep *pTriggerStep; - pTriggerStep = triggerStepAllocate(db, TK_DELETE, pTableName); + pTriggerStep = triggerStepAllocate(db, TK_DELETE, pTableName, zStart, zEnd); if( pTriggerStep ){ pTriggerStep->pWhere = sqlite3ExprDup(db, pWhere, EXPRDUP_REDUCE); pTriggerStep->orconf = OE_Default; @@ -124659,13 +127307,21 @@ static int codeTriggerProgram( pParse->eOrconf = (orconf==OE_Default)?pStep->orconf:(u8)orconf; assert( pParse->okConstFactor==0 ); +#ifndef SQLITE_OMIT_TRACE + if( pStep->zSpan ){ + sqlite3VdbeAddOp4(v, OP_Trace, 0x7fffffff, 1, 0, + sqlite3MPrintf(db, "-- %s", pStep->zSpan), + P4_DYNAMIC); + } +#endif + switch( pStep->op ){ case TK_UPDATE: { sqlite3Update(pParse, targetSrcList(pParse, pStep), sqlite3ExprListDup(db, pStep->pExprList, 0), sqlite3ExprDup(db, pStep->pWhere, 0), - pParse->eOrconf + pParse->eOrconf, 0, 0 ); break; } @@ -124681,7 +127337,7 @@ static int codeTriggerProgram( case TK_DELETE: { sqlite3DeleteFrom(pParse, targetSrcList(pParse, pStep), - sqlite3ExprDup(db, pStep->pWhere, 0) + sqlite3ExprDup(db, pStep->pWhere, 0), 0, 0 ); break; } @@ -124799,9 +127455,11 @@ static TriggerPrg *codeRowTrigger( pTab->zName )); #ifndef SQLITE_OMIT_TRACE - sqlite3VdbeChangeP4(v, -1, - sqlite3MPrintf(db, "-- TRIGGER %s", pTrigger->zName), P4_DYNAMIC - ); + if( pTrigger->zName ){ + sqlite3VdbeChangeP4(v, -1, + sqlite3MPrintf(db, "-- TRIGGER %s", pTrigger->zName), P4_DYNAMIC + ); + } #endif /* If one was specified, code the WHEN clause. If it evaluates to false @@ -124829,7 +127487,7 @@ static TriggerPrg *codeRowTrigger( VdbeComment((v, "End: %s.%s", pTrigger->zName, onErrorText(orconf))); transferParseError(pParse, pSubParse); - if( db->mallocFailed==0 ){ + if( db->mallocFailed==0 && pParse->nErr==0 ){ pProgram->aOp = sqlite3VdbeTakeOpArray(v, &pProgram->nOp, &pTop->nMaxArg); } pProgram->nMem = pSubParse->nMem; @@ -125148,7 +127806,9 @@ SQLITE_PRIVATE void sqlite3Update( SrcList *pTabList, /* The table in which we should change things */ ExprList *pChanges, /* Things to be changed */ Expr *pWhere, /* The WHERE clause. May be null */ - int onError /* How to handle constraint errors */ + int onError, /* How to handle constraint errors */ + ExprList *pOrderBy, /* ORDER BY clause. May be null */ + Expr *pLimit /* LIMIT clause. May be null */ ){ int i, j; /* Loop counters */ Table *pTab; /* The table to be updated */ @@ -125233,6 +127893,16 @@ SQLITE_PRIVATE void sqlite3Update( # define isView 0 #endif +#ifdef SQLITE_ENABLE_UPDATE_DELETE_LIMIT + if( !isView ){ + pWhere = sqlite3LimitWhere( + pParse, pTabList, pWhere, pOrderBy, pLimit, "UPDATE" + ); + pOrderBy = 0; + pLimit = 0; + } +#endif + if( sqlite3ViewGetColumnNames(pParse, pTab) ){ goto update_cleanup; } @@ -125401,7 +128071,11 @@ SQLITE_PRIVATE void sqlite3Update( */ #if !defined(SQLITE_OMIT_VIEW) && !defined(SQLITE_OMIT_TRIGGER) if( isView ){ - sqlite3MaterializeView(pParse, pTab, pWhere, iDataCur); + sqlite3MaterializeView(pParse, pTab, + pWhere, pOrderBy, pLimit, iDataCur + ); + pOrderBy = 0; + pLimit = 0; } #endif @@ -125437,7 +128111,7 @@ SQLITE_PRIVATE void sqlite3Update( regKey = ++pParse->nMem; iEph = pParse->nTab++; - sqlite3VdbeAddOp2(v, OP_Null, 0, iPk); + sqlite3VdbeAddOp3(v, OP_Null, 0, iPk, iPk+nPk-1); addrOpen = sqlite3VdbeAddOp2(v, OP_OpenEphemeral, iEph, nPk); sqlite3VdbeSetP4KeyInfo(pParse, pPk); } @@ -125785,6 +128459,10 @@ update_cleanup: sqlite3SrcListDelete(db, pTabList); sqlite3ExprListDelete(db, pChanges); sqlite3ExprDelete(db, pWhere); +#if defined(SQLITE_ENABLE_UPDATE_DELETE_LIMIT) + sqlite3ExprListDelete(db, pOrderBy); + sqlite3ExprDelete(db, pLimit); +#endif return; } /* Make sure "isView" and other macros defined above are undefined. Otherwise @@ -125844,7 +128522,7 @@ static void updateVirtualTable( int bOnePass; /* True to use onepass strategy */ int addr; /* Address of OP_OpenEphemeral */ - /* Allocate nArg registers to martial the arguments to VUpdate. Then + /* Allocate nArg registers in which to gather the arguments for VUpdate. Then ** create and open the ephemeral table in which the records created from ** these arguments will be temporarily stored. */ assert( v ); @@ -125865,6 +128543,7 @@ static void updateVirtualTable( sqlite3ExprCode(pParse, pChanges->a[aXRef[i]].pExpr, regArg+2+i); }else{ sqlite3VdbeAddOp3(v, OP_VColumn, iCsr, i, regArg+2+i); + sqlite3VdbeChangeP5(v, 1); /* Enable sqlite3_vtab_nochange() */ } } if( HasRowid(pTab) ){ @@ -125899,6 +128578,11 @@ static void updateVirtualTable( /* Create a record from the argument register contents and insert it into ** the ephemeral table. */ sqlite3VdbeAddOp3(v, OP_MakeRecord, regArg, nArg, regRec); +#ifdef SQLITE_DEBUG + /* Signal an assert() within OP_MakeRecord that it is allowed to + ** accept no-change records with serial_type 10 */ + sqlite3VdbeChangeP5(v, OPFLAG_NOCHNG_MAGIC); +#endif sqlite3VdbeAddOp2(v, OP_NewRowid, ephemTab, regRowid); sqlite3VdbeAddOp3(v, OP_Insert, ephemTab, regRec, regRowid); } @@ -125977,8 +128661,8 @@ static int execSql(sqlite3 *db, char **pzErrMsg, const char *zSql){ while( SQLITE_ROW==(rc = sqlite3_step(pStmt)) ){ const char *zSubSql = (const char*)sqlite3_column_text(pStmt,0); assert( sqlite3_strnicmp(zSql,"SELECT",6)==0 ); - if( zSubSql ){ - assert( zSubSql[0]!='S' ); + assert( sqlite3_strnicmp(zSubSql,"SELECT",6)!=0 || CORRUPT_DB ); + if( zSubSql && zSubSql[0]!='S' ){ rc = execSql(db, pzErrMsg, zSubSql); if( rc!=SQLITE_OK ) break; } @@ -127599,7 +130283,7 @@ SQLITE_API int sqlite3_vtab_config(sqlite3 *db, int op, ...){ ** Trace output macros */ #if defined(SQLITE_TEST) || defined(SQLITE_DEBUG) -/***/ int sqlite3WhereTrace; +/***/ extern int sqlite3WhereTrace; #endif #if defined(SQLITE_DEBUG) \ && (defined(SQLITE_TEST) || defined(SQLITE_ENABLE_WHERETRACE)) @@ -128249,7 +130933,7 @@ SQLITE_PRIVATE int sqlite3WhereExplainOneScan( ){ int ret = 0; #if !defined(SQLITE_DEBUG) && !defined(SQLITE_ENABLE_STMT_SCANSTATUS) - if( pParse->explain==2 ) + if( sqlite3ParseToplevel(pParse)->explain==2 ) #endif { struct SrcList_item *pItem = &pTabList->a[pLevel->iFrom]; @@ -128415,8 +131099,8 @@ SQLITE_PRIVATE void sqlite3WhereAddScanStatus( */ static void disableTerm(WhereLevel *pLevel, WhereTerm *pTerm){ int nLoop = 0; - while( ALWAYS(pTerm!=0) - && (pTerm->wtFlags & TERM_CODED)==0 + assert( pTerm!=0 ); + while( (pTerm->wtFlags & TERM_CODED)==0 && (pLevel->iLeftJoin==0 || ExprHasProperty(pTerm->pExpr, EP_FromJoin)) && (pLevel->notReady & pTerm->prereqAll)==0 ){ @@ -128427,6 +131111,7 @@ static void disableTerm(WhereLevel *pLevel, WhereTerm *pTerm){ } if( pTerm->iParent<0 ) break; pTerm = &pTerm->pWC->a[pTerm->iParent]; + assert( pTerm!=0 ); pTerm->nChild--; if( pTerm->nChild!=0 ) break; nLoop++; @@ -128497,6 +131182,102 @@ static void updateRangeAffinityStr( } } + +/* +** pX is an expression of the form: (vector) IN (SELECT ...) +** In other words, it is a vector IN operator with a SELECT clause on the +** LHS. But not all terms in the vector are indexable and the terms might +** not be in the correct order for indexing. +** +** This routine makes a copy of the input pX expression and then adjusts +** the vector on the LHS with corresponding changes to the SELECT so that +** the vector contains only index terms and those terms are in the correct +** order. The modified IN expression is returned. The caller is responsible +** for deleting the returned expression. +** +** Example: +** +** CREATE TABLE t1(a,b,c,d,e,f); +** CREATE INDEX t1x1 ON t1(e,c); +** SELECT * FROM t1 WHERE (a,b,c,d,e) IN (SELECT v,w,x,y,z FROM t2) +** \_______________________________________/ +** The pX expression +** +** Since only columns e and c can be used with the index, in that order, +** the modified IN expression that is returned will be: +** +** (e,c) IN (SELECT z,x FROM t2) +** +** The reduced pX is different from the original (obviously) and thus is +** only used for indexing, to improve performance. The original unaltered +** IN expression must also be run on each output row for correctness. +*/ +static Expr *removeUnindexableInClauseTerms( + Parse *pParse, /* The parsing context */ + int iEq, /* Look at loop terms starting here */ + WhereLoop *pLoop, /* The current loop */ + Expr *pX /* The IN expression to be reduced */ +){ + sqlite3 *db = pParse->db; + Expr *pNew = sqlite3ExprDup(db, pX, 0); + if( db->mallocFailed==0 ){ + ExprList *pOrigRhs = pNew->x.pSelect->pEList; /* Original unmodified RHS */ + ExprList *pOrigLhs = pNew->pLeft->x.pList; /* Original unmodified LHS */ + ExprList *pRhs = 0; /* New RHS after modifications */ + ExprList *pLhs = 0; /* New LHS after mods */ + int i; /* Loop counter */ + Select *pSelect; /* Pointer to the SELECT on the RHS */ + + for(i=iEq; inLTerm; i++){ + if( pLoop->aLTerm[i]->pExpr==pX ){ + int iField = pLoop->aLTerm[i]->iField - 1; + assert( pOrigRhs->a[iField].pExpr!=0 ); + pRhs = sqlite3ExprListAppend(pParse, pRhs, pOrigRhs->a[iField].pExpr); + pOrigRhs->a[iField].pExpr = 0; + assert( pOrigLhs->a[iField].pExpr!=0 ); + pLhs = sqlite3ExprListAppend(pParse, pLhs, pOrigLhs->a[iField].pExpr); + pOrigLhs->a[iField].pExpr = 0; + } + } + sqlite3ExprListDelete(db, pOrigRhs); + sqlite3ExprListDelete(db, pOrigLhs); + pNew->pLeft->x.pList = pLhs; + pNew->x.pSelect->pEList = pRhs; + if( pLhs && pLhs->nExpr==1 ){ + /* Take care here not to generate a TK_VECTOR containing only a + ** single value. Since the parser never creates such a vector, some + ** of the subroutines do not handle this case. */ + Expr *p = pLhs->a[0].pExpr; + pLhs->a[0].pExpr = 0; + sqlite3ExprDelete(db, pNew->pLeft); + pNew->pLeft = p; + } + pSelect = pNew->x.pSelect; + if( pSelect->pOrderBy ){ + /* If the SELECT statement has an ORDER BY clause, zero the + ** iOrderByCol variables. These are set to non-zero when an + ** ORDER BY term exactly matches one of the terms of the + ** result-set. Since the result-set of the SELECT statement may + ** have been modified or reordered, these variables are no longer + ** set correctly. Since setting them is just an optimization, + ** it's easiest just to zero them here. */ + ExprList *pOrderBy = pSelect->pOrderBy; + for(i=0; inExpr; i++){ + pOrderBy->a[i].u.x.iOrderByCol = 0; + } + } + +#if 0 + printf("For indexing, change the IN expr:\n"); + sqlite3TreeViewExpr(0, pX, 0); + printf("Into:\n"); + sqlite3TreeViewExpr(0, pNew, 0); +#endif + } + return pNew; +} + + /* ** Generate code for a single equality term of the WHERE clause. An equality ** term can be either X=expr or X IN (...). pTerm is the term to be @@ -128559,68 +131340,23 @@ static int codeEqualityTerm( } } for(i=iEq;inLTerm; i++){ - if( ALWAYS(pLoop->aLTerm[i]) && pLoop->aLTerm[i]->pExpr==pX ) nEq++; + assert( pLoop->aLTerm[i]!=0 ); + if( pLoop->aLTerm[i]->pExpr==pX ) nEq++; } if( (pX->flags & EP_xIsSelect)==0 || pX->x.pSelect->pEList->nExpr==1 ){ eType = sqlite3FindInIndex(pParse, pX, IN_INDEX_LOOP, 0, 0); }else{ - Select *pSelect = pX->x.pSelect; sqlite3 *db = pParse->db; - u16 savedDbOptFlags = db->dbOptFlags; - ExprList *pOrigRhs = pSelect->pEList; - ExprList *pOrigLhs = pX->pLeft->x.pList; - ExprList *pRhs = 0; /* New Select.pEList for RHS */ - ExprList *pLhs = 0; /* New pX->pLeft vector */ + pX = removeUnindexableInClauseTerms(pParse, iEq, pLoop, pX); - for(i=iEq;inLTerm; i++){ - if( pLoop->aLTerm[i]->pExpr==pX ){ - int iField = pLoop->aLTerm[i]->iField - 1; - Expr *pNewRhs = sqlite3ExprDup(db, pOrigRhs->a[iField].pExpr, 0); - Expr *pNewLhs = sqlite3ExprDup(db, pOrigLhs->a[iField].pExpr, 0); - - pRhs = sqlite3ExprListAppend(pParse, pRhs, pNewRhs); - pLhs = sqlite3ExprListAppend(pParse, pLhs, pNewLhs); - } - } if( !db->mallocFailed ){ - Expr *pLeft = pX->pLeft; - - if( pSelect->pOrderBy ){ - /* If the SELECT statement has an ORDER BY clause, zero the - ** iOrderByCol variables. These are set to non-zero when an - ** ORDER BY term exactly matches one of the terms of the - ** result-set. Since the result-set of the SELECT statement may - ** have been modified or reordered, these variables are no longer - ** set correctly. Since setting them is just an optimization, - ** it's easiest just to zero them here. */ - ExprList *pOrderBy = pSelect->pOrderBy; - for(i=0; inExpr; i++){ - pOrderBy->a[i].u.x.iOrderByCol = 0; - } - } - - /* Take care here not to generate a TK_VECTOR containing only a - ** single value. Since the parser never creates such a vector, some - ** of the subroutines do not handle this case. */ - if( pLhs->nExpr==1 ){ - pX->pLeft = pLhs->a[0].pExpr; - }else{ - pLeft->x.pList = pLhs; - aiMap = (int*)sqlite3DbMallocZero(pParse->db, sizeof(int) * nEq); - testcase( aiMap==0 ); - } - pSelect->pEList = pRhs; - db->dbOptFlags |= SQLITE_QueryFlattener; + aiMap = (int*)sqlite3DbMallocZero(pParse->db, sizeof(int)*nEq); eType = sqlite3FindInIndex(pParse, pX, IN_INDEX_LOOP, 0, aiMap); - db->dbOptFlags = savedDbOptFlags; - testcase( aiMap!=0 && aiMap[0]!=0 ); - pSelect->pEList = pOrigRhs; - pLeft->x.pList = pOrigLhs; - pX->pLeft = pLeft; + pTerm->pExpr->iTable = pX->iTable; } - sqlite3ExprListDelete(pParse->db, pLhs); - sqlite3ExprListDelete(pParse->db, pRhs); + sqlite3ExprDelete(db, pX); + pX = pTerm->pExpr; } if( eType==IN_INDEX_INDEX_DESC ){ @@ -129464,7 +132200,15 @@ SQLITE_PRIVATE Bitmask sqlite3WhereCodeOneLoopStart( if( sqlite3ExprIsVector(pX->pRight) ){ r1 = rTemp = sqlite3GetTempReg(pParse); codeExprOrVector(pParse, pX->pRight, r1, 1); - op = aMoveOp[(pX->op - TK_GT) | 0x0001]; + testcase( pX->op==TK_GT ); + testcase( pX->op==TK_GE ); + testcase( pX->op==TK_LT ); + testcase( pX->op==TK_LE ); + op = aMoveOp[((pX->op - TK_GT - 1) & 0x3) | 0x1]; + assert( pX->op!=TK_GT || op==OP_SeekGE ); + assert( pX->op!=TK_GE || op==OP_SeekGE ); + assert( pX->op!=TK_LT || op==OP_SeekLE ); + assert( pX->op!=TK_LE || op==OP_SeekLE ); }else{ r1 = sqlite3ExprCodeTemp(pParse, pX->pRight, &rTemp); disableTerm(pLevel, pStart); @@ -129759,6 +132503,7 @@ SQLITE_PRIVATE Bitmask sqlite3WhereCodeOneLoopStart( } }else if( bStopAtNull ){ sqlite3VdbeAddOp2(v, OP_Null, 0, regBase+nEq); + sqlite3ExprCacheRemove(pParse, regBase+nEq, 1); endEq = 0; nConstraint++; } @@ -130187,7 +132932,7 @@ SQLITE_PRIVATE Bitmask sqlite3WhereCodeOneLoopStart( continue; } - if( pTerm->wtFlags & TERM_LIKECOND ){ + if( (pTerm->wtFlags & TERM_LIKECOND)!=0 ){ /* If the TERM_LIKECOND flag is set, that means that the range search ** is sufficient to guarantee that the LIKE operator is true, so we ** can skip the call to the like(A,B) function. But this only works @@ -130197,8 +132942,9 @@ SQLITE_PRIVATE Bitmask sqlite3WhereCodeOneLoopStart( continue; #else u32 x = pLevel->iLikeRepCntr; - assert( x>0 ); - skipLikeAddr = sqlite3VdbeAddOp1(v, (x&1)?OP_IfNot:OP_If, (int)(x>>1)); + if( x>0 ){ + skipLikeAddr = sqlite3VdbeAddOp1(v, (x&1)?OP_IfNot:OP_If,(int)(x>>1)); + } VdbeCoverage(v); #endif } @@ -130238,6 +132984,12 @@ SQLITE_PRIVATE Bitmask sqlite3WhereCodeOneLoopStart( WO_EQ|WO_IN|WO_IS, 0); if( pAlt==0 ) continue; if( pAlt->wtFlags & (TERM_CODED) ) continue; + if( (pAlt->eOperator & WO_IN) + && (pAlt->pExpr->flags & EP_xIsSelect) + && (pAlt->pExpr->x.pSelect->pEList->nExpr>1) + ){ + continue; + } testcase( pAlt->eOperator & WO_EQ ); testcase( pAlt->eOperator & WO_IS ); testcase( pAlt->eOperator & WO_IN ); @@ -131152,6 +133904,9 @@ static Bitmask exprSelectUsage(WhereMaskSet *pMaskSet, Select *pS){ for(i=0; inSrc; i++){ mask |= exprSelectUsage(pMaskSet, pSrc->a[i].pSelect); mask |= sqlite3WhereExprUsage(pMaskSet, pSrc->a[i].pOn); + if( pSrc->a[i].fg.isTabFunc ){ + mask |= sqlite3WhereExprListUsage(pMaskSet, pSrc->a[i].u1.pFuncArg); + } } } pS = pS->pPrior; @@ -131259,7 +134014,7 @@ static void exprAnalyze( int op; /* Top-level operator. pExpr->op */ Parse *pParse = pWInfo->pParse; /* Parsing context */ sqlite3 *db = pParse->db; /* Database connection */ - unsigned char eOp2; /* op2 value for LIKE/REGEXP/GLOB */ + unsigned char eOp2 = 0; /* op2 value for LIKE/REGEXP/GLOB */ int nLeft; /* Number of elements on left side vector */ if( db->mallocFailed ){ @@ -131503,7 +134258,7 @@ static void exprAnalyze( ** to do anything with MATCH functions. */ if( pWC->op==TK_AND ){ - Expr *pRight, *pLeft; + Expr *pRight = 0, *pLeft = 0; int res = isAuxiliaryVtabOperator(pExpr, &eOp2, &pLeft, &pRight); while( res-- > 0 ){ int idxNew; @@ -131564,7 +134319,7 @@ static void exprAnalyze( exprAnalyze(pSrc, pWC, idxNew); } pTerm = &pWC->a[idxTerm]; - pTerm->wtFlags = TERM_CODED|TERM_VIRTUAL; /* Disable the original */ + pTerm->wtFlags |= TERM_CODED|TERM_VIRTUAL; /* Disable the original */ pTerm->eOperator = 0; } @@ -131827,6 +134582,21 @@ SQLITE_PRIVATE void sqlite3WhereTabFuncArgs( /* #include "sqliteInt.h" */ /* #include "whereInt.h" */ +/* +** Extra information appended to the end of sqlite3_index_info but not +** visible to the xBestIndex function, at least not directly. The +** sqlite3_vtab_collation() interface knows how to reach it, however. +** +** This object is not an API and can be changed from one release to the +** next. As long as allocateIndexInfo() and sqlite3_vtab_collation() +** agree on the structure, all will be well. +*/ +typedef struct HiddenIndexInfo HiddenIndexInfo; +struct HiddenIndexInfo { + WhereClause *pWC; /* The Where clause being analyzed */ + Parse *pParse; /* The parsing context */ +}; + /* Forward declaration of methods */ static int whereLoopResize(sqlite3*, WhereLoop*, int); @@ -132649,11 +135419,11 @@ end_auto_index_create: ** by passing the pointer returned by this function to sqlite3_free(). */ static sqlite3_index_info *allocateIndexInfo( - Parse *pParse, - WhereClause *pWC, + Parse *pParse, /* The parsing context */ + WhereClause *pWC, /* The WHERE clause being analyzed */ Bitmask mUnusable, /* Ignore terms with these prereqs */ - struct SrcList_item *pSrc, - ExprList *pOrderBy, + struct SrcList_item *pSrc, /* The FROM clause term that is the vtab */ + ExprList *pOrderBy, /* The ORDER BY clause */ u16 *pmNoOmit /* Mask of terms not to omit */ ){ int i, j; @@ -132661,6 +135431,7 @@ static sqlite3_index_info *allocateIndexInfo( struct sqlite3_index_constraint *pIdxCons; struct sqlite3_index_orderby *pIdxOrderBy; struct sqlite3_index_constraint_usage *pUsage; + struct HiddenIndexInfo *pHidden; WhereTerm *pTerm; int nOrderBy; sqlite3_index_info *pIdxInfo; @@ -132702,7 +135473,7 @@ static sqlite3_index_info *allocateIndexInfo( */ pIdxInfo = sqlite3DbMallocZero(pParse->db, sizeof(*pIdxInfo) + (sizeof(*pIdxCons) + sizeof(*pUsage))*nTerm - + sizeof(*pIdxOrderBy)*nOrderBy ); + + sizeof(*pIdxOrderBy)*nOrderBy + sizeof(*pHidden) ); if( pIdxInfo==0 ){ sqlite3ErrorMsg(pParse, "out of memory"); return 0; @@ -132713,7 +135484,8 @@ static sqlite3_index_info *allocateIndexInfo( ** changing them. We have to do some funky casting in order to ** initialize those fields. */ - pIdxCons = (struct sqlite3_index_constraint*)&pIdxInfo[1]; + pHidden = (struct HiddenIndexInfo*)&pIdxInfo[1]; + pIdxCons = (struct sqlite3_index_constraint*)&pHidden[1]; pIdxOrderBy = (struct sqlite3_index_orderby*)&pIdxCons[nTerm]; pUsage = (struct sqlite3_index_constraint_usage*)&pIdxOrderBy[nOrderBy]; *(int*)&pIdxInfo->nConstraint = nTerm; @@ -132723,6 +135495,8 @@ static sqlite3_index_info *allocateIndexInfo( *(struct sqlite3_index_constraint_usage**)&pIdxInfo->aConstraintUsage = pUsage; + pHidden->pWC = pWC; + pHidden->pParse = pParse; for(i=j=0, pTerm=pWC->a; inTerm; i++, pTerm++){ u16 op; if( pTerm->leftCursor != pSrc->iCursor ) continue; @@ -133671,22 +136445,21 @@ static void whereLoopDelete(sqlite3 *db, WhereLoop *p){ ** Free a WhereInfo structure */ static void whereInfoFree(sqlite3 *db, WhereInfo *pWInfo){ - if( ALWAYS(pWInfo) ){ - int i; - for(i=0; inLevel; i++){ - WhereLevel *pLevel = &pWInfo->a[i]; - if( pLevel->pWLoop && (pLevel->pWLoop->wsFlags & WHERE_IN_ABLE) ){ - sqlite3DbFree(db, pLevel->u.in.aInLoop); - } + int i; + assert( pWInfo!=0 ); + for(i=0; inLevel; i++){ + WhereLevel *pLevel = &pWInfo->a[i]; + if( pLevel->pWLoop && (pLevel->pWLoop->wsFlags & WHERE_IN_ABLE) ){ + sqlite3DbFree(db, pLevel->u.in.aInLoop); } - sqlite3WhereClauseClear(&pWInfo->sWC); - while( pWInfo->pLoops ){ - WhereLoop *p = pWInfo->pLoops; - pWInfo->pLoops = p->pNextLoop; - whereLoopDelete(db, p); - } - sqlite3DbFreeNN(db, pWInfo); } + sqlite3WhereClauseClear(&pWInfo->sWC); + while( pWInfo->pLoops ){ + WhereLoop *p = pWInfo->pLoops; + pWInfo->pLoops = p->pNextLoop; + whereLoopDelete(db, p); + } + sqlite3DbFreeNN(db, pWInfo); } /* @@ -134163,8 +136936,8 @@ static int whereLoopAddBtreeIndex( pNew = pBuilder->pNew; if( db->mallocFailed ) return SQLITE_NOMEM_BKPT; - WHERETRACE(0x800, ("BEGIN addBtreeIdx(%s), nEq=%d\n", - pProbe->zName, pNew->u.btree.nEq)); + WHERETRACE(0x800, ("BEGIN %s.addBtreeIdx(%s), nEq=%d\n", + pProbe->pTable->zName,pProbe->zName, pNew->u.btree.nEq)); assert( (pNew->wsFlags & WHERE_VIRTUALTABLE)==0 ); assert( (pNew->wsFlags & WHERE_TOP_LIMIT)==0 ); @@ -134269,12 +137042,14 @@ static int whereLoopAddBtreeIndex( pNew->wsFlags |= WHERE_COLUMN_EQ; assert( saved_nEq==pNew->u.btree.nEq ); if( iCol==XN_ROWID - || (iCol>0 && nInMul==0 && saved_nEq==pProbe->nKeyCol-1) + || (iCol>=0 && nInMul==0 && saved_nEq==pProbe->nKeyCol-1) ){ - if( iCol>=0 && pProbe->uniqNotNull==0 ){ - pNew->wsFlags |= WHERE_UNQ_WANTED; - }else{ + if( iCol==XN_ROWID || pProbe->uniqNotNull + || (pProbe->nKeyCol==1 && pProbe->onError && eOp==WO_EQ) + ){ pNew->wsFlags |= WHERE_ONEROW; + }else{ + pNew->wsFlags |= WHERE_UNQ_WANTED; } } }else if( eOp & WO_ISNULL ){ @@ -134448,8 +137223,8 @@ static int whereLoopAddBtreeIndex( pNew->wsFlags = saved_wsFlags; } - WHERETRACE(0x800, ("END addBtreeIdx(%s), nEq=%d, rc=%d\n", - pProbe->zName, saved_nEq, rc)); + WHERETRACE(0x800, ("END %s.addBtreeIdx(%s), nEq=%d, rc=%d\n", + pProbe->pTable->zName, pProbe->zName, saved_nEq, rc)); return rc; } @@ -134678,14 +137453,17 @@ static int whereLoopAddBtree( } #endif /* SQLITE_OMIT_AUTOMATIC_INDEX */ - /* Loop over all indices - */ - for(; rc==SQLITE_OK && pProbe; pProbe=pProbe->pNext, iSortIdx++){ + /* Loop over all indices. If there was an INDEXED BY clause, then only + ** consider index pProbe. */ + for(; rc==SQLITE_OK && pProbe; + pProbe=(pSrc->pIBIndex ? 0 : pProbe->pNext), iSortIdx++ + ){ if( pProbe->pPartIdxWhere!=0 && !whereUsablePartialIndex(pSrc->iCursor, pWC, pProbe->pPartIdxWhere) ){ testcase( pNew->iTab!=pSrc->iCursor ); /* See ticket [98d973b8f5] */ continue; /* Partial index inappropriate for this query */ } + if( pProbe->bNoQuery ) continue; rSize = pProbe->aiRowLogEst[0]; pNew->u.btree.nEq = 0; pNew->u.btree.nBtm = 0; @@ -134790,10 +137568,6 @@ static int whereLoopAddBtree( pBuilder->nRecValid = 0; pBuilder->pRec = 0; #endif - - /* If there was an INDEXED BY clause, then only that one index is - ** considered. */ - if( pSrc->pIBIndex ) break; } return rc; } @@ -134888,9 +137662,9 @@ static int whereLoopAddVirtualOne( || pNew->aLTerm[iTerm]!=0 || pIdxCons->usable==0 ){ - rc = SQLITE_ERROR; sqlite3ErrorMsg(pParse,"%s.xBestIndex malfunction",pSrc->pTab->zName); - return rc; + testcase( pIdxInfo->needToFreeIdxStr ); + return SQLITE_ERROR; } testcase( iTerm==nConstraint-1 ); testcase( j==0 ); @@ -134918,6 +137692,15 @@ static int whereLoopAddVirtualOne( pNew->u.vtab.omitMask &= ~mNoOmit; pNew->nLTerm = mxTerm+1; + for(i=0; i<=mxTerm; i++){ + if( pNew->aLTerm[i]==0 ){ + /* The non-zero argvIdx values must be contiguous. Raise an + ** error if they are not */ + sqlite3ErrorMsg(pParse,"%s.xBestIndex malfunction",pSrc->pTab->zName); + testcase( pIdxInfo->needToFreeIdxStr ); + return SQLITE_ERROR; + } + } assert( pNew->nLTerm<=pNew->nLSlot ); pNew->u.vtab.idxNum = pIdxInfo->idxNum; pNew->u.vtab.needFree = pIdxInfo->needToFreeIdxStr; @@ -134948,6 +137731,27 @@ static int whereLoopAddVirtualOne( return rc; } +/* +** If this function is invoked from within an xBestIndex() callback, it +** returns a pointer to a buffer containing the name of the collation +** sequence associated with element iCons of the sqlite3_index_info.aConstraint +** array. Or, if iCons is out of range or there is no active xBestIndex +** call, return NULL. +*/ +SQLITE_API const char *sqlite3_vtab_collation(sqlite3_index_info *pIdxInfo, int iCons){ + HiddenIndexInfo *pHidden = (HiddenIndexInfo*)&pIdxInfo[1]; + const char *zRet = 0; + if( iCons>=0 && iConsnConstraint ){ + CollSeq *pC = 0; + int iTerm = pIdxInfo->aConstraint[iCons].iTermOffset; + Expr *pX = pHidden->pWC->a[iTerm].pExpr; + if( pX->pLeft ){ + pC = sqlite3BinaryCompareCollSeq(pHidden->pParse, pX->pLeft, pX->pRight); + } + zRet = (pC ? pC->zName : "BINARY"); + } + return zRet; +} /* ** Add all WhereLoop objects for a table of the join identified by @@ -135012,6 +137816,7 @@ static int whereLoopAddVirtual( } /* First call xBestIndex() with all constraints usable. */ + WHERETRACE(0x800, ("BEGIN %s.addVirtual()\n", pSrc->pTab->zName)); WHERETRACE(0x40, (" VirtualOne: all usable\n")); rc = whereLoopAddVirtualOne(pBuilder, mPrereq, ALLBITS, 0, p, mNoOmit, &bIn); @@ -135087,6 +137892,7 @@ static int whereLoopAddVirtual( if( p->needToFreeIdxStr ) sqlite3_free(p->idxStr); sqlite3DbFreeNN(pParse->db, p); + WHERETRACE(0x800, ("END %s.addVirtual(), rc=%d\n", pSrc->pTab->zName, rc)); return rc; } #endif /* SQLITE_OMIT_VIRTUALTABLE */ @@ -136401,6 +139207,7 @@ SQLITE_PRIVATE WhereInfo *sqlite3WhereBegin( */ for(ii=0; iinTerm; ii++){ WhereTerm *pT = &sWLB.pWC->a[ii]; + if( pT->wtFlags & TERM_VIRTUAL ) continue; if( pT->prereqAll==0 && (nTabList==0 || exprIsDeterministic(pT->pExpr)) ){ sqlite3ExprIfFalse(pParse, pT->pExpr, pWInfo->iBreak, SQLITE_JUMPIFNULL); pT->wtFlags |= TERM_CODED; @@ -136488,35 +139295,80 @@ SQLITE_PRIVATE WhereInfo *sqlite3WhereBegin( } } #endif - /* Attempt to omit tables from the join that do not effect the result */ + + /* Attempt to omit tables from the join that do not affect the result. + ** For a table to not affect the result, the following must be true: + ** + ** 1) The query must not be an aggregate. + ** 2) The table must be the RHS of a LEFT JOIN. + ** 3) Either the query must be DISTINCT, or else the ON or USING clause + ** must contain a constraint that limits the scan of the table to + ** at most a single row. + ** 4) The table must not be referenced by any part of the query apart + ** from its own USING or ON clause. + ** + ** For example, given: + ** + ** CREATE TABLE t1(ipk INTEGER PRIMARY KEY, v1); + ** CREATE TABLE t2(ipk INTEGER PRIMARY KEY, v2); + ** CREATE TABLE t3(ipk INTEGER PRIMARY KEY, v3); + ** + ** then table t2 can be omitted from the following: + ** + ** SELECT v1, v3 FROM t1 + ** LEFT JOIN t2 USING (t1.ipk=t2.ipk) + ** LEFT JOIN t3 USING (t1.ipk=t3.ipk) + ** + ** or from: + ** + ** SELECT DISTINCT v1, v3 FROM t1 + ** LEFT JOIN t2 + ** LEFT JOIN t3 USING (t1.ipk=t3.ipk) + */ + notReady = ~(Bitmask)0; if( pWInfo->nLevel>=2 - && pResultSet!=0 + && pResultSet!=0 /* guarantees condition (1) above */ && OptimizationEnabled(db, SQLITE_OmitNoopJoin) ){ + int i; Bitmask tabUsed = sqlite3WhereExprListUsage(pMaskSet, pResultSet); if( sWLB.pOrderBy ){ tabUsed |= sqlite3WhereExprListUsage(pMaskSet, sWLB.pOrderBy); } - while( pWInfo->nLevel>=2 ){ + for(i=pWInfo->nLevel-1; i>=1; i--){ WhereTerm *pTerm, *pEnd; - pLoop = pWInfo->a[pWInfo->nLevel-1].pWLoop; - if( (pWInfo->pTabList->a[pLoop->iTab].fg.jointype & JT_LEFT)==0 ) break; + struct SrcList_item *pItem; + pLoop = pWInfo->a[i].pWLoop; + pItem = &pWInfo->pTabList->a[pLoop->iTab]; + if( (pItem->fg.jointype & JT_LEFT)==0 ) continue; if( (wctrlFlags & WHERE_WANT_DISTINCT)==0 && (pLoop->wsFlags & WHERE_ONEROW)==0 ){ - break; + continue; } - if( (tabUsed & pLoop->maskSelf)!=0 ) break; + if( (tabUsed & pLoop->maskSelf)!=0 ) continue; pEnd = sWLB.pWC->a + sWLB.pWC->nTerm; for(pTerm=sWLB.pWC->a; pTermprereqAll & pLoop->maskSelf)!=0 - && !ExprHasProperty(pTerm->pExpr, EP_FromJoin) - ){ - break; + if( (pTerm->prereqAll & pLoop->maskSelf)!=0 ){ + if( !ExprHasProperty(pTerm->pExpr, EP_FromJoin) + || pTerm->pExpr->iRightJoinTable!=pItem->iCursor + ){ + break; + } } } - if( pTerm drop loop %c not used\n", pLoop->cId)); + notReady &= ~pLoop->maskSelf; + for(pTerm=sWLB.pWC->a; pTermprereqAll & pLoop->maskSelf)!=0 ){ + pTerm->wtFlags |= TERM_CODED; + } + } + if( i!=pWInfo->nLevel-1 ){ + int nByte = (pWInfo->nLevel-1-i) * sizeof(WhereLevel); + memmove(&pWInfo->a[i], &pWInfo->a[i+1], nByte); + } pWInfo->nLevel--; nTabList--; } @@ -136526,15 +139378,32 @@ SQLITE_PRIVATE WhereInfo *sqlite3WhereBegin( /* If the caller is an UPDATE or DELETE statement that is requesting ** to use a one-pass algorithm, determine if this is appropriate. + ** + ** A one-pass approach can be used if the caller has requested one + ** and either (a) the scan visits at most one row or (b) each + ** of the following are true: + ** + ** * the caller has indicated that a one-pass approach can be used + ** with multiple rows (by setting WHERE_ONEPASS_MULTIROW), and + ** * the table is not a virtual table, and + ** * either the scan does not use the OR optimization or the caller + ** is a DELETE operation (WHERE_DUPLICATES_OK is only specified + ** for DELETE). + ** + ** The last qualification is because an UPDATE statement uses + ** WhereInfo.aiCurOnePass[1] to determine whether or not it really can + ** use a one-pass approach, and this is not set accurately for scans + ** that use the OR optimization. */ assert( (wctrlFlags & WHERE_ONEPASS_DESIRED)==0 || pWInfo->nLevel==1 ); if( (wctrlFlags & WHERE_ONEPASS_DESIRED)!=0 ){ int wsFlags = pWInfo->a[0].pWLoop->wsFlags; int bOnerow = (wsFlags & WHERE_ONEROW)!=0; - if( bOnerow - || ((wctrlFlags & WHERE_ONEPASS_MULTIROW)!=0 - && 0==(wsFlags & WHERE_VIRTUALTABLE)) - ){ + if( bOnerow || ( + 0!=(wctrlFlags & WHERE_ONEPASS_MULTIROW) + && 0==(wsFlags & WHERE_VIRTUALTABLE) + && (0==(wsFlags & WHERE_MULTI_OR) || (wctrlFlags & WHERE_DUPLICATES_OK)) + )){ pWInfo->eOnePass = bOnerow ? ONEPASS_SINGLE : ONEPASS_MULTI; if( HasRowid(pTabList->a[0].pTab) && (wsFlags & WHERE_IDX_ONLY) ){ if( wctrlFlags & WHERE_ONEPASS_MULTIROW ){ @@ -136671,7 +139540,6 @@ SQLITE_PRIVATE WhereInfo *sqlite3WhereBegin( ** loop below generates code for a single nested loop of the VM ** program. */ - notReady = ~(Bitmask)0; for(ii=0; iieDistinct==WHERE_DISTINCT_ORDERED + && i==pWInfo->nLevel-1 /* Ticket [ef9318757b152e3] 2017-10-21 */ && (pLoop->wsFlags & WHERE_INDEXED)!=0 && (pIdx = pLoop->u.btree.pIndex)->hasStat1 && (n = pLoop->u.btree.nIdxCol)>0 @@ -136801,7 +139670,8 @@ SQLITE_PRIVATE void sqlite3WhereEnd(WhereInfo *pWInfo){ addr = sqlite3VdbeAddOp1(v, OP_IfPos, pLevel->iLeftJoin); VdbeCoverage(v); assert( (ws & WHERE_IDX_ONLY)==0 || (ws & WHERE_INDEXED)!=0 ); if( (ws & WHERE_IDX_ONLY)==0 ){ - sqlite3VdbeAddOp1(v, OP_NullRow, pTabList->a[i].iCursor); + assert( pLevel->iTabCur==pTabList->a[pLevel->iFrom].iCursor ); + sqlite3VdbeAddOp1(v, OP_NullRow, pLevel->iTabCur); } if( (ws & WHERE_INDEXED) || ((ws & WHERE_MULTI_OR) && pLevel->u.pCovidx) @@ -136870,7 +139740,11 @@ SQLITE_PRIVATE void sqlite3WhereEnd(WhereInfo *pWInfo){ pOp = sqlite3VdbeGetOp(v, k); for(; kp1!=pLevel->iTabCur ) continue; - if( pOp->opcode==OP_Column ){ + if( pOp->opcode==OP_Column +#ifdef SQLITE_ENABLE_OFFSET_SQL_FUNC + || pOp->opcode==OP_Offset +#endif + ){ int x = pOp->p2; assert( pIdx->pTable==pTab ); if( !HasRowid(pTab) ){ @@ -136969,15 +139843,6 @@ SQLITE_PRIVATE void sqlite3WhereEnd(WhereInfo *pWInfo){ */ #define YYMALLOCARGTYPE u64 -/* -** An instance of this structure holds information about the -** LIMIT clause of a SELECT statement. -*/ -struct LimitVal { - Expr *pLimit; /* The LIMIT expression. NULL if there is no limit */ - Expr *pOffset; /* The OFFSET expression. NULL if there is none */ -}; - /* ** An instance of the following structure describes the event of a ** TRIGGER. "a" is the event type, one of TK_UPDATE, TK_INSERT, @@ -137021,20 +139886,12 @@ static void disableLookaside(Parse *pParse){ } } - /* This is a utility routine used to set the ExprSpan.zStart and - ** ExprSpan.zEnd values of pOut so that the span covers the complete - ** range of text beginning with pStart and going to the end of pEnd. - */ - static void spanSet(ExprSpan *pOut, Token *pStart, Token *pEnd){ - pOut->zStart = pStart->z; - pOut->zEnd = &pEnd->z[pEnd->n]; - } /* Construct a new Expr object from a single identifier. Use the ** new Expr to populate pOut. Set the span of pOut to be the identifier ** that created the expression. */ - static void spanExpr(ExprSpan *pOut, Parse *pParse, int op, Token t){ + static Expr *tokenExpr(Parse *pParse, int op, Token t){ Expr *p = sqlite3DbMallocRawNN(pParse->db, sizeof(Expr)+t.n+1); if( p ){ memset(p, 0, sizeof(Expr)); @@ -137052,45 +139909,9 @@ static void disableLookaside(Parse *pParse){ p->nHeight = 1; #endif } - pOut->pExpr = p; - pOut->zStart = t.z; - pOut->zEnd = &t.z[t.n]; + return p; } - /* This routine constructs a binary expression node out of two ExprSpan - ** objects and uses the result to populate a new ExprSpan object. - */ - static void spanBinaryExpr( - Parse *pParse, /* The parsing context. Errors accumulate here */ - int op, /* The binary operation */ - ExprSpan *pLeft, /* The left operand, and output */ - ExprSpan *pRight /* The right operand */ - ){ - pLeft->pExpr = sqlite3PExpr(pParse, op, pLeft->pExpr, pRight->pExpr); - pLeft->zEnd = pRight->zEnd; - } - - /* If doNot is true, then add a TK_NOT Expr-node wrapper around the - ** outside of *ppExpr. - */ - static void exprNot(Parse *pParse, int doNot, ExprSpan *pSpan){ - if( doNot ){ - pSpan->pExpr = sqlite3PExpr(pParse, TK_NOT, pSpan->pExpr, 0); - } - } - - /* Construct an expression node for a unary postfix operator - */ - static void spanUnaryPostfix( - Parse *pParse, /* Parsing context to record errors */ - int op, /* The operator */ - ExprSpan *pOperand, /* The operand, and output */ - Token *pPostOp /* The operand token for setting the span */ - ){ - pOperand->pExpr = sqlite3PExpr(pParse, op, pOperand->pExpr, 0); - pOperand->zEnd = &pPostOp->z[pPostOp->n]; - } - /* A routine to convert a binary TK_IS or TK_ISNOT expression into a ** unary TK_ISNULL or TK_NOTNULL expression. */ static void binaryToUnaryIfNull(Parse *pParse, Expr *pY, Expr *pA, int op){ @@ -137102,20 +139923,6 @@ static void disableLookaside(Parse *pParse){ } } - /* Construct an expression node for a unary prefix operator - */ - static void spanUnaryPrefix( - ExprSpan *pOut, /* Write the new expression node here */ - Parse *pParse, /* Parsing context to record errors */ - int op, /* The operator */ - ExprSpan *pOperand, /* The operand */ - Token *pPreOp /* The operand token for setting the span */ - ){ - pOut->zStart = pPreOp->z; - pOut->pExpr = sqlite3PExpr(pParse, op, pOperand->pExpr, 0); - pOut->zEnd = pOperand->zEnd; - } - /* Add a single new term to an ExprList that is used to store a ** list of identifiers. Report an error if the ID list contains ** a COLLATE clause or an ASC or DESC keyword, except ignore the @@ -137184,39 +139991,39 @@ static void disableLookaside(Parse *pParse){ ** defined, then do no error processing. ** YYNSTATE the combined number of states. ** YYNRULE the number of rules in the grammar +** YYNTOKEN Number of terminal symbols ** YY_MAX_SHIFT Maximum value for shift actions ** YY_MIN_SHIFTREDUCE Minimum value for shift-reduce actions ** YY_MAX_SHIFTREDUCE Maximum value for shift-reduce actions -** YY_MIN_REDUCE Minimum value for reduce actions -** YY_MAX_REDUCE Maximum value for reduce actions ** YY_ERROR_ACTION The yy_action[] code for syntax error ** YY_ACCEPT_ACTION The yy_action[] code for accept ** YY_NO_ACTION The yy_action[] code for no-op +** YY_MIN_REDUCE Minimum value for reduce actions +** YY_MAX_REDUCE Maximum value for reduce actions */ #ifndef INTERFACE # define INTERFACE 1 #endif /************* Begin control #defines *****************************************/ #define YYCODETYPE unsigned char -#define YYNOCODE 252 +#define YYNOCODE 253 #define YYACTIONTYPE unsigned short int #define YYWILDCARD 83 #define sqlite3ParserTOKENTYPE Token typedef union { int yyinit; sqlite3ParserTOKENTYPE yy0; - Expr* yy72; - TriggerStep* yy145; - ExprList* yy148; - SrcList* yy185; - ExprSpan yy190; - int yy194; - Select* yy243; - IdList* yy254; - With* yy285; - struct TrigEvent yy332; - struct LimitVal yy354; - struct {int value; int mask;} yy497; + int yy4; + struct TrigEvent yy90; + TriggerStep* yy203; + struct {int value; int mask;} yy215; + SrcList* yy259; + Expr* yy314; + ExprList* yy322; + const char* yy336; + IdList* yy384; + Select* yy387; + With* yy451; } YYMINORTYPE; #ifndef YYSTACKDEPTH #define YYSTACKDEPTH 100 @@ -137226,16 +140033,17 @@ typedef union { #define sqlite3ParserARG_FETCH Parse *pParse = yypParser->pParse #define sqlite3ParserARG_STORE yypParser->pParse = pParse #define YYFALLBACK 1 -#define YYNSTATE 455 -#define YYNRULE 329 -#define YY_MAX_SHIFT 454 -#define YY_MIN_SHIFTREDUCE 664 -#define YY_MAX_SHIFTREDUCE 992 -#define YY_MIN_REDUCE 993 -#define YY_MAX_REDUCE 1321 -#define YY_ERROR_ACTION 1322 -#define YY_ACCEPT_ACTION 1323 -#define YY_NO_ACTION 1324 +#define YYNSTATE 472 +#define YYNRULE 333 +#define YYNTOKEN 143 +#define YY_MAX_SHIFT 471 +#define YY_MIN_SHIFTREDUCE 681 +#define YY_MAX_SHIFTREDUCE 1013 +#define YY_ERROR_ACTION 1014 +#define YY_ACCEPT_ACTION 1015 +#define YY_NO_ACTION 1016 +#define YY_MIN_REDUCE 1017 +#define YY_MAX_REDUCE 1349 /************* End control #defines *******************************************/ /* Define the yytestcase() macro to be a no-op if is not already defined @@ -137265,9 +140073,6 @@ typedef union { ** N between YY_MIN_SHIFTREDUCE Shift to an arbitrary state then ** and YY_MAX_SHIFTREDUCE reduce by rule N-YY_MIN_SHIFTREDUCE. ** -** N between YY_MIN_REDUCE Reduce by rule N-YY_MIN_REDUCE -** and YY_MAX_REDUCE -** ** N == YY_ERROR_ACTION A syntax error has occurred. ** ** N == YY_ACCEPT_ACTION The parser accepts its input. @@ -137275,25 +140080,22 @@ typedef union { ** N == YY_NO_ACTION No such action. Denotes unused ** slots in the yy_action[] table. ** +** N between YY_MIN_REDUCE Reduce by rule N-YY_MIN_REDUCE +** and YY_MAX_REDUCE +** ** The action table is constructed as a single large table named yy_action[]. ** Given state S and lookahead X, the action is computed as either: ** ** (A) N = yy_action[ yy_shift_ofst[S] + X ] ** (B) N = yy_default[S] ** -** The (A) formula is preferred. The B formula is used instead if: -** (1) The yy_shift_ofst[S]+X value is out of range, or -** (2) yy_lookahead[yy_shift_ofst[S]+X] is not equal to X, or -** (3) yy_shift_ofst[S] equal YY_SHIFT_USE_DFLT. -** (Implementation note: YY_SHIFT_USE_DFLT is chosen so that -** YY_SHIFT_USE_DFLT+X will be out of range for all possible lookaheads X. -** Hence only tests (1) and (2) need to be evaluated.) +** The (A) formula is preferred. The B formula is used instead if +** yy_lookahead[yy_shift_ofst[S]+X] is not equal to X. ** ** The formulas above are for computing the action when the lookahead is ** a terminal symbol. If the lookahead is a non-terminal (as occurs after ** a reduce action) then the yy_reduce_ofst[] array is used in place of -** the yy_shift_ofst[] array and YY_REDUCE_USE_DFLT is used in place of -** YY_SHIFT_USE_DFLT. +** the yy_shift_ofst[] array. ** ** The following are the tables generated in this section: ** @@ -137309,461 +140111,479 @@ typedef union { *********** Begin parsing tables **********************************************/ #define YY_ACTTAB_COUNT (1566) static const YYACTIONTYPE yy_action[] = { - /* 0 */ 324, 1323, 155, 155, 2, 203, 94, 94, 94, 93, - /* 10 */ 350, 98, 98, 98, 98, 91, 95, 95, 94, 94, - /* 20 */ 94, 93, 350, 268, 99, 100, 90, 971, 971, 847, - /* 30 */ 850, 839, 839, 97, 97, 98, 98, 98, 98, 350, - /* 40 */ 969, 96, 96, 96, 96, 95, 95, 94, 94, 94, - /* 50 */ 93, 350, 950, 96, 96, 96, 96, 95, 95, 94, - /* 60 */ 94, 94, 93, 350, 250, 96, 96, 96, 96, 95, - /* 70 */ 95, 94, 94, 94, 93, 350, 224, 224, 969, 132, - /* 80 */ 888, 348, 347, 415, 172, 324, 1286, 449, 414, 950, - /* 90 */ 951, 952, 808, 977, 1032, 950, 300, 786, 428, 132, - /* 100 */ 975, 362, 976, 9, 9, 787, 132, 52, 52, 99, - /* 110 */ 100, 90, 971, 971, 847, 850, 839, 839, 97, 97, - /* 120 */ 98, 98, 98, 98, 372, 978, 241, 978, 262, 369, - /* 130 */ 261, 120, 950, 951, 952, 194, 58, 324, 401, 398, - /* 140 */ 397, 808, 427, 429, 75, 808, 1260, 1260, 132, 396, - /* 150 */ 96, 96, 96, 96, 95, 95, 94, 94, 94, 93, - /* 160 */ 350, 99, 100, 90, 971, 971, 847, 850, 839, 839, - /* 170 */ 97, 97, 98, 98, 98, 98, 786, 262, 369, 261, - /* 180 */ 826, 262, 364, 251, 787, 1084, 101, 1114, 72, 324, - /* 190 */ 227, 1113, 242, 411, 442, 819, 92, 89, 178, 818, - /* 200 */ 1022, 268, 96, 96, 96, 96, 95, 95, 94, 94, - /* 210 */ 94, 93, 350, 99, 100, 90, 971, 971, 847, 850, - /* 220 */ 839, 839, 97, 97, 98, 98, 98, 98, 449, 372, - /* 230 */ 818, 818, 820, 92, 89, 178, 60, 92, 89, 178, - /* 240 */ 1025, 324, 357, 930, 1316, 300, 61, 1316, 52, 52, - /* 250 */ 836, 836, 848, 851, 96, 96, 96, 96, 95, 95, - /* 260 */ 94, 94, 94, 93, 350, 99, 100, 90, 971, 971, - /* 270 */ 847, 850, 839, 839, 97, 97, 98, 98, 98, 98, - /* 280 */ 92, 89, 178, 427, 412, 198, 930, 1317, 454, 995, - /* 290 */ 1317, 355, 1024, 324, 243, 231, 114, 277, 348, 347, - /* 300 */ 1242, 950, 416, 1071, 928, 840, 96, 96, 96, 96, - /* 310 */ 95, 95, 94, 94, 94, 93, 350, 99, 100, 90, - /* 320 */ 971, 971, 847, 850, 839, 839, 97, 97, 98, 98, - /* 330 */ 98, 98, 449, 328, 449, 120, 23, 256, 950, 951, - /* 340 */ 952, 968, 978, 438, 978, 324, 329, 928, 954, 701, - /* 350 */ 200, 175, 52, 52, 52, 52, 939, 353, 96, 96, - /* 360 */ 96, 96, 95, 95, 94, 94, 94, 93, 350, 99, - /* 370 */ 100, 90, 971, 971, 847, 850, 839, 839, 97, 97, - /* 380 */ 98, 98, 98, 98, 354, 449, 954, 427, 417, 427, - /* 390 */ 426, 1290, 92, 89, 178, 268, 253, 324, 255, 1058, - /* 400 */ 1037, 694, 93, 350, 383, 52, 52, 380, 1058, 374, - /* 410 */ 96, 96, 96, 96, 95, 95, 94, 94, 94, 93, - /* 420 */ 350, 99, 100, 90, 971, 971, 847, 850, 839, 839, - /* 430 */ 97, 97, 98, 98, 98, 98, 228, 449, 167, 449, - /* 440 */ 427, 407, 157, 446, 446, 446, 349, 349, 349, 324, - /* 450 */ 310, 316, 991, 827, 320, 242, 411, 51, 51, 36, - /* 460 */ 36, 254, 96, 96, 96, 96, 95, 95, 94, 94, - /* 470 */ 94, 93, 350, 99, 100, 90, 971, 971, 847, 850, - /* 480 */ 839, 839, 97, 97, 98, 98, 98, 98, 194, 316, - /* 490 */ 929, 401, 398, 397, 224, 224, 1265, 939, 353, 1318, - /* 500 */ 317, 324, 396, 1063, 1063, 813, 414, 1061, 1061, 950, - /* 510 */ 299, 448, 992, 268, 96, 96, 96, 96, 95, 95, - /* 520 */ 94, 94, 94, 93, 350, 99, 100, 90, 971, 971, - /* 530 */ 847, 850, 839, 839, 97, 97, 98, 98, 98, 98, - /* 540 */ 757, 1041, 449, 893, 893, 386, 950, 951, 952, 410, - /* 550 */ 992, 747, 747, 324, 229, 268, 221, 296, 268, 771, - /* 560 */ 890, 378, 52, 52, 890, 421, 96, 96, 96, 96, - /* 570 */ 95, 95, 94, 94, 94, 93, 350, 99, 100, 90, - /* 580 */ 971, 971, 847, 850, 839, 839, 97, 97, 98, 98, - /* 590 */ 98, 98, 103, 449, 275, 384, 1241, 343, 157, 1207, - /* 600 */ 909, 669, 670, 671, 176, 197, 196, 195, 324, 298, - /* 610 */ 319, 1266, 2, 37, 37, 910, 1134, 1040, 96, 96, - /* 620 */ 96, 96, 95, 95, 94, 94, 94, 93, 350, 697, - /* 630 */ 911, 177, 99, 100, 90, 971, 971, 847, 850, 839, - /* 640 */ 839, 97, 97, 98, 98, 98, 98, 230, 146, 120, - /* 650 */ 735, 1235, 826, 270, 1141, 273, 1141, 771, 171, 170, - /* 660 */ 736, 1141, 82, 324, 80, 268, 697, 819, 158, 268, - /* 670 */ 378, 818, 78, 96, 96, 96, 96, 95, 95, 94, - /* 680 */ 94, 94, 93, 350, 120, 950, 393, 99, 100, 90, - /* 690 */ 971, 971, 847, 850, 839, 839, 97, 97, 98, 98, - /* 700 */ 98, 98, 818, 818, 820, 1141, 1070, 370, 331, 133, - /* 710 */ 1066, 1141, 1250, 198, 268, 324, 1016, 330, 245, 333, - /* 720 */ 24, 334, 950, 951, 952, 368, 335, 81, 96, 96, - /* 730 */ 96, 96, 95, 95, 94, 94, 94, 93, 350, 99, - /* 740 */ 100, 90, 971, 971, 847, 850, 839, 839, 97, 97, - /* 750 */ 98, 98, 98, 98, 132, 267, 260, 445, 330, 223, - /* 760 */ 175, 1289, 925, 752, 724, 318, 1073, 324, 751, 246, - /* 770 */ 385, 301, 301, 378, 329, 361, 344, 414, 1233, 280, - /* 780 */ 96, 96, 96, 96, 95, 95, 94, 94, 94, 93, - /* 790 */ 350, 99, 88, 90, 971, 971, 847, 850, 839, 839, - /* 800 */ 97, 97, 98, 98, 98, 98, 337, 346, 721, 722, - /* 810 */ 449, 120, 118, 887, 162, 887, 810, 371, 324, 202, - /* 820 */ 202, 373, 249, 263, 202, 394, 74, 704, 208, 1069, - /* 830 */ 12, 12, 96, 96, 96, 96, 95, 95, 94, 94, - /* 840 */ 94, 93, 350, 100, 90, 971, 971, 847, 850, 839, - /* 850 */ 839, 97, 97, 98, 98, 98, 98, 449, 771, 232, - /* 860 */ 449, 278, 120, 286, 74, 704, 714, 713, 324, 342, - /* 870 */ 749, 877, 1209, 77, 285, 1255, 780, 52, 52, 202, - /* 880 */ 27, 27, 418, 96, 96, 96, 96, 95, 95, 94, - /* 890 */ 94, 94, 93, 350, 90, 971, 971, 847, 850, 839, - /* 900 */ 839, 97, 97, 98, 98, 98, 98, 86, 444, 877, - /* 910 */ 3, 1193, 422, 1013, 873, 435, 886, 208, 886, 689, - /* 920 */ 1091, 257, 116, 822, 447, 1230, 117, 1229, 86, 444, - /* 930 */ 177, 3, 381, 96, 96, 96, 96, 95, 95, 94, - /* 940 */ 94, 94, 93, 350, 339, 447, 120, 351, 120, 212, - /* 950 */ 169, 287, 404, 282, 403, 199, 771, 950, 433, 419, - /* 960 */ 439, 822, 280, 691, 1039, 264, 269, 132, 351, 153, - /* 970 */ 826, 376, 74, 272, 274, 276, 83, 84, 1054, 433, - /* 980 */ 147, 1038, 443, 85, 351, 451, 450, 281, 132, 818, - /* 990 */ 25, 826, 449, 120, 950, 951, 952, 83, 84, 86, - /* 1000 */ 444, 691, 3, 408, 85, 351, 451, 450, 449, 5, - /* 1010 */ 818, 203, 32, 32, 1107, 120, 447, 950, 225, 1140, - /* 1020 */ 818, 818, 820, 821, 19, 203, 226, 950, 38, 38, - /* 1030 */ 1087, 314, 314, 313, 215, 311, 120, 449, 678, 351, - /* 1040 */ 237, 818, 818, 820, 821, 19, 969, 409, 377, 1, - /* 1050 */ 433, 180, 706, 248, 950, 951, 952, 10, 10, 449, - /* 1060 */ 969, 247, 826, 1098, 950, 951, 952, 430, 83, 84, - /* 1070 */ 756, 336, 950, 20, 431, 85, 351, 451, 450, 10, - /* 1080 */ 10, 818, 86, 444, 969, 3, 950, 449, 302, 303, - /* 1090 */ 182, 950, 1146, 338, 1021, 1015, 1004, 183, 969, 447, - /* 1100 */ 132, 181, 76, 444, 21, 3, 449, 10, 10, 950, - /* 1110 */ 951, 952, 818, 818, 820, 821, 19, 715, 1279, 447, - /* 1120 */ 389, 233, 351, 950, 951, 952, 10, 10, 950, 951, - /* 1130 */ 952, 1003, 218, 433, 1005, 325, 1273, 773, 289, 291, - /* 1140 */ 424, 293, 351, 7, 159, 826, 363, 402, 315, 360, - /* 1150 */ 1129, 83, 84, 433, 1232, 716, 772, 259, 85, 351, - /* 1160 */ 451, 450, 358, 375, 818, 826, 360, 359, 399, 1211, - /* 1170 */ 157, 83, 84, 681, 98, 98, 98, 98, 85, 351, - /* 1180 */ 451, 450, 323, 252, 818, 295, 1211, 1213, 1235, 173, - /* 1190 */ 1037, 284, 434, 340, 1204, 818, 818, 820, 821, 19, - /* 1200 */ 308, 234, 449, 234, 96, 96, 96, 96, 95, 95, - /* 1210 */ 94, 94, 94, 93, 350, 818, 818, 820, 821, 19, - /* 1220 */ 909, 120, 39, 39, 1203, 449, 168, 360, 449, 1276, - /* 1230 */ 367, 449, 135, 449, 986, 910, 449, 1249, 449, 1247, - /* 1240 */ 449, 205, 983, 449, 370, 40, 40, 1211, 41, 41, - /* 1250 */ 911, 42, 42, 28, 28, 870, 29, 29, 31, 31, - /* 1260 */ 43, 43, 379, 44, 44, 449, 59, 449, 332, 449, - /* 1270 */ 432, 62, 144, 156, 449, 130, 449, 72, 449, 137, - /* 1280 */ 449, 365, 449, 392, 139, 45, 45, 11, 11, 46, - /* 1290 */ 46, 140, 1200, 449, 105, 105, 47, 47, 48, 48, - /* 1300 */ 33, 33, 49, 49, 1126, 449, 141, 366, 449, 185, - /* 1310 */ 142, 449, 1234, 50, 50, 449, 160, 449, 148, 449, - /* 1320 */ 1136, 382, 449, 67, 449, 34, 34, 449, 122, 122, - /* 1330 */ 449, 123, 123, 449, 1198, 124, 124, 56, 56, 35, - /* 1340 */ 35, 449, 106, 106, 53, 53, 449, 107, 107, 449, - /* 1350 */ 108, 108, 449, 104, 104, 449, 406, 449, 388, 449, - /* 1360 */ 189, 121, 121, 449, 190, 449, 119, 119, 449, 112, - /* 1370 */ 112, 449, 111, 111, 1218, 109, 109, 110, 110, 55, - /* 1380 */ 55, 266, 752, 57, 57, 54, 54, 751, 26, 26, - /* 1390 */ 1099, 30, 30, 219, 154, 390, 271, 191, 321, 1006, - /* 1400 */ 192, 405, 1057, 1056, 1055, 341, 1048, 706, 1047, 1029, - /* 1410 */ 322, 420, 1028, 71, 1095, 283, 288, 1027, 1288, 204, - /* 1420 */ 6, 297, 79, 1184, 437, 1096, 1094, 290, 345, 292, - /* 1430 */ 441, 1093, 294, 102, 425, 73, 423, 213, 1012, 22, - /* 1440 */ 452, 945, 214, 1077, 216, 217, 238, 453, 306, 304, - /* 1450 */ 307, 239, 240, 1001, 305, 125, 996, 126, 115, 235, - /* 1460 */ 127, 665, 352, 166, 244, 179, 356, 113, 885, 883, - /* 1470 */ 806, 136, 128, 738, 326, 138, 327, 258, 184, 899, - /* 1480 */ 143, 129, 145, 63, 64, 65, 66, 902, 186, 187, - /* 1490 */ 898, 8, 13, 188, 134, 265, 891, 202, 980, 387, - /* 1500 */ 150, 149, 680, 161, 391, 193, 285, 279, 395, 151, - /* 1510 */ 68, 717, 14, 15, 400, 69, 16, 131, 236, 825, - /* 1520 */ 824, 853, 746, 750, 4, 70, 174, 413, 220, 222, - /* 1530 */ 152, 779, 774, 77, 868, 74, 854, 201, 17, 852, - /* 1540 */ 908, 206, 907, 207, 18, 857, 934, 163, 436, 210, - /* 1550 */ 935, 164, 209, 165, 440, 856, 823, 312, 690, 87, - /* 1560 */ 211, 309, 1281, 940, 995, 1280, + /* 0 */ 1169, 1015, 167, 167, 1, 168, 466, 1313, 466, 1083, + /* 10 */ 1062, 466, 97, 94, 183, 1057, 466, 329, 1083, 342, + /* 20 */ 97, 94, 183, 459, 459, 459, 436, 57, 57, 57, + /* 30 */ 57, 807, 57, 57, 367, 367, 367, 57, 57, 808, + /* 40 */ 1270, 1088, 1088, 104, 105, 95, 991, 991, 868, 871, + /* 50 */ 860, 860, 102, 102, 103, 103, 103, 103, 233, 233, + /* 60 */ 326, 1011, 449, 437, 449, 446, 351, 449, 461, 1142, + /* 70 */ 463, 342, 449, 426, 1316, 209, 180, 742, 80, 299, + /* 80 */ 857, 857, 869, 872, 101, 101, 101, 101, 100, 100, + /* 90 */ 99, 99, 99, 98, 368, 104, 105, 95, 991, 991, + /* 100 */ 868, 871, 860, 860, 102, 102, 103, 103, 103, 103, + /* 110 */ 99, 99, 99, 98, 368, 355, 97, 94, 183, 228, + /* 120 */ 106, 1012, 407, 342, 101, 101, 101, 101, 100, 100, + /* 130 */ 99, 99, 99, 98, 368, 861, 101, 101, 101, 101, + /* 140 */ 100, 100, 99, 99, 99, 98, 368, 104, 105, 95, + /* 150 */ 991, 991, 868, 871, 860, 860, 102, 102, 103, 103, + /* 160 */ 103, 103, 201, 368, 375, 420, 417, 416, 387, 273, + /* 170 */ 65, 97, 94, 183, 168, 342, 415, 951, 1343, 396, + /* 180 */ 66, 1343, 320, 959, 371, 970, 334, 340, 101, 101, + /* 190 */ 101, 101, 100, 100, 99, 99, 99, 98, 368, 104, + /* 200 */ 105, 95, 991, 991, 868, 871, 860, 860, 102, 102, + /* 210 */ 103, 103, 103, 103, 373, 100, 100, 99, 99, 99, + /* 220 */ 98, 368, 970, 971, 972, 201, 1100, 342, 420, 417, + /* 230 */ 416, 287, 366, 365, 337, 970, 1162, 463, 949, 415, + /* 240 */ 101, 101, 101, 101, 100, 100, 99, 99, 99, 98, + /* 250 */ 368, 104, 105, 95, 991, 991, 868, 871, 860, 860, + /* 260 */ 102, 102, 103, 103, 103, 103, 777, 241, 233, 233, + /* 270 */ 9, 847, 970, 971, 972, 390, 998, 1141, 998, 342, + /* 280 */ 463, 252, 829, 719, 98, 368, 840, 298, 338, 142, + /* 290 */ 839, 339, 101, 101, 101, 101, 100, 100, 99, 99, + /* 300 */ 99, 98, 368, 104, 105, 95, 991, 991, 868, 871, + /* 310 */ 860, 860, 102, 102, 103, 103, 103, 103, 272, 466, + /* 320 */ 392, 839, 839, 841, 97, 94, 183, 390, 1317, 253, + /* 330 */ 456, 342, 125, 166, 807, 712, 208, 407, 386, 970, + /* 340 */ 57, 57, 808, 238, 101, 101, 101, 101, 100, 100, + /* 350 */ 99, 99, 99, 98, 368, 104, 105, 95, 991, 991, + /* 360 */ 868, 871, 860, 860, 102, 102, 103, 103, 103, 103, + /* 370 */ 466, 108, 466, 267, 465, 442, 970, 971, 972, 261, + /* 380 */ 951, 1344, 909, 342, 1344, 142, 829, 848, 1292, 959, + /* 390 */ 371, 55, 55, 57, 57, 242, 101, 101, 101, 101, + /* 400 */ 100, 100, 99, 99, 99, 98, 368, 104, 105, 95, + /* 410 */ 991, 991, 868, 871, 860, 860, 102, 102, 103, 103, + /* 420 */ 103, 103, 272, 382, 262, 253, 456, 310, 364, 253, + /* 430 */ 456, 86, 264, 84, 266, 342, 441, 176, 175, 834, + /* 440 */ 464, 949, 767, 767, 332, 313, 1094, 396, 101, 101, + /* 450 */ 101, 101, 100, 100, 99, 99, 99, 98, 368, 104, + /* 460 */ 105, 95, 991, 991, 868, 871, 860, 860, 102, 102, + /* 470 */ 103, 103, 103, 103, 227, 227, 233, 233, 233, 233, + /* 480 */ 387, 273, 234, 234, 326, 950, 463, 342, 463, 298, + /* 490 */ 463, 914, 914, 404, 463, 1037, 123, 265, 27, 970, + /* 500 */ 101, 101, 101, 101, 100, 100, 99, 99, 99, 98, + /* 510 */ 368, 104, 105, 95, 991, 991, 868, 871, 860, 860, + /* 520 */ 102, 102, 103, 103, 103, 103, 435, 233, 233, 466, + /* 530 */ 285, 686, 687, 688, 127, 271, 970, 971, 972, 463, + /* 540 */ 1345, 327, 342, 407, 157, 1012, 988, 13, 13, 181, + /* 550 */ 41, 41, 101, 101, 101, 101, 100, 100, 99, 99, + /* 560 */ 99, 98, 368, 715, 794, 378, 104, 105, 95, 991, + /* 570 */ 991, 868, 871, 860, 860, 102, 102, 103, 103, 103, + /* 580 */ 103, 970, 378, 377, 346, 239, 847, 1086, 1086, 280, + /* 590 */ 1169, 283, 204, 203, 202, 177, 298, 342, 407, 298, + /* 600 */ 715, 840, 169, 299, 407, 839, 82, 101, 101, 101, + /* 610 */ 101, 100, 100, 99, 99, 99, 98, 368, 970, 971, + /* 620 */ 972, 104, 105, 95, 991, 991, 868, 871, 860, 860, + /* 630 */ 102, 102, 103, 103, 103, 103, 839, 839, 841, 362, + /* 640 */ 240, 124, 1169, 172, 126, 378, 1269, 1169, 1066, 342, + /* 650 */ 253, 456, 407, 407, 407, 396, 352, 401, 407, 429, + /* 660 */ 398, 85, 101, 101, 101, 101, 100, 100, 99, 99, + /* 670 */ 99, 98, 368, 104, 105, 95, 991, 991, 868, 871, + /* 680 */ 860, 860, 102, 102, 103, 103, 103, 103, 1169, 466, + /* 690 */ 230, 233, 233, 792, 1235, 1095, 1091, 1293, 1, 77, + /* 700 */ 278, 342, 205, 463, 974, 911, 1040, 348, 353, 911, + /* 710 */ 42, 42, 79, 403, 101, 101, 101, 101, 100, 100, + /* 720 */ 99, 99, 99, 98, 368, 104, 93, 95, 991, 991, + /* 730 */ 868, 871, 860, 860, 102, 102, 103, 103, 103, 103, + /* 740 */ 402, 9, 974, 243, 772, 458, 348, 232, 180, 771, + /* 750 */ 946, 312, 342, 328, 363, 349, 143, 831, 389, 1278, + /* 760 */ 211, 211, 21, 347, 432, 182, 101, 101, 101, 101, + /* 770 */ 100, 100, 99, 99, 99, 98, 368, 105, 95, 991, + /* 780 */ 991, 868, 871, 860, 860, 102, 102, 103, 103, 103, + /* 790 */ 103, 792, 724, 22, 732, 731, 233, 233, 1239, 256, + /* 800 */ 391, 274, 342, 211, 79, 360, 257, 413, 463, 397, + /* 810 */ 207, 288, 260, 450, 79, 1239, 1241, 101, 101, 101, + /* 820 */ 101, 100, 100, 99, 99, 99, 98, 368, 95, 991, + /* 830 */ 991, 868, 871, 860, 860, 102, 102, 103, 103, 103, + /* 840 */ 103, 91, 457, 296, 3, 233, 233, 5, 438, 212, + /* 850 */ 331, 394, 739, 740, 295, 898, 894, 463, 460, 207, + /* 860 */ 801, 1237, 722, 211, 698, 843, 1283, 101, 101, 101, + /* 870 */ 101, 100, 100, 99, 99, 99, 98, 368, 1239, 380, + /* 880 */ 357, 369, 233, 233, 989, 219, 236, 297, 423, 292, + /* 890 */ 422, 206, 454, 898, 463, 970, 91, 457, 290, 3, + /* 900 */ 722, 142, 268, 843, 847, 466, 1258, 149, 388, 425, + /* 910 */ 88, 89, 769, 460, 930, 87, 447, 90, 369, 468, + /* 920 */ 467, 385, 989, 839, 1257, 439, 57, 57, 395, 931, + /* 930 */ 1065, 158, 970, 971, 972, 772, 369, 471, 1019, 399, + /* 940 */ 771, 253, 456, 254, 932, 119, 891, 454, 233, 233, + /* 950 */ 4, 970, 1096, 275, 839, 839, 841, 842, 19, 847, + /* 960 */ 463, 449, 448, 163, 453, 88, 89, 776, 970, 1127, + /* 970 */ 279, 930, 90, 369, 468, 467, 91, 457, 839, 3, + /* 980 */ 235, 1064, 466, 1228, 233, 233, 931, 970, 970, 971, + /* 990 */ 972, 970, 908, 460, 908, 2, 463, 81, 457, 212, + /* 1000 */ 3, 932, 282, 10, 10, 970, 971, 972, 189, 839, + /* 1010 */ 839, 841, 842, 19, 460, 284, 369, 354, 907, 286, + /* 1020 */ 907, 753, 466, 1079, 970, 971, 972, 454, 970, 971, + /* 1030 */ 972, 754, 970, 1063, 989, 372, 792, 369, 1118, 847, + /* 1040 */ 291, 452, 466, 10, 10, 88, 89, 142, 454, 168, + /* 1050 */ 300, 412, 90, 369, 468, 467, 793, 356, 839, 706, + /* 1060 */ 847, 341, 121, 10, 10, 301, 88, 89, 379, 970, + /* 1070 */ 971, 972, 989, 90, 369, 468, 467, 244, 205, 839, + /* 1080 */ 1306, 245, 1135, 245, 250, 1168, 1114, 253, 456, 839, + /* 1090 */ 839, 841, 842, 19, 1125, 237, 122, 451, 1174, 733, + /* 1100 */ 324, 324, 323, 222, 321, 466, 1046, 695, 182, 225, + /* 1110 */ 839, 839, 841, 842, 19, 103, 103, 103, 103, 96, + /* 1120 */ 185, 466, 259, 1039, 1028, 170, 10, 10, 1027, 421, + /* 1130 */ 258, 1029, 1300, 708, 792, 466, 408, 734, 8, 347, + /* 1140 */ 444, 174, 12, 12, 290, 101, 101, 101, 101, 100, + /* 1150 */ 100, 99, 99, 99, 98, 368, 32, 32, 466, 187, + /* 1160 */ 466, 1111, 103, 103, 103, 103, 188, 466, 325, 138, + /* 1170 */ 186, 708, 303, 305, 307, 358, 970, 270, 393, 43, + /* 1180 */ 43, 44, 44, 1157, 333, 178, 418, 294, 45, 45, + /* 1190 */ 1232, 318, 101, 101, 101, 101, 100, 100, 99, 99, + /* 1200 */ 99, 98, 368, 381, 343, 366, 365, 466, 263, 253, + /* 1210 */ 456, 466, 1062, 970, 971, 972, 1231, 997, 309, 466, + /* 1220 */ 455, 466, 427, 466, 995, 173, 996, 1303, 46, 46, + /* 1230 */ 145, 376, 37, 37, 1006, 1277, 466, 214, 1275, 64, + /* 1240 */ 47, 47, 33, 33, 34, 34, 1003, 67, 466, 998, + /* 1250 */ 350, 998, 466, 155, 233, 233, 466, 36, 36, 24, + /* 1260 */ 140, 77, 1154, 466, 383, 466, 463, 428, 466, 48, + /* 1270 */ 48, 466, 147, 49, 49, 466, 150, 50, 50, 466, + /* 1280 */ 151, 152, 466, 384, 11, 11, 51, 51, 466, 110, + /* 1290 */ 110, 153, 52, 52, 411, 466, 38, 38, 466, 191, + /* 1300 */ 53, 53, 466, 54, 54, 466, 400, 466, 330, 39, + /* 1310 */ 39, 466, 1164, 466, 25, 466, 56, 56, 466, 131, + /* 1320 */ 131, 72, 466, 132, 132, 159, 133, 133, 61, 61, + /* 1330 */ 1226, 195, 40, 40, 111, 111, 58, 58, 406, 112, + /* 1340 */ 112, 466, 277, 113, 113, 466, 226, 466, 1246, 466, + /* 1350 */ 197, 466, 164, 466, 409, 466, 198, 466, 199, 466, + /* 1360 */ 335, 281, 109, 109, 466, 1030, 130, 130, 129, 129, + /* 1370 */ 117, 117, 116, 116, 114, 114, 115, 115, 60, 60, + /* 1380 */ 62, 62, 466, 359, 466, 59, 59, 424, 1082, 1081, + /* 1390 */ 1080, 724, 1073, 1054, 336, 293, 1053, 1052, 1315, 431, + /* 1400 */ 361, 76, 248, 31, 31, 35, 35, 1072, 249, 440, + /* 1410 */ 302, 434, 213, 1122, 6, 311, 1212, 107, 83, 251, + /* 1420 */ 78, 1123, 445, 220, 443, 1036, 304, 23, 1121, 469, + /* 1430 */ 965, 221, 223, 1104, 314, 224, 344, 317, 315, 316, + /* 1440 */ 470, 306, 1025, 1120, 308, 1262, 1020, 134, 120, 246, + /* 1450 */ 682, 370, 171, 255, 1263, 135, 184, 1261, 1260, 374, + /* 1460 */ 118, 906, 904, 827, 1050, 146, 136, 137, 148, 1049, + /* 1470 */ 63, 1047, 756, 190, 269, 920, 154, 156, 68, 69, + /* 1480 */ 70, 71, 139, 923, 192, 193, 144, 919, 345, 128, + /* 1490 */ 14, 194, 276, 211, 1000, 405, 196, 161, 912, 160, + /* 1500 */ 26, 697, 410, 295, 200, 289, 414, 162, 419, 73, + /* 1510 */ 15, 16, 141, 74, 28, 247, 846, 845, 735, 874, + /* 1520 */ 954, 75, 430, 955, 29, 433, 179, 229, 231, 800, + /* 1530 */ 165, 795, 87, 210, 889, 79, 875, 17, 873, 877, + /* 1540 */ 929, 18, 928, 216, 215, 878, 20, 30, 462, 844, + /* 1550 */ 707, 92, 766, 770, 7, 322, 217, 218, 319, 1308, + /* 1560 */ 960, 1016, 1016, 1016, 1016, 1307, }; static const YYCODETYPE yy_lookahead[] = { - /* 0 */ 19, 144, 145, 146, 147, 24, 90, 91, 92, 93, - /* 10 */ 94, 54, 55, 56, 57, 58, 88, 89, 90, 91, - /* 20 */ 92, 93, 94, 152, 43, 44, 45, 46, 47, 48, - /* 30 */ 49, 50, 51, 52, 53, 54, 55, 56, 57, 94, - /* 40 */ 59, 84, 85, 86, 87, 88, 89, 90, 91, 92, - /* 50 */ 93, 94, 59, 84, 85, 86, 87, 88, 89, 90, - /* 60 */ 91, 92, 93, 94, 193, 84, 85, 86, 87, 88, - /* 70 */ 89, 90, 91, 92, 93, 94, 194, 195, 97, 79, - /* 80 */ 11, 88, 89, 152, 26, 19, 171, 152, 206, 96, - /* 90 */ 97, 98, 72, 100, 179, 59, 152, 31, 163, 79, - /* 100 */ 107, 219, 109, 172, 173, 39, 79, 172, 173, 43, - /* 110 */ 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, - /* 120 */ 54, 55, 56, 57, 152, 132, 199, 134, 108, 109, - /* 130 */ 110, 196, 96, 97, 98, 99, 209, 19, 102, 103, - /* 140 */ 104, 72, 207, 208, 26, 72, 119, 120, 79, 113, - /* 150 */ 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, - /* 160 */ 94, 43, 44, 45, 46, 47, 48, 49, 50, 51, - /* 170 */ 52, 53, 54, 55, 56, 57, 31, 108, 109, 110, - /* 180 */ 82, 108, 109, 110, 39, 210, 68, 175, 130, 19, - /* 190 */ 218, 175, 119, 120, 250, 97, 221, 222, 223, 101, - /* 200 */ 172, 152, 84, 85, 86, 87, 88, 89, 90, 91, - /* 210 */ 92, 93, 94, 43, 44, 45, 46, 47, 48, 49, - /* 220 */ 50, 51, 52, 53, 54, 55, 56, 57, 152, 152, - /* 230 */ 132, 133, 134, 221, 222, 223, 66, 221, 222, 223, - /* 240 */ 172, 19, 193, 22, 23, 152, 24, 26, 172, 173, - /* 250 */ 46, 47, 48, 49, 84, 85, 86, 87, 88, 89, - /* 260 */ 90, 91, 92, 93, 94, 43, 44, 45, 46, 47, - /* 270 */ 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, - /* 280 */ 221, 222, 223, 207, 208, 46, 22, 23, 148, 149, - /* 290 */ 26, 242, 172, 19, 154, 218, 156, 23, 88, 89, - /* 300 */ 241, 59, 163, 163, 83, 101, 84, 85, 86, 87, - /* 310 */ 88, 89, 90, 91, 92, 93, 94, 43, 44, 45, - /* 320 */ 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, - /* 330 */ 56, 57, 152, 157, 152, 196, 196, 16, 96, 97, - /* 340 */ 98, 26, 132, 250, 134, 19, 107, 83, 59, 23, - /* 350 */ 211, 212, 172, 173, 172, 173, 1, 2, 84, 85, - /* 360 */ 86, 87, 88, 89, 90, 91, 92, 93, 94, 43, - /* 370 */ 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, - /* 380 */ 54, 55, 56, 57, 244, 152, 97, 207, 208, 207, - /* 390 */ 208, 185, 221, 222, 223, 152, 75, 19, 77, 179, - /* 400 */ 180, 23, 93, 94, 228, 172, 173, 231, 188, 152, - /* 410 */ 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, - /* 420 */ 94, 43, 44, 45, 46, 47, 48, 49, 50, 51, - /* 430 */ 52, 53, 54, 55, 56, 57, 193, 152, 123, 152, - /* 440 */ 207, 208, 152, 168, 169, 170, 168, 169, 170, 19, - /* 450 */ 160, 22, 23, 23, 164, 119, 120, 172, 173, 172, - /* 460 */ 173, 140, 84, 85, 86, 87, 88, 89, 90, 91, - /* 470 */ 92, 93, 94, 43, 44, 45, 46, 47, 48, 49, - /* 480 */ 50, 51, 52, 53, 54, 55, 56, 57, 99, 22, - /* 490 */ 23, 102, 103, 104, 194, 195, 0, 1, 2, 247, - /* 500 */ 248, 19, 113, 190, 191, 23, 206, 190, 191, 59, - /* 510 */ 225, 152, 83, 152, 84, 85, 86, 87, 88, 89, - /* 520 */ 90, 91, 92, 93, 94, 43, 44, 45, 46, 47, - /* 530 */ 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, - /* 540 */ 90, 181, 152, 108, 109, 110, 96, 97, 98, 115, - /* 550 */ 83, 117, 118, 19, 193, 152, 23, 152, 152, 26, - /* 560 */ 29, 152, 172, 173, 33, 152, 84, 85, 86, 87, - /* 570 */ 88, 89, 90, 91, 92, 93, 94, 43, 44, 45, - /* 580 */ 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, - /* 590 */ 56, 57, 22, 152, 16, 64, 193, 207, 152, 193, - /* 600 */ 12, 7, 8, 9, 152, 108, 109, 110, 19, 152, - /* 610 */ 164, 146, 147, 172, 173, 27, 163, 181, 84, 85, - /* 620 */ 86, 87, 88, 89, 90, 91, 92, 93, 94, 59, - /* 630 */ 42, 98, 43, 44, 45, 46, 47, 48, 49, 50, - /* 640 */ 51, 52, 53, 54, 55, 56, 57, 238, 22, 196, - /* 650 */ 62, 163, 82, 75, 152, 77, 152, 124, 88, 89, - /* 660 */ 72, 152, 137, 19, 139, 152, 96, 97, 24, 152, - /* 670 */ 152, 101, 138, 84, 85, 86, 87, 88, 89, 90, - /* 680 */ 91, 92, 93, 94, 196, 59, 19, 43, 44, 45, - /* 690 */ 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, - /* 700 */ 56, 57, 132, 133, 134, 152, 193, 219, 245, 246, - /* 710 */ 193, 152, 152, 46, 152, 19, 166, 167, 152, 217, - /* 720 */ 232, 217, 96, 97, 98, 237, 217, 138, 84, 85, - /* 730 */ 86, 87, 88, 89, 90, 91, 92, 93, 94, 43, - /* 740 */ 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, - /* 750 */ 54, 55, 56, 57, 79, 193, 238, 166, 167, 211, - /* 760 */ 212, 23, 23, 116, 26, 26, 195, 19, 121, 152, - /* 770 */ 217, 152, 152, 152, 107, 100, 217, 206, 163, 112, - /* 780 */ 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, - /* 790 */ 94, 43, 44, 45, 46, 47, 48, 49, 50, 51, - /* 800 */ 52, 53, 54, 55, 56, 57, 187, 187, 7, 8, - /* 810 */ 152, 196, 22, 132, 24, 134, 23, 23, 19, 26, - /* 820 */ 26, 23, 152, 23, 26, 23, 26, 59, 26, 163, - /* 830 */ 172, 173, 84, 85, 86, 87, 88, 89, 90, 91, - /* 840 */ 92, 93, 94, 44, 45, 46, 47, 48, 49, 50, - /* 850 */ 51, 52, 53, 54, 55, 56, 57, 152, 26, 238, - /* 860 */ 152, 23, 196, 101, 26, 97, 100, 101, 19, 19, - /* 870 */ 23, 59, 152, 26, 112, 152, 23, 172, 173, 26, - /* 880 */ 172, 173, 19, 84, 85, 86, 87, 88, 89, 90, - /* 890 */ 91, 92, 93, 94, 45, 46, 47, 48, 49, 50, - /* 900 */ 51, 52, 53, 54, 55, 56, 57, 19, 20, 97, - /* 910 */ 22, 23, 207, 163, 23, 163, 132, 26, 134, 23, - /* 920 */ 213, 152, 26, 59, 36, 152, 22, 152, 19, 20, - /* 930 */ 98, 22, 152, 84, 85, 86, 87, 88, 89, 90, - /* 940 */ 91, 92, 93, 94, 94, 36, 196, 59, 196, 99, - /* 950 */ 100, 101, 102, 103, 104, 105, 124, 59, 70, 96, - /* 960 */ 163, 97, 112, 59, 181, 152, 152, 79, 59, 71, - /* 970 */ 82, 19, 26, 152, 152, 152, 88, 89, 152, 70, - /* 980 */ 22, 152, 163, 95, 96, 97, 98, 152, 79, 101, - /* 990 */ 22, 82, 152, 196, 96, 97, 98, 88, 89, 19, - /* 1000 */ 20, 97, 22, 163, 95, 96, 97, 98, 152, 22, - /* 1010 */ 101, 24, 172, 173, 152, 196, 36, 59, 22, 152, - /* 1020 */ 132, 133, 134, 135, 136, 24, 5, 59, 172, 173, - /* 1030 */ 152, 10, 11, 12, 13, 14, 196, 152, 17, 59, - /* 1040 */ 210, 132, 133, 134, 135, 136, 59, 207, 96, 22, - /* 1050 */ 70, 30, 106, 32, 96, 97, 98, 172, 173, 152, - /* 1060 */ 59, 40, 82, 152, 96, 97, 98, 152, 88, 89, - /* 1070 */ 90, 186, 59, 22, 191, 95, 96, 97, 98, 172, - /* 1080 */ 173, 101, 19, 20, 97, 22, 59, 152, 152, 152, - /* 1090 */ 69, 59, 152, 186, 152, 152, 152, 76, 97, 36, - /* 1100 */ 79, 80, 19, 20, 53, 22, 152, 172, 173, 96, - /* 1110 */ 97, 98, 132, 133, 134, 135, 136, 35, 122, 36, - /* 1120 */ 234, 186, 59, 96, 97, 98, 172, 173, 96, 97, - /* 1130 */ 98, 152, 233, 70, 152, 114, 152, 124, 210, 210, - /* 1140 */ 186, 210, 59, 198, 197, 82, 214, 65, 150, 152, - /* 1150 */ 201, 88, 89, 70, 201, 73, 124, 239, 95, 96, - /* 1160 */ 97, 98, 141, 239, 101, 82, 169, 170, 176, 152, - /* 1170 */ 152, 88, 89, 21, 54, 55, 56, 57, 95, 96, - /* 1180 */ 97, 98, 164, 214, 101, 214, 169, 170, 163, 184, - /* 1190 */ 180, 175, 227, 111, 175, 132, 133, 134, 135, 136, - /* 1200 */ 200, 183, 152, 185, 84, 85, 86, 87, 88, 89, - /* 1210 */ 90, 91, 92, 93, 94, 132, 133, 134, 135, 136, - /* 1220 */ 12, 196, 172, 173, 175, 152, 198, 230, 152, 155, - /* 1230 */ 78, 152, 243, 152, 60, 27, 152, 159, 152, 159, - /* 1240 */ 152, 122, 38, 152, 219, 172, 173, 230, 172, 173, - /* 1250 */ 42, 172, 173, 172, 173, 103, 172, 173, 172, 173, - /* 1260 */ 172, 173, 237, 172, 173, 152, 240, 152, 159, 152, - /* 1270 */ 62, 240, 22, 220, 152, 43, 152, 130, 152, 189, - /* 1280 */ 152, 18, 152, 18, 192, 172, 173, 172, 173, 172, - /* 1290 */ 173, 192, 140, 152, 172, 173, 172, 173, 172, 173, - /* 1300 */ 172, 173, 172, 173, 201, 152, 192, 159, 152, 158, - /* 1310 */ 192, 152, 201, 172, 173, 152, 220, 152, 189, 152, - /* 1320 */ 189, 159, 152, 137, 152, 172, 173, 152, 172, 173, - /* 1330 */ 152, 172, 173, 152, 201, 172, 173, 172, 173, 172, - /* 1340 */ 173, 152, 172, 173, 172, 173, 152, 172, 173, 152, - /* 1350 */ 172, 173, 152, 172, 173, 152, 90, 152, 61, 152, - /* 1360 */ 158, 172, 173, 152, 158, 152, 172, 173, 152, 172, - /* 1370 */ 173, 152, 172, 173, 236, 172, 173, 172, 173, 172, - /* 1380 */ 173, 235, 116, 172, 173, 172, 173, 121, 172, 173, - /* 1390 */ 159, 172, 173, 159, 22, 177, 159, 158, 177, 159, - /* 1400 */ 158, 107, 174, 174, 174, 63, 182, 106, 182, 174, - /* 1410 */ 177, 125, 176, 107, 216, 174, 215, 174, 174, 159, - /* 1420 */ 22, 159, 137, 224, 177, 216, 216, 215, 94, 215, - /* 1430 */ 177, 216, 215, 129, 126, 128, 127, 25, 162, 26, - /* 1440 */ 161, 13, 153, 205, 153, 6, 226, 151, 202, 204, - /* 1450 */ 201, 229, 229, 151, 203, 165, 151, 165, 178, 178, - /* 1460 */ 165, 4, 3, 22, 142, 15, 81, 16, 23, 23, - /* 1470 */ 120, 131, 111, 20, 249, 123, 249, 16, 125, 1, - /* 1480 */ 123, 111, 131, 53, 53, 53, 53, 96, 34, 122, - /* 1490 */ 1, 5, 22, 107, 246, 140, 67, 26, 74, 41, - /* 1500 */ 107, 67, 20, 24, 19, 105, 112, 23, 66, 22, - /* 1510 */ 22, 28, 22, 22, 66, 22, 22, 37, 66, 23, - /* 1520 */ 23, 23, 116, 23, 22, 26, 122, 26, 23, 23, - /* 1530 */ 22, 96, 124, 26, 23, 26, 23, 34, 34, 23, - /* 1540 */ 23, 26, 23, 22, 34, 11, 23, 22, 24, 122, - /* 1550 */ 23, 22, 26, 22, 24, 23, 23, 15, 23, 22, - /* 1560 */ 122, 23, 122, 1, 251, 122, + /* 0 */ 152, 144, 145, 146, 147, 152, 152, 172, 152, 180, + /* 10 */ 181, 152, 223, 224, 225, 180, 152, 164, 189, 19, + /* 20 */ 223, 224, 225, 168, 169, 170, 163, 173, 174, 173, + /* 30 */ 174, 31, 173, 174, 168, 169, 170, 173, 174, 39, + /* 40 */ 243, 191, 192, 43, 44, 45, 46, 47, 48, 49, + /* 50 */ 50, 51, 52, 53, 54, 55, 56, 57, 195, 196, + /* 60 */ 22, 23, 208, 209, 208, 209, 218, 208, 209, 176, + /* 70 */ 207, 19, 208, 209, 23, 212, 213, 26, 26, 152, + /* 80 */ 46, 47, 48, 49, 84, 85, 86, 87, 88, 89, + /* 90 */ 90, 91, 92, 93, 94, 43, 44, 45, 46, 47, + /* 100 */ 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, + /* 110 */ 90, 91, 92, 93, 94, 188, 223, 224, 225, 171, + /* 120 */ 68, 83, 152, 19, 84, 85, 86, 87, 88, 89, + /* 130 */ 90, 91, 92, 93, 94, 101, 84, 85, 86, 87, + /* 140 */ 88, 89, 90, 91, 92, 93, 94, 43, 44, 45, + /* 150 */ 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, + /* 160 */ 56, 57, 99, 94, 194, 102, 103, 104, 109, 110, + /* 170 */ 66, 223, 224, 225, 152, 19, 113, 22, 23, 152, + /* 180 */ 24, 26, 160, 1, 2, 59, 164, 173, 84, 85, + /* 190 */ 86, 87, 88, 89, 90, 91, 92, 93, 94, 43, + /* 200 */ 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, + /* 210 */ 54, 55, 56, 57, 244, 88, 89, 90, 91, 92, + /* 220 */ 93, 94, 96, 97, 98, 99, 196, 19, 102, 103, + /* 230 */ 104, 23, 88, 89, 173, 59, 163, 207, 83, 113, + /* 240 */ 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, + /* 250 */ 94, 43, 44, 45, 46, 47, 48, 49, 50, 51, + /* 260 */ 52, 53, 54, 55, 56, 57, 90, 240, 195, 196, + /* 270 */ 171, 82, 96, 97, 98, 152, 132, 176, 134, 19, + /* 280 */ 207, 200, 72, 23, 93, 94, 97, 152, 173, 79, + /* 290 */ 101, 210, 84, 85, 86, 87, 88, 89, 90, 91, + /* 300 */ 92, 93, 94, 43, 44, 45, 46, 47, 48, 49, + /* 310 */ 50, 51, 52, 53, 54, 55, 56, 57, 108, 152, + /* 320 */ 152, 132, 133, 134, 223, 224, 225, 152, 186, 119, + /* 330 */ 120, 19, 197, 234, 31, 23, 26, 152, 239, 59, + /* 340 */ 173, 174, 39, 220, 84, 85, 86, 87, 88, 89, + /* 350 */ 90, 91, 92, 93, 94, 43, 44, 45, 46, 47, + /* 360 */ 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, + /* 370 */ 152, 22, 152, 16, 152, 208, 96, 97, 98, 194, + /* 380 */ 22, 23, 11, 19, 26, 79, 72, 23, 0, 1, + /* 390 */ 2, 173, 174, 173, 174, 220, 84, 85, 86, 87, + /* 400 */ 88, 89, 90, 91, 92, 93, 94, 43, 44, 45, + /* 410 */ 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, + /* 420 */ 56, 57, 108, 109, 110, 119, 120, 152, 208, 119, + /* 430 */ 120, 137, 75, 139, 77, 19, 152, 88, 89, 23, + /* 440 */ 115, 83, 117, 118, 163, 227, 163, 152, 84, 85, + /* 450 */ 86, 87, 88, 89, 90, 91, 92, 93, 94, 43, + /* 460 */ 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, + /* 470 */ 54, 55, 56, 57, 195, 196, 195, 196, 195, 196, + /* 480 */ 109, 110, 195, 196, 22, 23, 207, 19, 207, 152, + /* 490 */ 207, 108, 109, 110, 207, 163, 22, 140, 24, 59, + /* 500 */ 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, + /* 510 */ 94, 43, 44, 45, 46, 47, 48, 49, 50, 51, + /* 520 */ 52, 53, 54, 55, 56, 57, 152, 195, 196, 152, + /* 530 */ 16, 7, 8, 9, 197, 240, 96, 97, 98, 207, + /* 540 */ 249, 250, 19, 152, 22, 83, 26, 173, 174, 152, + /* 550 */ 173, 174, 84, 85, 86, 87, 88, 89, 90, 91, + /* 560 */ 92, 93, 94, 59, 124, 152, 43, 44, 45, 46, + /* 570 */ 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, + /* 580 */ 57, 59, 169, 170, 157, 194, 82, 191, 192, 75, + /* 590 */ 152, 77, 108, 109, 110, 26, 152, 19, 152, 152, + /* 600 */ 96, 97, 24, 152, 152, 101, 138, 84, 85, 86, + /* 610 */ 87, 88, 89, 90, 91, 92, 93, 94, 96, 97, + /* 620 */ 98, 43, 44, 45, 46, 47, 48, 49, 50, 51, + /* 630 */ 52, 53, 54, 55, 56, 57, 132, 133, 134, 188, + /* 640 */ 194, 197, 152, 123, 197, 232, 194, 152, 182, 19, + /* 650 */ 119, 120, 152, 152, 152, 152, 218, 230, 152, 163, + /* 660 */ 233, 138, 84, 85, 86, 87, 88, 89, 90, 91, + /* 670 */ 92, 93, 94, 43, 44, 45, 46, 47, 48, 49, + /* 680 */ 50, 51, 52, 53, 54, 55, 56, 57, 152, 152, + /* 690 */ 23, 195, 196, 26, 194, 194, 194, 146, 147, 130, + /* 700 */ 194, 19, 46, 207, 59, 29, 166, 167, 218, 33, + /* 710 */ 173, 174, 26, 218, 84, 85, 86, 87, 88, 89, + /* 720 */ 90, 91, 92, 93, 94, 43, 44, 45, 46, 47, + /* 730 */ 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, + /* 740 */ 64, 171, 97, 240, 116, 166, 167, 212, 213, 121, + /* 750 */ 23, 152, 19, 26, 218, 247, 248, 23, 23, 152, + /* 760 */ 26, 26, 22, 107, 163, 98, 84, 85, 86, 87, + /* 770 */ 88, 89, 90, 91, 92, 93, 94, 44, 45, 46, + /* 780 */ 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, + /* 790 */ 57, 124, 106, 53, 100, 101, 195, 196, 152, 152, + /* 800 */ 23, 23, 19, 26, 26, 19, 152, 23, 207, 239, + /* 810 */ 26, 23, 152, 163, 26, 169, 170, 84, 85, 86, + /* 820 */ 87, 88, 89, 90, 91, 92, 93, 94, 45, 46, + /* 830 */ 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, + /* 840 */ 57, 19, 20, 101, 22, 195, 196, 22, 19, 24, + /* 850 */ 163, 19, 7, 8, 112, 59, 23, 207, 36, 26, + /* 860 */ 23, 152, 59, 26, 21, 59, 152, 84, 85, 86, + /* 870 */ 87, 88, 89, 90, 91, 92, 93, 94, 232, 221, + /* 880 */ 94, 59, 195, 196, 59, 99, 100, 101, 102, 103, + /* 890 */ 104, 105, 70, 97, 207, 59, 19, 20, 112, 22, + /* 900 */ 97, 79, 152, 97, 82, 152, 152, 71, 221, 90, + /* 910 */ 88, 89, 23, 36, 12, 26, 163, 95, 96, 97, + /* 920 */ 98, 78, 97, 101, 152, 96, 173, 174, 96, 27, + /* 930 */ 182, 22, 96, 97, 98, 116, 59, 148, 149, 152, + /* 940 */ 121, 119, 120, 154, 42, 156, 103, 70, 195, 196, + /* 950 */ 22, 59, 163, 152, 132, 133, 134, 135, 136, 82, + /* 960 */ 207, 208, 209, 71, 62, 88, 89, 90, 59, 152, + /* 970 */ 152, 12, 95, 96, 97, 98, 19, 20, 101, 22, + /* 980 */ 22, 182, 152, 140, 195, 196, 27, 59, 96, 97, + /* 990 */ 98, 59, 132, 36, 134, 22, 207, 19, 20, 24, + /* 1000 */ 22, 42, 152, 173, 174, 96, 97, 98, 219, 132, + /* 1010 */ 133, 134, 135, 136, 36, 152, 59, 187, 132, 152, + /* 1020 */ 134, 62, 152, 152, 96, 97, 98, 70, 96, 97, + /* 1030 */ 98, 72, 59, 152, 59, 246, 26, 59, 214, 82, + /* 1040 */ 152, 192, 152, 173, 174, 88, 89, 79, 70, 152, + /* 1050 */ 152, 19, 95, 96, 97, 98, 124, 187, 101, 23, + /* 1060 */ 82, 164, 26, 173, 174, 152, 88, 89, 100, 96, + /* 1070 */ 97, 98, 97, 95, 96, 97, 98, 187, 46, 101, + /* 1080 */ 122, 184, 152, 186, 211, 152, 152, 119, 120, 132, + /* 1090 */ 133, 134, 135, 136, 152, 5, 22, 152, 152, 35, + /* 1100 */ 10, 11, 12, 13, 14, 152, 152, 17, 98, 235, + /* 1110 */ 132, 133, 134, 135, 136, 54, 55, 56, 57, 58, + /* 1120 */ 30, 152, 32, 152, 152, 198, 173, 174, 152, 65, + /* 1130 */ 40, 152, 152, 59, 124, 152, 236, 73, 199, 107, + /* 1140 */ 187, 171, 173, 174, 112, 84, 85, 86, 87, 88, + /* 1150 */ 89, 90, 91, 92, 93, 94, 173, 174, 152, 69, + /* 1160 */ 152, 211, 54, 55, 56, 57, 76, 152, 150, 79, + /* 1170 */ 80, 97, 211, 211, 211, 111, 59, 241, 241, 173, + /* 1180 */ 174, 173, 174, 202, 202, 185, 177, 176, 173, 174, + /* 1190 */ 176, 201, 84, 85, 86, 87, 88, 89, 90, 91, + /* 1200 */ 92, 93, 94, 215, 114, 88, 89, 152, 215, 119, + /* 1210 */ 120, 152, 181, 96, 97, 98, 176, 100, 215, 152, + /* 1220 */ 229, 152, 163, 152, 107, 199, 109, 155, 173, 174, + /* 1230 */ 245, 141, 173, 174, 60, 159, 152, 122, 159, 242, + /* 1240 */ 173, 174, 173, 174, 173, 174, 38, 242, 152, 132, + /* 1250 */ 159, 134, 152, 22, 195, 196, 152, 173, 174, 222, + /* 1260 */ 43, 130, 202, 152, 18, 152, 207, 208, 152, 173, + /* 1270 */ 174, 152, 190, 173, 174, 152, 193, 173, 174, 152, + /* 1280 */ 193, 193, 152, 159, 173, 174, 173, 174, 152, 173, + /* 1290 */ 174, 193, 173, 174, 18, 152, 173, 174, 152, 158, + /* 1300 */ 173, 174, 152, 173, 174, 152, 159, 152, 202, 173, + /* 1310 */ 174, 152, 190, 152, 222, 152, 173, 174, 152, 173, + /* 1320 */ 174, 137, 152, 173, 174, 190, 173, 174, 173, 174, + /* 1330 */ 202, 158, 173, 174, 173, 174, 173, 174, 61, 173, + /* 1340 */ 174, 152, 237, 173, 174, 152, 159, 152, 238, 152, + /* 1350 */ 158, 152, 22, 152, 178, 152, 158, 152, 158, 152, + /* 1360 */ 178, 159, 173, 174, 152, 159, 173, 174, 173, 174, + /* 1370 */ 173, 174, 173, 174, 173, 174, 173, 174, 173, 174, + /* 1380 */ 173, 174, 152, 63, 152, 173, 174, 107, 175, 175, + /* 1390 */ 175, 106, 183, 175, 178, 175, 177, 175, 175, 178, + /* 1400 */ 94, 107, 231, 173, 174, 173, 174, 183, 231, 125, + /* 1410 */ 216, 178, 159, 217, 22, 159, 226, 129, 137, 228, + /* 1420 */ 128, 217, 126, 25, 127, 162, 216, 26, 217, 161, + /* 1430 */ 13, 153, 153, 206, 205, 6, 251, 202, 204, 203, + /* 1440 */ 151, 216, 151, 217, 216, 171, 151, 165, 179, 179, + /* 1450 */ 4, 3, 22, 142, 171, 165, 15, 171, 171, 81, + /* 1460 */ 16, 23, 23, 120, 171, 131, 165, 111, 123, 171, + /* 1470 */ 171, 171, 20, 125, 16, 1, 123, 131, 53, 53, + /* 1480 */ 53, 53, 111, 96, 34, 122, 248, 1, 251, 5, + /* 1490 */ 22, 107, 140, 26, 74, 41, 122, 107, 67, 67, + /* 1500 */ 24, 20, 19, 112, 105, 23, 66, 22, 66, 22, + /* 1510 */ 22, 22, 37, 22, 22, 66, 23, 23, 28, 23, + /* 1520 */ 23, 26, 24, 23, 22, 24, 122, 23, 23, 96, + /* 1530 */ 22, 124, 26, 34, 23, 26, 23, 34, 23, 23, + /* 1540 */ 23, 34, 23, 22, 26, 11, 22, 22, 26, 23, + /* 1550 */ 23, 22, 116, 23, 22, 15, 122, 122, 23, 122, + /* 1560 */ 1, 252, 252, 252, 252, 122, 252, 252, 252, 252, + /* 1570 */ 252, 252, 252, 252, 252, 252, 252, 252, 252, 252, + /* 1580 */ 252, 252, 252, 252, 252, 252, 252, 252, 252, 252, + /* 1590 */ 252, 252, 252, 252, 252, 252, 252, 252, 252, 252, + /* 1600 */ 252, 252, 252, 252, 252, 252, 252, 252, 252, 252, + /* 1610 */ 252, 252, 252, 252, 252, 252, 252, 252, 252, 252, + /* 1620 */ 252, 252, 252, 252, 252, 252, 252, 252, 252, 252, + /* 1630 */ 252, 252, 252, 252, 252, 252, 252, 252, 252, 252, + /* 1640 */ 252, 252, 252, 252, 252, 252, 252, 252, 252, 252, + /* 1650 */ 252, 252, 252, 252, 252, 252, 252, 252, 252, 252, + /* 1660 */ 252, 252, 252, 252, 252, 252, 252, 252, 252, 252, + /* 1670 */ 252, 252, 252, 252, 252, 252, 252, 252, 252, 252, + /* 1680 */ 252, 252, 252, 252, 252, 252, 252, 252, 252, 252, + /* 1690 */ 252, 252, 252, 252, 252, 252, 252, 252, 252, 252, + /* 1700 */ 252, 252, 252, 252, 252, 252, 252, 252, 252, }; -#define YY_SHIFT_USE_DFLT (1566) -#define YY_SHIFT_COUNT (454) -#define YY_SHIFT_MIN (-84) -#define YY_SHIFT_MAX (1562) -static const short yy_shift_ofst[] = { - /* 0 */ 355, 888, 1021, 909, 1063, 1063, 1063, 1063, 20, -19, - /* 10 */ 66, 66, 170, 1063, 1063, 1063, 1063, 1063, 1063, 1063, - /* 20 */ -7, -7, 36, 73, 69, 27, 118, 222, 274, 326, - /* 30 */ 378, 430, 482, 534, 589, 644, 696, 696, 696, 696, - /* 40 */ 696, 696, 696, 696, 696, 696, 696, 696, 696, 696, - /* 50 */ 696, 696, 696, 748, 696, 799, 849, 849, 980, 1063, - /* 60 */ 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, - /* 70 */ 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, - /* 80 */ 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, - /* 90 */ 1083, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, 1063, - /* 100 */ 1063, 1063, 1063, 1063, -43, 1120, 1120, 1120, 1120, 1120, - /* 110 */ -31, -72, -84, 242, 1152, 667, 210, 210, 242, 309, - /* 120 */ 336, -55, 1566, 1566, 1566, 850, 850, 850, 626, 626, - /* 130 */ 588, 588, 898, 221, 264, 242, 242, 242, 242, 242, - /* 140 */ 242, 242, 242, 242, 242, 242, 242, 242, 242, 242, - /* 150 */ 242, 242, 242, 242, 242, 496, 675, 289, 289, 336, - /* 160 */ 0, 0, 0, 0, 0, 0, 1566, 1566, 1566, 570, - /* 170 */ 98, 98, 958, 389, 450, 968, 1013, 1032, 1027, 242, - /* 180 */ 242, 242, 242, 242, 242, 242, 242, 242, 242, 242, - /* 190 */ 242, 242, 242, 242, 242, 1082, 1082, 1082, 242, 242, - /* 200 */ 533, 242, 242, 242, 987, 242, 242, 1208, 242, 242, - /* 210 */ 242, 242, 242, 242, 242, 242, 242, 242, 435, 531, - /* 220 */ 1001, 1001, 1001, 832, 434, 1266, 594, 58, 863, 863, - /* 230 */ 952, 58, 952, 946, 738, 239, 145, 863, 525, 145, - /* 240 */ 145, 315, 647, 790, 1174, 1119, 1119, 1204, 1204, 1119, - /* 250 */ 1250, 1232, 1147, 1263, 1263, 1263, 1263, 1119, 1265, 1147, - /* 260 */ 1250, 1232, 1232, 1147, 1119, 1265, 1186, 1297, 1119, 1119, - /* 270 */ 1265, 1372, 1119, 1265, 1119, 1265, 1372, 1294, 1294, 1294, - /* 280 */ 1342, 1372, 1294, 1301, 1294, 1342, 1294, 1294, 1286, 1306, - /* 290 */ 1286, 1306, 1286, 1306, 1286, 1306, 1119, 1398, 1119, 1285, - /* 300 */ 1372, 1334, 1334, 1372, 1304, 1308, 1307, 1309, 1147, 1412, - /* 310 */ 1413, 1428, 1428, 1439, 1439, 1439, 1566, 1566, 1566, 1566, - /* 320 */ 1566, 1566, 1566, 1566, 204, 321, 429, 467, 578, 497, - /* 330 */ 904, 739, 1051, 793, 794, 798, 800, 802, 838, 768, - /* 340 */ 766, 801, 762, 847, 853, 812, 891, 681, 784, 896, - /* 350 */ 864, 996, 1457, 1459, 1441, 1322, 1450, 1385, 1451, 1445, - /* 360 */ 1446, 1350, 1340, 1361, 1352, 1453, 1353, 1461, 1478, 1357, - /* 370 */ 1351, 1430, 1431, 1432, 1433, 1370, 1391, 1454, 1367, 1489, - /* 380 */ 1486, 1470, 1386, 1355, 1429, 1471, 1434, 1424, 1458, 1393, - /* 390 */ 1479, 1482, 1485, 1394, 1400, 1487, 1442, 1488, 1490, 1484, - /* 400 */ 1491, 1448, 1483, 1493, 1452, 1480, 1496, 1497, 1498, 1499, - /* 410 */ 1406, 1494, 1500, 1502, 1501, 1404, 1505, 1506, 1435, 1503, - /* 420 */ 1508, 1408, 1507, 1504, 1509, 1510, 1511, 1507, 1513, 1516, - /* 430 */ 1517, 1515, 1519, 1521, 1534, 1523, 1525, 1524, 1526, 1527, - /* 440 */ 1529, 1530, 1526, 1532, 1531, 1533, 1535, 1537, 1427, 1438, - /* 450 */ 1440, 1443, 1538, 1542, 1562, +#define YY_SHIFT_COUNT (471) +#define YY_SHIFT_MIN (0) +#define YY_SHIFT_MAX (1559) +static const unsigned short int yy_shift_ofst[] = { + /* 0 */ 182, 1090, 822, 822, 306, 957, 957, 957, 957, 210, + /* 10 */ 0, 0, 104, 630, 957, 957, 957, 957, 957, 957, + /* 20 */ 957, 1117, 1117, 126, 968, 306, 306, 306, 306, 306, + /* 30 */ 306, 52, 156, 208, 260, 312, 364, 416, 468, 523, + /* 40 */ 578, 630, 630, 630, 630, 630, 630, 630, 630, 630, + /* 50 */ 630, 630, 630, 630, 630, 630, 630, 630, 682, 630, + /* 60 */ 733, 783, 783, 877, 957, 957, 957, 957, 957, 957, + /* 70 */ 957, 957, 957, 957, 957, 957, 957, 957, 957, 957, + /* 80 */ 957, 957, 957, 957, 957, 957, 957, 957, 957, 957, + /* 90 */ 957, 957, 957, 957, 957, 978, 957, 957, 957, 957, + /* 100 */ 957, 957, 957, 957, 957, 957, 957, 957, 957, 1061, + /* 110 */ 1108, 1108, 1108, 1108, 1108, 40, 127, 20, 280, 843, + /* 120 */ 1032, 144, 144, 280, 310, 310, 310, 310, 59, 191, + /* 130 */ 69, 1566, 1566, 1566, 786, 786, 786, 522, 836, 522, + /* 140 */ 959, 959, 892, 155, 358, 280, 280, 280, 280, 280, + /* 150 */ 280, 280, 280, 280, 280, 280, 280, 280, 280, 280, + /* 160 */ 280, 280, 280, 280, 280, 280, 371, 388, 645, 645, + /* 170 */ 531, 1566, 1566, 1566, 504, 189, 189, 909, 63, 176, + /* 180 */ 928, 440, 932, 973, 280, 280, 280, 280, 280, 314, + /* 190 */ 280, 280, 280, 280, 280, 280, 280, 280, 280, 280, + /* 200 */ 280, 280, 1064, 1064, 1064, 280, 280, 280, 280, 667, + /* 210 */ 280, 280, 280, 825, 280, 280, 902, 280, 280, 280, + /* 220 */ 280, 280, 280, 280, 280, 383, 676, 325, 975, 975, + /* 230 */ 975, 975, 1010, 325, 325, 819, 349, 524, 569, 829, + /* 240 */ 829, 832, 569, 832, 686, 51, 656, 303, 303, 303, + /* 250 */ 829, 294, 520, 628, 474, 1174, 1115, 1115, 1208, 1208, + /* 260 */ 1115, 1231, 1217, 1131, 1246, 1246, 1246, 1246, 1115, 1276, + /* 270 */ 1131, 1231, 1217, 1217, 1131, 1115, 1276, 1184, 1277, 1115, + /* 280 */ 1276, 1330, 1115, 1276, 1115, 1276, 1330, 1280, 1280, 1280, + /* 290 */ 1320, 1330, 1280, 1285, 1280, 1320, 1280, 1280, 1330, 1306, + /* 300 */ 1306, 1330, 1284, 1294, 1284, 1294, 1284, 1294, 1284, 1294, + /* 310 */ 1115, 1392, 1115, 1281, 1288, 1296, 1292, 1297, 1131, 1398, + /* 320 */ 1401, 1417, 1417, 1429, 1429, 1429, 1566, 1566, 1566, 1566, + /* 330 */ 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, 1566, + /* 340 */ 1566, 1566, 34, 357, 38, 462, 514, 484, 1074, 727, + /* 350 */ 740, 734, 735, 777, 778, 784, 788, 803, 694, 845, + /* 360 */ 742, 796, 833, 837, 889, 860, 886, 1036, 806, 958, + /* 370 */ 1446, 1448, 1430, 1311, 1441, 1378, 1444, 1438, 1439, 1343, + /* 380 */ 1334, 1356, 1345, 1452, 1348, 1458, 1474, 1353, 1346, 1425, + /* 390 */ 1426, 1427, 1428, 1371, 1387, 1450, 1363, 1486, 1484, 1468, + /* 400 */ 1384, 1352, 1431, 1467, 1432, 1420, 1454, 1374, 1390, 1476, + /* 410 */ 1481, 1483, 1391, 1399, 1485, 1440, 1487, 1488, 1482, 1489, + /* 420 */ 1442, 1490, 1491, 1449, 1475, 1493, 1494, 1496, 1495, 1497, + /* 430 */ 1492, 1498, 1500, 1502, 1501, 1404, 1504, 1505, 1433, 1499, + /* 440 */ 1508, 1407, 1506, 1503, 1509, 1507, 1511, 1513, 1515, 1506, + /* 450 */ 1516, 1517, 1518, 1519, 1521, 1534, 1524, 1525, 1526, 1527, + /* 460 */ 1529, 1530, 1532, 1522, 1436, 1434, 1435, 1437, 1443, 1535, + /* 470 */ 1540, 1559, }; -#define YY_REDUCE_USE_DFLT (-144) -#define YY_REDUCE_COUNT (323) -#define YY_REDUCE_MIN (-143) -#define YY_REDUCE_MAX (1305) +#define YY_REDUCE_COUNT (341) +#define YY_REDUCE_MIN (-211) +#define YY_REDUCE_MAX (1301) static const short yy_reduce_ofst[] = { - /* 0 */ -143, -65, 140, 840, 76, 180, 182, 233, 488, -25, - /* 10 */ 12, 16, 59, 885, 907, 935, 390, 705, 954, 285, - /* 20 */ 997, 1017, 1018, -118, 1025, 139, 171, 171, 171, 171, - /* 30 */ 171, 171, 171, 171, 171, 171, 171, 171, 171, 171, - /* 40 */ 171, 171, 171, 171, 171, 171, 171, 171, 171, 171, - /* 50 */ 171, 171, 171, 171, 171, 171, 171, 171, -69, 287, - /* 60 */ 441, 658, 708, 856, 1050, 1073, 1076, 1079, 1081, 1084, - /* 70 */ 1086, 1088, 1091, 1113, 1115, 1117, 1122, 1124, 1126, 1128, - /* 80 */ 1130, 1141, 1153, 1156, 1159, 1163, 1165, 1167, 1170, 1172, - /* 90 */ 1175, 1178, 1181, 1189, 1194, 1197, 1200, 1203, 1205, 1207, - /* 100 */ 1211, 1213, 1216, 1219, 171, 171, 171, 171, 171, 171, - /* 110 */ 171, 171, 171, 49, 176, 220, 275, 278, 290, 171, - /* 120 */ 300, 171, 171, 171, 171, -85, -85, -85, -28, 77, - /* 130 */ 313, 317, -56, 252, 252, 446, -129, 243, 361, 403, - /* 140 */ 406, 513, 517, 409, 502, 518, 504, 509, 621, 553, - /* 150 */ 562, 619, 559, 93, 620, 465, 453, 550, 591, 571, - /* 160 */ 615, 666, 750, 752, 797, 819, 463, 548, -73, 28, - /* 170 */ 68, 120, 257, 206, 359, 405, 413, 452, 457, 560, - /* 180 */ 566, 617, 670, 720, 723, 769, 773, 775, 780, 813, - /* 190 */ 814, 821, 822, 823, 826, 360, 436, 783, 829, 835, - /* 200 */ 707, 862, 867, 878, 830, 911, 915, 883, 936, 937, - /* 210 */ 940, 359, 942, 943, 944, 979, 982, 984, 886, 899, - /* 220 */ 928, 929, 931, 707, 947, 945, 998, 949, 932, 969, - /* 230 */ 918, 953, 924, 992, 1005, 1010, 1016, 971, 965, 1019, - /* 240 */ 1049, 1000, 1028, 1074, 989, 1078, 1080, 1026, 1031, 1109, - /* 250 */ 1053, 1090, 1103, 1092, 1099, 1114, 1118, 1148, 1151, 1111, - /* 260 */ 1096, 1129, 1131, 1133, 1162, 1202, 1138, 1146, 1231, 1234, - /* 270 */ 1206, 1218, 1237, 1239, 1240, 1242, 1221, 1228, 1229, 1230, - /* 280 */ 1224, 1233, 1235, 1236, 1241, 1226, 1243, 1244, 1198, 1201, - /* 290 */ 1209, 1212, 1210, 1214, 1215, 1217, 1260, 1199, 1262, 1220, - /* 300 */ 1247, 1222, 1223, 1253, 1238, 1245, 1251, 1246, 1249, 1276, - /* 310 */ 1279, 1289, 1291, 1296, 1302, 1305, 1225, 1227, 1248, 1290, - /* 320 */ 1292, 1280, 1281, 1295, + /* 0 */ -143, 789, 753, 1059, -137, -146, -144, -141, -136, 687, + /* 10 */ -107, 101, -203, -52, 830, 870, 890, 167, 953, 218, + /* 20 */ 220, 413, 646, 897, 73, 281, 283, 332, 496, 601, + /* 30 */ 650, -211, -211, -211, -211, -211, -211, -211, -211, -211, + /* 40 */ -211, -211, -211, -211, -211, -211, -211, -211, -211, -211, + /* 50 */ -211, -211, -211, -211, -211, -211, -211, -211, -211, -211, + /* 60 */ -211, -211, -211, 374, 377, 537, 969, 983, 1006, 1008, + /* 70 */ 1015, 1055, 1067, 1069, 1071, 1084, 1096, 1100, 1104, 1111, + /* 80 */ 1113, 1116, 1119, 1123, 1127, 1130, 1136, 1143, 1146, 1150, + /* 90 */ 1153, 1155, 1159, 1161, 1163, 1166, 1170, 1189, 1193, 1195, + /* 100 */ 1197, 1199, 1201, 1203, 1205, 1207, 1212, 1230, 1232, -211, + /* 110 */ -211, -211, -211, -211, -211, -211, -211, -211, -30, 427, + /* 120 */ -171, -145, -134, 22, 279, 287, 279, 287, 99, -211, + /* 130 */ -211, -211, -211, -211, -165, -165, -165, 123, 135, 175, + /* 140 */ -150, 396, 337, 291, 291, -147, 185, 391, 446, 444, + /* 150 */ 452, 500, 501, 502, 27, -152, 295, 438, 490, 503, + /* 160 */ 495, 506, -73, 447, 451, 536, 570, 551, 540, 579, + /* 170 */ 30, 508, 535, 81, 14, 61, 115, 168, 142, 222, + /* 180 */ 275, 284, 397, 599, 607, 647, 654, 660, 709, 658, + /* 190 */ 714, 750, 754, 772, 787, 801, 817, 818, 850, 863, + /* 200 */ 867, 871, 466, 748, 799, 881, 888, 898, 913, 824, + /* 210 */ 930, 933, 934, 873, 942, 945, 849, 946, 222, 954, + /* 220 */ 971, 972, 976, 979, 980, 900, 874, 927, 950, 961, + /* 230 */ 962, 963, 824, 927, 927, 939, 970, 1018, 981, 988, + /* 240 */ 993, 936, 982, 937, 1009, 1000, 1031, 1011, 1014, 1040, + /* 250 */ 1003, 991, 990, 1026, 1072, 985, 1076, 1079, 997, 1005, + /* 260 */ 1091, 1037, 1082, 1060, 1083, 1087, 1088, 1098, 1124, 1141, + /* 270 */ 1106, 1092, 1122, 1135, 1128, 1147, 1173, 1110, 1105, 1187, + /* 280 */ 1192, 1176, 1202, 1198, 1206, 1200, 1182, 1213, 1214, 1215, + /* 290 */ 1209, 1216, 1218, 1219, 1220, 1224, 1222, 1223, 1221, 1171, + /* 300 */ 1177, 1233, 1196, 1194, 1204, 1210, 1211, 1225, 1226, 1228, + /* 310 */ 1253, 1190, 1256, 1191, 1227, 1229, 1234, 1236, 1235, 1263, + /* 320 */ 1268, 1278, 1279, 1289, 1291, 1295, 1185, 1237, 1238, 1282, + /* 330 */ 1274, 1283, 1286, 1287, 1290, 1269, 1270, 1293, 1298, 1299, + /* 340 */ 1300, 1301, }; static const YYACTIONTYPE yy_default[] = { - /* 0 */ 1270, 1260, 1260, 1260, 1193, 1193, 1193, 1193, 1260, 1088, - /* 10 */ 1117, 1117, 1244, 1322, 1322, 1322, 1322, 1322, 1322, 1192, - /* 20 */ 1322, 1322, 1322, 1322, 1260, 1092, 1123, 1322, 1322, 1322, - /* 30 */ 1322, 1194, 1195, 1322, 1322, 1322, 1243, 1245, 1133, 1132, - /* 40 */ 1131, 1130, 1226, 1104, 1128, 1121, 1125, 1194, 1188, 1189, - /* 50 */ 1187, 1191, 1195, 1322, 1124, 1158, 1172, 1157, 1322, 1322, - /* 60 */ 1322, 1322, 1322, 1322, 1322, 1322, 1322, 1322, 1322, 1322, - /* 70 */ 1322, 1322, 1322, 1322, 1322, 1322, 1322, 1322, 1322, 1322, - /* 80 */ 1322, 1322, 1322, 1322, 1322, 1322, 1322, 1322, 1322, 1322, - /* 90 */ 1322, 1322, 1322, 1322, 1322, 1322, 1322, 1322, 1322, 1322, - /* 100 */ 1322, 1322, 1322, 1322, 1166, 1171, 1178, 1170, 1167, 1160, - /* 110 */ 1159, 1161, 1162, 1322, 1011, 1059, 1322, 1322, 1322, 1163, - /* 120 */ 1322, 1164, 1175, 1174, 1173, 1251, 1278, 1277, 1322, 1322, - /* 130 */ 1322, 1322, 1322, 1322, 1322, 1322, 1322, 1322, 1322, 1322, - /* 140 */ 1322, 1322, 1322, 1322, 1322, 1322, 1322, 1322, 1322, 1322, - /* 150 */ 1322, 1322, 1322, 1322, 1322, 1270, 1260, 1017, 1017, 1322, - /* 160 */ 1260, 1260, 1260, 1260, 1260, 1260, 1256, 1092, 1083, 1322, - /* 170 */ 1322, 1322, 1322, 1322, 1322, 1322, 1322, 1322, 1322, 1322, - /* 180 */ 1248, 1246, 1322, 1208, 1322, 1322, 1322, 1322, 1322, 1322, - /* 190 */ 1322, 1322, 1322, 1322, 1322, 1322, 1322, 1322, 1322, 1322, - /* 200 */ 1322, 1322, 1322, 1322, 1088, 1322, 1322, 1322, 1322, 1322, - /* 210 */ 1322, 1322, 1322, 1322, 1322, 1322, 1322, 1272, 1322, 1221, - /* 220 */ 1088, 1088, 1088, 1090, 1072, 1082, 997, 1127, 1106, 1106, - /* 230 */ 1311, 1127, 1311, 1034, 1292, 1031, 1117, 1106, 1190, 1117, - /* 240 */ 1117, 1089, 1082, 1322, 1314, 1097, 1097, 1313, 1313, 1097, - /* 250 */ 1138, 1062, 1127, 1068, 1068, 1068, 1068, 1097, 1008, 1127, - /* 260 */ 1138, 1062, 1062, 1127, 1097, 1008, 1225, 1308, 1097, 1097, - /* 270 */ 1008, 1201, 1097, 1008, 1097, 1008, 1201, 1060, 1060, 1060, - /* 280 */ 1049, 1201, 1060, 1034, 1060, 1049, 1060, 1060, 1110, 1105, - /* 290 */ 1110, 1105, 1110, 1105, 1110, 1105, 1097, 1196, 1097, 1322, - /* 300 */ 1201, 1205, 1205, 1201, 1122, 1111, 1120, 1118, 1127, 1014, - /* 310 */ 1052, 1275, 1275, 1271, 1271, 1271, 1319, 1319, 1256, 1287, - /* 320 */ 1287, 1036, 1036, 1287, 1322, 1322, 1322, 1322, 1322, 1322, - /* 330 */ 1282, 1322, 1210, 1322, 1322, 1322, 1322, 1322, 1322, 1322, - /* 340 */ 1322, 1322, 1322, 1322, 1322, 1322, 1322, 1322, 1322, 1322, - /* 350 */ 1322, 1143, 1322, 993, 1253, 1322, 1322, 1252, 1322, 1322, - /* 360 */ 1322, 1322, 1322, 1322, 1322, 1322, 1322, 1322, 1322, 1322, - /* 370 */ 1322, 1322, 1322, 1322, 1322, 1322, 1322, 1322, 1310, 1322, - /* 380 */ 1322, 1322, 1322, 1322, 1322, 1224, 1223, 1322, 1322, 1322, - /* 390 */ 1322, 1322, 1322, 1322, 1322, 1322, 1322, 1322, 1322, 1322, - /* 400 */ 1322, 1322, 1322, 1322, 1322, 1322, 1322, 1322, 1322, 1322, - /* 410 */ 1074, 1322, 1322, 1322, 1296, 1322, 1322, 1322, 1322, 1322, - /* 420 */ 1322, 1322, 1119, 1322, 1112, 1322, 1322, 1301, 1322, 1322, - /* 430 */ 1322, 1322, 1322, 1322, 1322, 1322, 1322, 1322, 1262, 1322, - /* 440 */ 1322, 1322, 1261, 1322, 1322, 1322, 1322, 1322, 1145, 1322, - /* 450 */ 1144, 1148, 1322, 1002, 1322, + /* 0 */ 1297, 1349, 1221, 1014, 1119, 1221, 1221, 1221, 1221, 1014, + /* 10 */ 1145, 1145, 1272, 1045, 1014, 1014, 1014, 1014, 1014, 1220, + /* 20 */ 1014, 1014, 1014, 1014, 1014, 1014, 1014, 1014, 1014, 1014, + /* 30 */ 1014, 1151, 1014, 1014, 1014, 1014, 1222, 1223, 1014, 1014, + /* 40 */ 1014, 1271, 1273, 1161, 1160, 1159, 1158, 1254, 1132, 1156, + /* 50 */ 1149, 1153, 1216, 1217, 1215, 1219, 1222, 1223, 1014, 1152, + /* 60 */ 1186, 1200, 1185, 1014, 1014, 1014, 1014, 1014, 1014, 1014, + /* 70 */ 1014, 1014, 1014, 1014, 1014, 1014, 1014, 1014, 1014, 1014, + /* 80 */ 1014, 1014, 1014, 1014, 1014, 1014, 1014, 1014, 1014, 1014, + /* 90 */ 1014, 1014, 1014, 1014, 1014, 1014, 1014, 1014, 1014, 1014, + /* 100 */ 1014, 1014, 1014, 1014, 1014, 1014, 1014, 1014, 1014, 1194, + /* 110 */ 1199, 1206, 1198, 1195, 1188, 1187, 1189, 1190, 1014, 1035, + /* 120 */ 1084, 1014, 1014, 1014, 1289, 1288, 1014, 1014, 1045, 1191, + /* 130 */ 1192, 1203, 1202, 1201, 1279, 1305, 1304, 1014, 1014, 1014, + /* 140 */ 1014, 1014, 1014, 1014, 1014, 1014, 1014, 1014, 1014, 1014, + /* 150 */ 1014, 1014, 1014, 1014, 1014, 1014, 1014, 1014, 1014, 1014, + /* 160 */ 1014, 1014, 1014, 1014, 1014, 1014, 1045, 1297, 1041, 1041, + /* 170 */ 1014, 1284, 1119, 1110, 1014, 1014, 1014, 1014, 1014, 1014, + /* 180 */ 1014, 1014, 1014, 1014, 1014, 1276, 1274, 1014, 1236, 1014, + /* 190 */ 1014, 1014, 1014, 1014, 1014, 1014, 1014, 1014, 1014, 1014, + /* 200 */ 1014, 1014, 1014, 1014, 1014, 1014, 1014, 1014, 1014, 1014, + /* 210 */ 1014, 1014, 1014, 1115, 1014, 1014, 1014, 1014, 1014, 1014, + /* 220 */ 1014, 1014, 1014, 1014, 1299, 1014, 1249, 1098, 1115, 1115, + /* 230 */ 1115, 1115, 1117, 1099, 1097, 1109, 1045, 1021, 1155, 1134, + /* 240 */ 1134, 1338, 1155, 1338, 1059, 1319, 1056, 1145, 1145, 1145, + /* 250 */ 1134, 1218, 1116, 1109, 1014, 1341, 1124, 1124, 1340, 1340, + /* 260 */ 1124, 1166, 1087, 1155, 1093, 1093, 1093, 1093, 1124, 1032, + /* 270 */ 1155, 1166, 1087, 1087, 1155, 1124, 1032, 1253, 1335, 1124, + /* 280 */ 1032, 1229, 1124, 1032, 1124, 1032, 1229, 1085, 1085, 1085, + /* 290 */ 1074, 1229, 1085, 1059, 1085, 1074, 1085, 1085, 1229, 1233, + /* 300 */ 1233, 1229, 1138, 1133, 1138, 1133, 1138, 1133, 1138, 1133, + /* 310 */ 1124, 1224, 1124, 1014, 1150, 1139, 1148, 1146, 1155, 1038, + /* 320 */ 1077, 1302, 1302, 1298, 1298, 1298, 1346, 1346, 1284, 1314, + /* 330 */ 1045, 1045, 1045, 1045, 1314, 1061, 1061, 1045, 1045, 1045, + /* 340 */ 1045, 1314, 1014, 1014, 1014, 1014, 1014, 1014, 1309, 1014, + /* 350 */ 1238, 1014, 1014, 1014, 1014, 1014, 1014, 1014, 1014, 1014, + /* 360 */ 1014, 1014, 1014, 1014, 1014, 1014, 1014, 1014, 1014, 1171, + /* 370 */ 1014, 1017, 1281, 1014, 1014, 1280, 1014, 1014, 1014, 1014, + /* 380 */ 1014, 1014, 1014, 1014, 1014, 1014, 1014, 1014, 1014, 1014, + /* 390 */ 1014, 1014, 1014, 1014, 1014, 1014, 1337, 1014, 1014, 1014, + /* 400 */ 1014, 1014, 1014, 1252, 1251, 1014, 1014, 1126, 1014, 1014, + /* 410 */ 1014, 1014, 1014, 1014, 1014, 1014, 1014, 1014, 1014, 1014, + /* 420 */ 1014, 1014, 1014, 1014, 1014, 1014, 1014, 1014, 1014, 1014, + /* 430 */ 1014, 1014, 1014, 1014, 1014, 1014, 1014, 1014, 1014, 1014, + /* 440 */ 1014, 1014, 1147, 1014, 1140, 1014, 1014, 1014, 1014, 1328, + /* 450 */ 1014, 1014, 1014, 1014, 1014, 1014, 1014, 1014, 1014, 1014, + /* 460 */ 1014, 1014, 1014, 1323, 1101, 1173, 1014, 1172, 1176, 1014, + /* 470 */ 1026, 1014, }; /********** End of lemon-generated parsing tables *****************************/ @@ -137948,75 +140768,264 @@ SQLITE_PRIVATE void sqlite3ParserTrace(FILE *TraceFILE, char *zTracePrompt){ } #endif /* NDEBUG */ -#ifndef NDEBUG +#if defined(YYCOVERAGE) || !defined(NDEBUG) /* For tracing shifts, the names of all terminals and nonterminals ** are required. The following table supplies these names */ static const char *const yyTokenName[] = { - "$", "SEMI", "EXPLAIN", "QUERY", - "PLAN", "BEGIN", "TRANSACTION", "DEFERRED", - "IMMEDIATE", "EXCLUSIVE", "COMMIT", "END", - "ROLLBACK", "SAVEPOINT", "RELEASE", "TO", - "TABLE", "CREATE", "IF", "NOT", - "EXISTS", "TEMP", "LP", "RP", - "AS", "WITHOUT", "COMMA", "ABORT", - "ACTION", "AFTER", "ANALYZE", "ASC", - "ATTACH", "BEFORE", "BY", "CASCADE", - "CAST", "CONFLICT", "DATABASE", "DESC", - "DETACH", "EACH", "FAIL", "OR", - "AND", "IS", "MATCH", "LIKE_KW", - "BETWEEN", "IN", "ISNULL", "NOTNULL", - "NE", "EQ", "GT", "LE", - "LT", "GE", "ESCAPE", "ID", - "COLUMNKW", "FOR", "IGNORE", "INITIALLY", - "INSTEAD", "NO", "KEY", "OF", - "OFFSET", "PRAGMA", "RAISE", "RECURSIVE", - "REPLACE", "RESTRICT", "ROW", "TRIGGER", - "VACUUM", "VIEW", "VIRTUAL", "WITH", - "REINDEX", "RENAME", "CTIME_KW", "ANY", - "BITAND", "BITOR", "LSHIFT", "RSHIFT", - "PLUS", "MINUS", "STAR", "SLASH", - "REM", "CONCAT", "COLLATE", "BITNOT", - "INDEXED", "STRING", "JOIN_KW", "CONSTRAINT", - "DEFAULT", "NULL", "PRIMARY", "UNIQUE", - "CHECK", "REFERENCES", "AUTOINCR", "ON", - "INSERT", "DELETE", "UPDATE", "SET", - "DEFERRABLE", "FOREIGN", "DROP", "UNION", - "ALL", "EXCEPT", "INTERSECT", "SELECT", - "VALUES", "DISTINCT", "DOT", "FROM", - "JOIN", "USING", "ORDER", "GROUP", - "HAVING", "LIMIT", "WHERE", "INTO", - "FLOAT", "BLOB", "INTEGER", "VARIABLE", - "CASE", "WHEN", "THEN", "ELSE", - "INDEX", "ALTER", "ADD", "error", - "input", "cmdlist", "ecmd", "explain", - "cmdx", "cmd", "transtype", "trans_opt", - "nm", "savepoint_opt", "create_table", "create_table_args", - "createkw", "temp", "ifnotexists", "dbnm", - "columnlist", "conslist_opt", "table_options", "select", - "columnname", "carglist", "typetoken", "typename", - "signed", "plus_num", "minus_num", "ccons", - "term", "expr", "onconf", "sortorder", - "autoinc", "eidlist_opt", "refargs", "defer_subclause", - "refarg", "refact", "init_deferred_pred_opt", "conslist", - "tconscomma", "tcons", "sortlist", "eidlist", - "defer_subclause_opt", "orconf", "resolvetype", "raisetype", - "ifexists", "fullname", "selectnowith", "oneselect", - "with", "multiselect_op", "distinct", "selcollist", - "from", "where_opt", "groupby_opt", "having_opt", - "orderby_opt", "limit_opt", "values", "nexprlist", - "exprlist", "sclp", "as", "seltablist", - "stl_prefix", "joinop", "indexed_opt", "on_opt", - "using_opt", "idlist", "setlist", "insert_cmd", - "idlist_opt", "likeop", "between_op", "in_op", - "paren_exprlist", "case_operand", "case_exprlist", "case_else", - "uniqueflag", "collate", "nmnum", "trigger_decl", - "trigger_cmd_list", "trigger_time", "trigger_event", "foreach_clause", - "when_clause", "trigger_cmd", "trnm", "tridxby", - "database_kw_opt", "key_opt", "add_column_fullname", "kwcolumn_opt", - "create_vtab", "vtabarglist", "vtabarg", "vtabargtoken", - "lp", "anylist", "wqlist", + /* 0 */ "$", + /* 1 */ "SEMI", + /* 2 */ "EXPLAIN", + /* 3 */ "QUERY", + /* 4 */ "PLAN", + /* 5 */ "BEGIN", + /* 6 */ "TRANSACTION", + /* 7 */ "DEFERRED", + /* 8 */ "IMMEDIATE", + /* 9 */ "EXCLUSIVE", + /* 10 */ "COMMIT", + /* 11 */ "END", + /* 12 */ "ROLLBACK", + /* 13 */ "SAVEPOINT", + /* 14 */ "RELEASE", + /* 15 */ "TO", + /* 16 */ "TABLE", + /* 17 */ "CREATE", + /* 18 */ "IF", + /* 19 */ "NOT", + /* 20 */ "EXISTS", + /* 21 */ "TEMP", + /* 22 */ "LP", + /* 23 */ "RP", + /* 24 */ "AS", + /* 25 */ "WITHOUT", + /* 26 */ "COMMA", + /* 27 */ "ABORT", + /* 28 */ "ACTION", + /* 29 */ "AFTER", + /* 30 */ "ANALYZE", + /* 31 */ "ASC", + /* 32 */ "ATTACH", + /* 33 */ "BEFORE", + /* 34 */ "BY", + /* 35 */ "CASCADE", + /* 36 */ "CAST", + /* 37 */ "CONFLICT", + /* 38 */ "DATABASE", + /* 39 */ "DESC", + /* 40 */ "DETACH", + /* 41 */ "EACH", + /* 42 */ "FAIL", + /* 43 */ "OR", + /* 44 */ "AND", + /* 45 */ "IS", + /* 46 */ "MATCH", + /* 47 */ "LIKE_KW", + /* 48 */ "BETWEEN", + /* 49 */ "IN", + /* 50 */ "ISNULL", + /* 51 */ "NOTNULL", + /* 52 */ "NE", + /* 53 */ "EQ", + /* 54 */ "GT", + /* 55 */ "LE", + /* 56 */ "LT", + /* 57 */ "GE", + /* 58 */ "ESCAPE", + /* 59 */ "ID", + /* 60 */ "COLUMNKW", + /* 61 */ "FOR", + /* 62 */ "IGNORE", + /* 63 */ "INITIALLY", + /* 64 */ "INSTEAD", + /* 65 */ "NO", + /* 66 */ "KEY", + /* 67 */ "OF", + /* 68 */ "OFFSET", + /* 69 */ "PRAGMA", + /* 70 */ "RAISE", + /* 71 */ "RECURSIVE", + /* 72 */ "REPLACE", + /* 73 */ "RESTRICT", + /* 74 */ "ROW", + /* 75 */ "TRIGGER", + /* 76 */ "VACUUM", + /* 77 */ "VIEW", + /* 78 */ "VIRTUAL", + /* 79 */ "WITH", + /* 80 */ "REINDEX", + /* 81 */ "RENAME", + /* 82 */ "CTIME_KW", + /* 83 */ "ANY", + /* 84 */ "BITAND", + /* 85 */ "BITOR", + /* 86 */ "LSHIFT", + /* 87 */ "RSHIFT", + /* 88 */ "PLUS", + /* 89 */ "MINUS", + /* 90 */ "STAR", + /* 91 */ "SLASH", + /* 92 */ "REM", + /* 93 */ "CONCAT", + /* 94 */ "COLLATE", + /* 95 */ "BITNOT", + /* 96 */ "INDEXED", + /* 97 */ "STRING", + /* 98 */ "JOIN_KW", + /* 99 */ "CONSTRAINT", + /* 100 */ "DEFAULT", + /* 101 */ "NULL", + /* 102 */ "PRIMARY", + /* 103 */ "UNIQUE", + /* 104 */ "CHECK", + /* 105 */ "REFERENCES", + /* 106 */ "AUTOINCR", + /* 107 */ "ON", + /* 108 */ "INSERT", + /* 109 */ "DELETE", + /* 110 */ "UPDATE", + /* 111 */ "SET", + /* 112 */ "DEFERRABLE", + /* 113 */ "FOREIGN", + /* 114 */ "DROP", + /* 115 */ "UNION", + /* 116 */ "ALL", + /* 117 */ "EXCEPT", + /* 118 */ "INTERSECT", + /* 119 */ "SELECT", + /* 120 */ "VALUES", + /* 121 */ "DISTINCT", + /* 122 */ "DOT", + /* 123 */ "FROM", + /* 124 */ "JOIN", + /* 125 */ "USING", + /* 126 */ "ORDER", + /* 127 */ "GROUP", + /* 128 */ "HAVING", + /* 129 */ "LIMIT", + /* 130 */ "WHERE", + /* 131 */ "INTO", + /* 132 */ "FLOAT", + /* 133 */ "BLOB", + /* 134 */ "INTEGER", + /* 135 */ "VARIABLE", + /* 136 */ "CASE", + /* 137 */ "WHEN", + /* 138 */ "THEN", + /* 139 */ "ELSE", + /* 140 */ "INDEX", + /* 141 */ "ALTER", + /* 142 */ "ADD", + /* 143 */ "error", + /* 144 */ "input", + /* 145 */ "cmdlist", + /* 146 */ "ecmd", + /* 147 */ "explain", + /* 148 */ "cmdx", + /* 149 */ "cmd", + /* 150 */ "transtype", + /* 151 */ "trans_opt", + /* 152 */ "nm", + /* 153 */ "savepoint_opt", + /* 154 */ "create_table", + /* 155 */ "create_table_args", + /* 156 */ "createkw", + /* 157 */ "temp", + /* 158 */ "ifnotexists", + /* 159 */ "dbnm", + /* 160 */ "columnlist", + /* 161 */ "conslist_opt", + /* 162 */ "table_options", + /* 163 */ "select", + /* 164 */ "columnname", + /* 165 */ "carglist", + /* 166 */ "typetoken", + /* 167 */ "typename", + /* 168 */ "signed", + /* 169 */ "plus_num", + /* 170 */ "minus_num", + /* 171 */ "scanpt", + /* 172 */ "ccons", + /* 173 */ "term", + /* 174 */ "expr", + /* 175 */ "onconf", + /* 176 */ "sortorder", + /* 177 */ "autoinc", + /* 178 */ "eidlist_opt", + /* 179 */ "refargs", + /* 180 */ "defer_subclause", + /* 181 */ "refarg", + /* 182 */ "refact", + /* 183 */ "init_deferred_pred_opt", + /* 184 */ "conslist", + /* 185 */ "tconscomma", + /* 186 */ "tcons", + /* 187 */ "sortlist", + /* 188 */ "eidlist", + /* 189 */ "defer_subclause_opt", + /* 190 */ "orconf", + /* 191 */ "resolvetype", + /* 192 */ "raisetype", + /* 193 */ "ifexists", + /* 194 */ "fullname", + /* 195 */ "selectnowith", + /* 196 */ "oneselect", + /* 197 */ "wqlist", + /* 198 */ "multiselect_op", + /* 199 */ "distinct", + /* 200 */ "selcollist", + /* 201 */ "from", + /* 202 */ "where_opt", + /* 203 */ "groupby_opt", + /* 204 */ "having_opt", + /* 205 */ "orderby_opt", + /* 206 */ "limit_opt", + /* 207 */ "values", + /* 208 */ "nexprlist", + /* 209 */ "exprlist", + /* 210 */ "sclp", + /* 211 */ "as", + /* 212 */ "seltablist", + /* 213 */ "stl_prefix", + /* 214 */ "joinop", + /* 215 */ "indexed_opt", + /* 216 */ "on_opt", + /* 217 */ "using_opt", + /* 218 */ "idlist", + /* 219 */ "with", + /* 220 */ "setlist", + /* 221 */ "insert_cmd", + /* 222 */ "idlist_opt", + /* 223 */ "likeop", + /* 224 */ "between_op", + /* 225 */ "in_op", + /* 226 */ "paren_exprlist", + /* 227 */ "case_operand", + /* 228 */ "case_exprlist", + /* 229 */ "case_else", + /* 230 */ "uniqueflag", + /* 231 */ "collate", + /* 232 */ "nmnum", + /* 233 */ "trigger_decl", + /* 234 */ "trigger_cmd_list", + /* 235 */ "trigger_time", + /* 236 */ "trigger_event", + /* 237 */ "foreach_clause", + /* 238 */ "when_clause", + /* 239 */ "trigger_cmd", + /* 240 */ "trnm", + /* 241 */ "tridxby", + /* 242 */ "database_kw_opt", + /* 243 */ "key_opt", + /* 244 */ "add_column_fullname", + /* 245 */ "kwcolumn_opt", + /* 246 */ "create_vtab", + /* 247 */ "vtabarglist", + /* 248 */ "vtabarg", + /* 249 */ "vtabargtoken", + /* 250 */ "lp", + /* 251 */ "anylist", }; -#endif /* NDEBUG */ +#endif /* defined(YYCOVERAGE) || !defined(NDEBUG) */ #ifndef NDEBUG /* For tracing reduce actions, the names of all rules are required. @@ -138050,307 +141059,311 @@ static const char *const yyRuleName[] = { /* 25 */ "typetoken ::= typename LP signed RP", /* 26 */ "typetoken ::= typename LP signed COMMA signed RP", /* 27 */ "typename ::= typename ID|STRING", - /* 28 */ "ccons ::= CONSTRAINT nm", - /* 29 */ "ccons ::= DEFAULT term", - /* 30 */ "ccons ::= DEFAULT LP expr RP", - /* 31 */ "ccons ::= DEFAULT PLUS term", - /* 32 */ "ccons ::= DEFAULT MINUS term", - /* 33 */ "ccons ::= DEFAULT ID|INDEXED", - /* 34 */ "ccons ::= NOT NULL onconf", - /* 35 */ "ccons ::= PRIMARY KEY sortorder onconf autoinc", - /* 36 */ "ccons ::= UNIQUE onconf", - /* 37 */ "ccons ::= CHECK LP expr RP", - /* 38 */ "ccons ::= REFERENCES nm eidlist_opt refargs", - /* 39 */ "ccons ::= defer_subclause", - /* 40 */ "ccons ::= COLLATE ID|STRING", - /* 41 */ "autoinc ::=", - /* 42 */ "autoinc ::= AUTOINCR", - /* 43 */ "refargs ::=", - /* 44 */ "refargs ::= refargs refarg", - /* 45 */ "refarg ::= MATCH nm", - /* 46 */ "refarg ::= ON INSERT refact", - /* 47 */ "refarg ::= ON DELETE refact", - /* 48 */ "refarg ::= ON UPDATE refact", - /* 49 */ "refact ::= SET NULL", - /* 50 */ "refact ::= SET DEFAULT", - /* 51 */ "refact ::= CASCADE", - /* 52 */ "refact ::= RESTRICT", - /* 53 */ "refact ::= NO ACTION", - /* 54 */ "defer_subclause ::= NOT DEFERRABLE init_deferred_pred_opt", - /* 55 */ "defer_subclause ::= DEFERRABLE init_deferred_pred_opt", - /* 56 */ "init_deferred_pred_opt ::=", - /* 57 */ "init_deferred_pred_opt ::= INITIALLY DEFERRED", - /* 58 */ "init_deferred_pred_opt ::= INITIALLY IMMEDIATE", - /* 59 */ "conslist_opt ::=", - /* 60 */ "tconscomma ::= COMMA", - /* 61 */ "tcons ::= CONSTRAINT nm", - /* 62 */ "tcons ::= PRIMARY KEY LP sortlist autoinc RP onconf", - /* 63 */ "tcons ::= UNIQUE LP sortlist RP onconf", - /* 64 */ "tcons ::= CHECK LP expr RP onconf", - /* 65 */ "tcons ::= FOREIGN KEY LP eidlist RP REFERENCES nm eidlist_opt refargs defer_subclause_opt", - /* 66 */ "defer_subclause_opt ::=", - /* 67 */ "onconf ::=", - /* 68 */ "onconf ::= ON CONFLICT resolvetype", - /* 69 */ "orconf ::=", - /* 70 */ "orconf ::= OR resolvetype", - /* 71 */ "resolvetype ::= IGNORE", - /* 72 */ "resolvetype ::= REPLACE", - /* 73 */ "cmd ::= DROP TABLE ifexists fullname", - /* 74 */ "ifexists ::= IF EXISTS", - /* 75 */ "ifexists ::=", - /* 76 */ "cmd ::= createkw temp VIEW ifnotexists nm dbnm eidlist_opt AS select", - /* 77 */ "cmd ::= DROP VIEW ifexists fullname", - /* 78 */ "cmd ::= select", - /* 79 */ "select ::= with selectnowith", - /* 80 */ "selectnowith ::= selectnowith multiselect_op oneselect", - /* 81 */ "multiselect_op ::= UNION", - /* 82 */ "multiselect_op ::= UNION ALL", - /* 83 */ "multiselect_op ::= EXCEPT|INTERSECT", - /* 84 */ "oneselect ::= SELECT distinct selcollist from where_opt groupby_opt having_opt orderby_opt limit_opt", - /* 85 */ "values ::= VALUES LP nexprlist RP", - /* 86 */ "values ::= values COMMA LP exprlist RP", - /* 87 */ "distinct ::= DISTINCT", - /* 88 */ "distinct ::= ALL", - /* 89 */ "distinct ::=", - /* 90 */ "sclp ::=", - /* 91 */ "selcollist ::= sclp expr as", - /* 92 */ "selcollist ::= sclp STAR", - /* 93 */ "selcollist ::= sclp nm DOT STAR", - /* 94 */ "as ::= AS nm", - /* 95 */ "as ::=", - /* 96 */ "from ::=", - /* 97 */ "from ::= FROM seltablist", - /* 98 */ "stl_prefix ::= seltablist joinop", - /* 99 */ "stl_prefix ::=", - /* 100 */ "seltablist ::= stl_prefix nm dbnm as indexed_opt on_opt using_opt", - /* 101 */ "seltablist ::= stl_prefix nm dbnm LP exprlist RP as on_opt using_opt", - /* 102 */ "seltablist ::= stl_prefix LP select RP as on_opt using_opt", - /* 103 */ "seltablist ::= stl_prefix LP seltablist RP as on_opt using_opt", - /* 104 */ "dbnm ::=", - /* 105 */ "dbnm ::= DOT nm", - /* 106 */ "fullname ::= nm dbnm", - /* 107 */ "joinop ::= COMMA|JOIN", - /* 108 */ "joinop ::= JOIN_KW JOIN", - /* 109 */ "joinop ::= JOIN_KW nm JOIN", - /* 110 */ "joinop ::= JOIN_KW nm nm JOIN", - /* 111 */ "on_opt ::= ON expr", - /* 112 */ "on_opt ::=", - /* 113 */ "indexed_opt ::=", - /* 114 */ "indexed_opt ::= INDEXED BY nm", - /* 115 */ "indexed_opt ::= NOT INDEXED", - /* 116 */ "using_opt ::= USING LP idlist RP", - /* 117 */ "using_opt ::=", - /* 118 */ "orderby_opt ::=", - /* 119 */ "orderby_opt ::= ORDER BY sortlist", - /* 120 */ "sortlist ::= sortlist COMMA expr sortorder", - /* 121 */ "sortlist ::= expr sortorder", - /* 122 */ "sortorder ::= ASC", - /* 123 */ "sortorder ::= DESC", - /* 124 */ "sortorder ::=", - /* 125 */ "groupby_opt ::=", - /* 126 */ "groupby_opt ::= GROUP BY nexprlist", - /* 127 */ "having_opt ::=", - /* 128 */ "having_opt ::= HAVING expr", - /* 129 */ "limit_opt ::=", - /* 130 */ "limit_opt ::= LIMIT expr", - /* 131 */ "limit_opt ::= LIMIT expr OFFSET expr", - /* 132 */ "limit_opt ::= LIMIT expr COMMA expr", - /* 133 */ "cmd ::= with DELETE FROM fullname indexed_opt where_opt", - /* 134 */ "where_opt ::=", - /* 135 */ "where_opt ::= WHERE expr", - /* 136 */ "cmd ::= with UPDATE orconf fullname indexed_opt SET setlist where_opt", - /* 137 */ "setlist ::= setlist COMMA nm EQ expr", - /* 138 */ "setlist ::= setlist COMMA LP idlist RP EQ expr", - /* 139 */ "setlist ::= nm EQ expr", - /* 140 */ "setlist ::= LP idlist RP EQ expr", - /* 141 */ "cmd ::= with insert_cmd INTO fullname idlist_opt select", - /* 142 */ "cmd ::= with insert_cmd INTO fullname idlist_opt DEFAULT VALUES", - /* 143 */ "insert_cmd ::= INSERT orconf", - /* 144 */ "insert_cmd ::= REPLACE", - /* 145 */ "idlist_opt ::=", - /* 146 */ "idlist_opt ::= LP idlist RP", - /* 147 */ "idlist ::= idlist COMMA nm", - /* 148 */ "idlist ::= nm", - /* 149 */ "expr ::= LP expr RP", - /* 150 */ "expr ::= ID|INDEXED", - /* 151 */ "expr ::= JOIN_KW", - /* 152 */ "expr ::= nm DOT nm", - /* 153 */ "expr ::= nm DOT nm DOT nm", - /* 154 */ "term ::= NULL|FLOAT|BLOB", - /* 155 */ "term ::= STRING", - /* 156 */ "term ::= INTEGER", - /* 157 */ "expr ::= VARIABLE", - /* 158 */ "expr ::= expr COLLATE ID|STRING", - /* 159 */ "expr ::= CAST LP expr AS typetoken RP", - /* 160 */ "expr ::= ID|INDEXED LP distinct exprlist RP", - /* 161 */ "expr ::= ID|INDEXED LP STAR RP", - /* 162 */ "term ::= CTIME_KW", - /* 163 */ "expr ::= LP nexprlist COMMA expr RP", - /* 164 */ "expr ::= expr AND expr", - /* 165 */ "expr ::= expr OR expr", - /* 166 */ "expr ::= expr LT|GT|GE|LE expr", - /* 167 */ "expr ::= expr EQ|NE expr", - /* 168 */ "expr ::= expr BITAND|BITOR|LSHIFT|RSHIFT expr", - /* 169 */ "expr ::= expr PLUS|MINUS expr", - /* 170 */ "expr ::= expr STAR|SLASH|REM expr", - /* 171 */ "expr ::= expr CONCAT expr", - /* 172 */ "likeop ::= NOT LIKE_KW|MATCH", - /* 173 */ "expr ::= expr likeop expr", - /* 174 */ "expr ::= expr likeop expr ESCAPE expr", - /* 175 */ "expr ::= expr ISNULL|NOTNULL", - /* 176 */ "expr ::= expr NOT NULL", - /* 177 */ "expr ::= expr IS expr", - /* 178 */ "expr ::= expr IS NOT expr", - /* 179 */ "expr ::= NOT expr", - /* 180 */ "expr ::= BITNOT expr", - /* 181 */ "expr ::= MINUS expr", - /* 182 */ "expr ::= PLUS expr", - /* 183 */ "between_op ::= BETWEEN", - /* 184 */ "between_op ::= NOT BETWEEN", - /* 185 */ "expr ::= expr between_op expr AND expr", - /* 186 */ "in_op ::= IN", - /* 187 */ "in_op ::= NOT IN", - /* 188 */ "expr ::= expr in_op LP exprlist RP", - /* 189 */ "expr ::= LP select RP", - /* 190 */ "expr ::= expr in_op LP select RP", - /* 191 */ "expr ::= expr in_op nm dbnm paren_exprlist", - /* 192 */ "expr ::= EXISTS LP select RP", - /* 193 */ "expr ::= CASE case_operand case_exprlist case_else END", - /* 194 */ "case_exprlist ::= case_exprlist WHEN expr THEN expr", - /* 195 */ "case_exprlist ::= WHEN expr THEN expr", - /* 196 */ "case_else ::= ELSE expr", - /* 197 */ "case_else ::=", - /* 198 */ "case_operand ::= expr", - /* 199 */ "case_operand ::=", - /* 200 */ "exprlist ::=", - /* 201 */ "nexprlist ::= nexprlist COMMA expr", - /* 202 */ "nexprlist ::= expr", - /* 203 */ "paren_exprlist ::=", - /* 204 */ "paren_exprlist ::= LP exprlist RP", - /* 205 */ "cmd ::= createkw uniqueflag INDEX ifnotexists nm dbnm ON nm LP sortlist RP where_opt", - /* 206 */ "uniqueflag ::= UNIQUE", - /* 207 */ "uniqueflag ::=", - /* 208 */ "eidlist_opt ::=", - /* 209 */ "eidlist_opt ::= LP eidlist RP", - /* 210 */ "eidlist ::= eidlist COMMA nm collate sortorder", - /* 211 */ "eidlist ::= nm collate sortorder", - /* 212 */ "collate ::=", - /* 213 */ "collate ::= COLLATE ID|STRING", - /* 214 */ "cmd ::= DROP INDEX ifexists fullname", - /* 215 */ "cmd ::= VACUUM", - /* 216 */ "cmd ::= VACUUM nm", - /* 217 */ "cmd ::= PRAGMA nm dbnm", - /* 218 */ "cmd ::= PRAGMA nm dbnm EQ nmnum", - /* 219 */ "cmd ::= PRAGMA nm dbnm LP nmnum RP", - /* 220 */ "cmd ::= PRAGMA nm dbnm EQ minus_num", - /* 221 */ "cmd ::= PRAGMA nm dbnm LP minus_num RP", - /* 222 */ "plus_num ::= PLUS INTEGER|FLOAT", - /* 223 */ "minus_num ::= MINUS INTEGER|FLOAT", - /* 224 */ "cmd ::= createkw trigger_decl BEGIN trigger_cmd_list END", - /* 225 */ "trigger_decl ::= temp TRIGGER ifnotexists nm dbnm trigger_time trigger_event ON fullname foreach_clause when_clause", - /* 226 */ "trigger_time ::= BEFORE|AFTER", - /* 227 */ "trigger_time ::= INSTEAD OF", - /* 228 */ "trigger_time ::=", - /* 229 */ "trigger_event ::= DELETE|INSERT", - /* 230 */ "trigger_event ::= UPDATE", - /* 231 */ "trigger_event ::= UPDATE OF idlist", - /* 232 */ "when_clause ::=", - /* 233 */ "when_clause ::= WHEN expr", - /* 234 */ "trigger_cmd_list ::= trigger_cmd_list trigger_cmd SEMI", - /* 235 */ "trigger_cmd_list ::= trigger_cmd SEMI", - /* 236 */ "trnm ::= nm DOT nm", - /* 237 */ "tridxby ::= INDEXED BY nm", - /* 238 */ "tridxby ::= NOT INDEXED", - /* 239 */ "trigger_cmd ::= UPDATE orconf trnm tridxby SET setlist where_opt", - /* 240 */ "trigger_cmd ::= insert_cmd INTO trnm idlist_opt select", - /* 241 */ "trigger_cmd ::= DELETE FROM trnm tridxby where_opt", - /* 242 */ "trigger_cmd ::= select", - /* 243 */ "expr ::= RAISE LP IGNORE RP", - /* 244 */ "expr ::= RAISE LP raisetype COMMA nm RP", - /* 245 */ "raisetype ::= ROLLBACK", - /* 246 */ "raisetype ::= ABORT", - /* 247 */ "raisetype ::= FAIL", - /* 248 */ "cmd ::= DROP TRIGGER ifexists fullname", - /* 249 */ "cmd ::= ATTACH database_kw_opt expr AS expr key_opt", - /* 250 */ "cmd ::= DETACH database_kw_opt expr", - /* 251 */ "key_opt ::=", - /* 252 */ "key_opt ::= KEY expr", - /* 253 */ "cmd ::= REINDEX", - /* 254 */ "cmd ::= REINDEX nm dbnm", - /* 255 */ "cmd ::= ANALYZE", - /* 256 */ "cmd ::= ANALYZE nm dbnm", - /* 257 */ "cmd ::= ALTER TABLE fullname RENAME TO nm", - /* 258 */ "cmd ::= ALTER TABLE add_column_fullname ADD kwcolumn_opt columnname carglist", - /* 259 */ "add_column_fullname ::= fullname", - /* 260 */ "cmd ::= create_vtab", - /* 261 */ "cmd ::= create_vtab LP vtabarglist RP", - /* 262 */ "create_vtab ::= createkw VIRTUAL TABLE ifnotexists nm dbnm USING nm", - /* 263 */ "vtabarg ::=", - /* 264 */ "vtabargtoken ::= ANY", - /* 265 */ "vtabargtoken ::= lp anylist RP", - /* 266 */ "lp ::= LP", - /* 267 */ "with ::=", - /* 268 */ "with ::= WITH wqlist", - /* 269 */ "with ::= WITH RECURSIVE wqlist", - /* 270 */ "wqlist ::= nm eidlist_opt AS LP select RP", - /* 271 */ "wqlist ::= wqlist COMMA nm eidlist_opt AS LP select RP", - /* 272 */ "input ::= cmdlist", - /* 273 */ "cmdlist ::= cmdlist ecmd", - /* 274 */ "cmdlist ::= ecmd", - /* 275 */ "ecmd ::= SEMI", - /* 276 */ "ecmd ::= explain cmdx SEMI", - /* 277 */ "explain ::=", - /* 278 */ "trans_opt ::=", - /* 279 */ "trans_opt ::= TRANSACTION", - /* 280 */ "trans_opt ::= TRANSACTION nm", - /* 281 */ "savepoint_opt ::= SAVEPOINT", - /* 282 */ "savepoint_opt ::=", - /* 283 */ "cmd ::= create_table create_table_args", - /* 284 */ "columnlist ::= columnlist COMMA columnname carglist", - /* 285 */ "columnlist ::= columnname carglist", - /* 286 */ "nm ::= ID|INDEXED", - /* 287 */ "nm ::= STRING", - /* 288 */ "nm ::= JOIN_KW", - /* 289 */ "typetoken ::= typename", - /* 290 */ "typename ::= ID|STRING", - /* 291 */ "signed ::= plus_num", - /* 292 */ "signed ::= minus_num", - /* 293 */ "carglist ::= carglist ccons", - /* 294 */ "carglist ::=", - /* 295 */ "ccons ::= NULL onconf", - /* 296 */ "conslist_opt ::= COMMA conslist", - /* 297 */ "conslist ::= conslist tconscomma tcons", - /* 298 */ "conslist ::= tcons", - /* 299 */ "tconscomma ::=", - /* 300 */ "defer_subclause_opt ::= defer_subclause", - /* 301 */ "resolvetype ::= raisetype", - /* 302 */ "selectnowith ::= oneselect", - /* 303 */ "oneselect ::= values", - /* 304 */ "sclp ::= selcollist COMMA", - /* 305 */ "as ::= ID|STRING", - /* 306 */ "expr ::= term", - /* 307 */ "likeop ::= LIKE_KW|MATCH", - /* 308 */ "exprlist ::= nexprlist", - /* 309 */ "nmnum ::= plus_num", - /* 310 */ "nmnum ::= nm", - /* 311 */ "nmnum ::= ON", - /* 312 */ "nmnum ::= DELETE", - /* 313 */ "nmnum ::= DEFAULT", - /* 314 */ "plus_num ::= INTEGER|FLOAT", - /* 315 */ "foreach_clause ::=", - /* 316 */ "foreach_clause ::= FOR EACH ROW", - /* 317 */ "trnm ::= nm", - /* 318 */ "tridxby ::=", - /* 319 */ "database_kw_opt ::= DATABASE", - /* 320 */ "database_kw_opt ::=", - /* 321 */ "kwcolumn_opt ::=", - /* 322 */ "kwcolumn_opt ::= COLUMNKW", - /* 323 */ "vtabarglist ::= vtabarg", - /* 324 */ "vtabarglist ::= vtabarglist COMMA vtabarg", - /* 325 */ "vtabarg ::= vtabarg vtabargtoken", - /* 326 */ "anylist ::=", - /* 327 */ "anylist ::= anylist LP anylist RP", - /* 328 */ "anylist ::= anylist ANY", + /* 28 */ "scanpt ::=", + /* 29 */ "ccons ::= CONSTRAINT nm", + /* 30 */ "ccons ::= DEFAULT scanpt term scanpt", + /* 31 */ "ccons ::= DEFAULT LP expr RP", + /* 32 */ "ccons ::= DEFAULT PLUS term scanpt", + /* 33 */ "ccons ::= DEFAULT MINUS term scanpt", + /* 34 */ "ccons ::= DEFAULT scanpt ID|INDEXED", + /* 35 */ "ccons ::= NOT NULL onconf", + /* 36 */ "ccons ::= PRIMARY KEY sortorder onconf autoinc", + /* 37 */ "ccons ::= UNIQUE onconf", + /* 38 */ "ccons ::= CHECK LP expr RP", + /* 39 */ "ccons ::= REFERENCES nm eidlist_opt refargs", + /* 40 */ "ccons ::= defer_subclause", + /* 41 */ "ccons ::= COLLATE ID|STRING", + /* 42 */ "autoinc ::=", + /* 43 */ "autoinc ::= AUTOINCR", + /* 44 */ "refargs ::=", + /* 45 */ "refargs ::= refargs refarg", + /* 46 */ "refarg ::= MATCH nm", + /* 47 */ "refarg ::= ON INSERT refact", + /* 48 */ "refarg ::= ON DELETE refact", + /* 49 */ "refarg ::= ON UPDATE refact", + /* 50 */ "refact ::= SET NULL", + /* 51 */ "refact ::= SET DEFAULT", + /* 52 */ "refact ::= CASCADE", + /* 53 */ "refact ::= RESTRICT", + /* 54 */ "refact ::= NO ACTION", + /* 55 */ "defer_subclause ::= NOT DEFERRABLE init_deferred_pred_opt", + /* 56 */ "defer_subclause ::= DEFERRABLE init_deferred_pred_opt", + /* 57 */ "init_deferred_pred_opt ::=", + /* 58 */ "init_deferred_pred_opt ::= INITIALLY DEFERRED", + /* 59 */ "init_deferred_pred_opt ::= INITIALLY IMMEDIATE", + /* 60 */ "conslist_opt ::=", + /* 61 */ "tconscomma ::= COMMA", + /* 62 */ "tcons ::= CONSTRAINT nm", + /* 63 */ "tcons ::= PRIMARY KEY LP sortlist autoinc RP onconf", + /* 64 */ "tcons ::= UNIQUE LP sortlist RP onconf", + /* 65 */ "tcons ::= CHECK LP expr RP onconf", + /* 66 */ "tcons ::= FOREIGN KEY LP eidlist RP REFERENCES nm eidlist_opt refargs defer_subclause_opt", + /* 67 */ "defer_subclause_opt ::=", + /* 68 */ "onconf ::=", + /* 69 */ "onconf ::= ON CONFLICT resolvetype", + /* 70 */ "orconf ::=", + /* 71 */ "orconf ::= OR resolvetype", + /* 72 */ "resolvetype ::= IGNORE", + /* 73 */ "resolvetype ::= REPLACE", + /* 74 */ "cmd ::= DROP TABLE ifexists fullname", + /* 75 */ "ifexists ::= IF EXISTS", + /* 76 */ "ifexists ::=", + /* 77 */ "cmd ::= createkw temp VIEW ifnotexists nm dbnm eidlist_opt AS select", + /* 78 */ "cmd ::= DROP VIEW ifexists fullname", + /* 79 */ "cmd ::= select", + /* 80 */ "select ::= WITH wqlist selectnowith", + /* 81 */ "select ::= WITH RECURSIVE wqlist selectnowith", + /* 82 */ "select ::= selectnowith", + /* 83 */ "selectnowith ::= selectnowith multiselect_op oneselect", + /* 84 */ "multiselect_op ::= UNION", + /* 85 */ "multiselect_op ::= UNION ALL", + /* 86 */ "multiselect_op ::= EXCEPT|INTERSECT", + /* 87 */ "oneselect ::= SELECT distinct selcollist from where_opt groupby_opt having_opt orderby_opt limit_opt", + /* 88 */ "values ::= VALUES LP nexprlist RP", + /* 89 */ "values ::= values COMMA LP exprlist RP", + /* 90 */ "distinct ::= DISTINCT", + /* 91 */ "distinct ::= ALL", + /* 92 */ "distinct ::=", + /* 93 */ "sclp ::=", + /* 94 */ "selcollist ::= sclp scanpt expr scanpt as", + /* 95 */ "selcollist ::= sclp scanpt STAR", + /* 96 */ "selcollist ::= sclp scanpt nm DOT STAR", + /* 97 */ "as ::= AS nm", + /* 98 */ "as ::=", + /* 99 */ "from ::=", + /* 100 */ "from ::= FROM seltablist", + /* 101 */ "stl_prefix ::= seltablist joinop", + /* 102 */ "stl_prefix ::=", + /* 103 */ "seltablist ::= stl_prefix nm dbnm as indexed_opt on_opt using_opt", + /* 104 */ "seltablist ::= stl_prefix nm dbnm LP exprlist RP as on_opt using_opt", + /* 105 */ "seltablist ::= stl_prefix LP select RP as on_opt using_opt", + /* 106 */ "seltablist ::= stl_prefix LP seltablist RP as on_opt using_opt", + /* 107 */ "dbnm ::=", + /* 108 */ "dbnm ::= DOT nm", + /* 109 */ "fullname ::= nm", + /* 110 */ "fullname ::= nm DOT nm", + /* 111 */ "joinop ::= COMMA|JOIN", + /* 112 */ "joinop ::= JOIN_KW JOIN", + /* 113 */ "joinop ::= JOIN_KW nm JOIN", + /* 114 */ "joinop ::= JOIN_KW nm nm JOIN", + /* 115 */ "on_opt ::= ON expr", + /* 116 */ "on_opt ::=", + /* 117 */ "indexed_opt ::=", + /* 118 */ "indexed_opt ::= INDEXED BY nm", + /* 119 */ "indexed_opt ::= NOT INDEXED", + /* 120 */ "using_opt ::= USING LP idlist RP", + /* 121 */ "using_opt ::=", + /* 122 */ "orderby_opt ::=", + /* 123 */ "orderby_opt ::= ORDER BY sortlist", + /* 124 */ "sortlist ::= sortlist COMMA expr sortorder", + /* 125 */ "sortlist ::= expr sortorder", + /* 126 */ "sortorder ::= ASC", + /* 127 */ "sortorder ::= DESC", + /* 128 */ "sortorder ::=", + /* 129 */ "groupby_opt ::=", + /* 130 */ "groupby_opt ::= GROUP BY nexprlist", + /* 131 */ "having_opt ::=", + /* 132 */ "having_opt ::= HAVING expr", + /* 133 */ "limit_opt ::=", + /* 134 */ "limit_opt ::= LIMIT expr", + /* 135 */ "limit_opt ::= LIMIT expr OFFSET expr", + /* 136 */ "limit_opt ::= LIMIT expr COMMA expr", + /* 137 */ "cmd ::= with DELETE FROM fullname indexed_opt where_opt", + /* 138 */ "where_opt ::=", + /* 139 */ "where_opt ::= WHERE expr", + /* 140 */ "cmd ::= with UPDATE orconf fullname indexed_opt SET setlist where_opt", + /* 141 */ "setlist ::= setlist COMMA nm EQ expr", + /* 142 */ "setlist ::= setlist COMMA LP idlist RP EQ expr", + /* 143 */ "setlist ::= nm EQ expr", + /* 144 */ "setlist ::= LP idlist RP EQ expr", + /* 145 */ "cmd ::= with insert_cmd INTO fullname idlist_opt select", + /* 146 */ "cmd ::= with insert_cmd INTO fullname idlist_opt DEFAULT VALUES", + /* 147 */ "insert_cmd ::= INSERT orconf", + /* 148 */ "insert_cmd ::= REPLACE", + /* 149 */ "idlist_opt ::=", + /* 150 */ "idlist_opt ::= LP idlist RP", + /* 151 */ "idlist ::= idlist COMMA nm", + /* 152 */ "idlist ::= nm", + /* 153 */ "expr ::= LP expr RP", + /* 154 */ "expr ::= ID|INDEXED", + /* 155 */ "expr ::= JOIN_KW", + /* 156 */ "expr ::= nm DOT nm", + /* 157 */ "expr ::= nm DOT nm DOT nm", + /* 158 */ "term ::= NULL|FLOAT|BLOB", + /* 159 */ "term ::= STRING", + /* 160 */ "term ::= INTEGER", + /* 161 */ "expr ::= VARIABLE", + /* 162 */ "expr ::= expr COLLATE ID|STRING", + /* 163 */ "expr ::= CAST LP expr AS typetoken RP", + /* 164 */ "expr ::= ID|INDEXED LP distinct exprlist RP", + /* 165 */ "expr ::= ID|INDEXED LP STAR RP", + /* 166 */ "term ::= CTIME_KW", + /* 167 */ "expr ::= LP nexprlist COMMA expr RP", + /* 168 */ "expr ::= expr AND expr", + /* 169 */ "expr ::= expr OR expr", + /* 170 */ "expr ::= expr LT|GT|GE|LE expr", + /* 171 */ "expr ::= expr EQ|NE expr", + /* 172 */ "expr ::= expr BITAND|BITOR|LSHIFT|RSHIFT expr", + /* 173 */ "expr ::= expr PLUS|MINUS expr", + /* 174 */ "expr ::= expr STAR|SLASH|REM expr", + /* 175 */ "expr ::= expr CONCAT expr", + /* 176 */ "likeop ::= NOT LIKE_KW|MATCH", + /* 177 */ "expr ::= expr likeop expr", + /* 178 */ "expr ::= expr likeop expr ESCAPE expr", + /* 179 */ "expr ::= expr ISNULL|NOTNULL", + /* 180 */ "expr ::= expr NOT NULL", + /* 181 */ "expr ::= expr IS expr", + /* 182 */ "expr ::= expr IS NOT expr", + /* 183 */ "expr ::= NOT expr", + /* 184 */ "expr ::= BITNOT expr", + /* 185 */ "expr ::= MINUS expr", + /* 186 */ "expr ::= PLUS expr", + /* 187 */ "between_op ::= BETWEEN", + /* 188 */ "between_op ::= NOT BETWEEN", + /* 189 */ "expr ::= expr between_op expr AND expr", + /* 190 */ "in_op ::= IN", + /* 191 */ "in_op ::= NOT IN", + /* 192 */ "expr ::= expr in_op LP exprlist RP", + /* 193 */ "expr ::= LP select RP", + /* 194 */ "expr ::= expr in_op LP select RP", + /* 195 */ "expr ::= expr in_op nm dbnm paren_exprlist", + /* 196 */ "expr ::= EXISTS LP select RP", + /* 197 */ "expr ::= CASE case_operand case_exprlist case_else END", + /* 198 */ "case_exprlist ::= case_exprlist WHEN expr THEN expr", + /* 199 */ "case_exprlist ::= WHEN expr THEN expr", + /* 200 */ "case_else ::= ELSE expr", + /* 201 */ "case_else ::=", + /* 202 */ "case_operand ::= expr", + /* 203 */ "case_operand ::=", + /* 204 */ "exprlist ::=", + /* 205 */ "nexprlist ::= nexprlist COMMA expr", + /* 206 */ "nexprlist ::= expr", + /* 207 */ "paren_exprlist ::=", + /* 208 */ "paren_exprlist ::= LP exprlist RP", + /* 209 */ "cmd ::= createkw uniqueflag INDEX ifnotexists nm dbnm ON nm LP sortlist RP where_opt", + /* 210 */ "uniqueflag ::= UNIQUE", + /* 211 */ "uniqueflag ::=", + /* 212 */ "eidlist_opt ::=", + /* 213 */ "eidlist_opt ::= LP eidlist RP", + /* 214 */ "eidlist ::= eidlist COMMA nm collate sortorder", + /* 215 */ "eidlist ::= nm collate sortorder", + /* 216 */ "collate ::=", + /* 217 */ "collate ::= COLLATE ID|STRING", + /* 218 */ "cmd ::= DROP INDEX ifexists fullname", + /* 219 */ "cmd ::= VACUUM", + /* 220 */ "cmd ::= VACUUM nm", + /* 221 */ "cmd ::= PRAGMA nm dbnm", + /* 222 */ "cmd ::= PRAGMA nm dbnm EQ nmnum", + /* 223 */ "cmd ::= PRAGMA nm dbnm LP nmnum RP", + /* 224 */ "cmd ::= PRAGMA nm dbnm EQ minus_num", + /* 225 */ "cmd ::= PRAGMA nm dbnm LP minus_num RP", + /* 226 */ "plus_num ::= PLUS INTEGER|FLOAT", + /* 227 */ "minus_num ::= MINUS INTEGER|FLOAT", + /* 228 */ "cmd ::= createkw trigger_decl BEGIN trigger_cmd_list END", + /* 229 */ "trigger_decl ::= temp TRIGGER ifnotexists nm dbnm trigger_time trigger_event ON fullname foreach_clause when_clause", + /* 230 */ "trigger_time ::= BEFORE|AFTER", + /* 231 */ "trigger_time ::= INSTEAD OF", + /* 232 */ "trigger_time ::=", + /* 233 */ "trigger_event ::= DELETE|INSERT", + /* 234 */ "trigger_event ::= UPDATE", + /* 235 */ "trigger_event ::= UPDATE OF idlist", + /* 236 */ "when_clause ::=", + /* 237 */ "when_clause ::= WHEN expr", + /* 238 */ "trigger_cmd_list ::= trigger_cmd_list trigger_cmd SEMI", + /* 239 */ "trigger_cmd_list ::= trigger_cmd SEMI", + /* 240 */ "trnm ::= nm DOT nm", + /* 241 */ "tridxby ::= INDEXED BY nm", + /* 242 */ "tridxby ::= NOT INDEXED", + /* 243 */ "trigger_cmd ::= UPDATE orconf trnm tridxby SET setlist where_opt scanpt", + /* 244 */ "trigger_cmd ::= scanpt insert_cmd INTO trnm idlist_opt select scanpt", + /* 245 */ "trigger_cmd ::= DELETE FROM trnm tridxby where_opt scanpt", + /* 246 */ "trigger_cmd ::= scanpt select scanpt", + /* 247 */ "expr ::= RAISE LP IGNORE RP", + /* 248 */ "expr ::= RAISE LP raisetype COMMA nm RP", + /* 249 */ "raisetype ::= ROLLBACK", + /* 250 */ "raisetype ::= ABORT", + /* 251 */ "raisetype ::= FAIL", + /* 252 */ "cmd ::= DROP TRIGGER ifexists fullname", + /* 253 */ "cmd ::= ATTACH database_kw_opt expr AS expr key_opt", + /* 254 */ "cmd ::= DETACH database_kw_opt expr", + /* 255 */ "key_opt ::=", + /* 256 */ "key_opt ::= KEY expr", + /* 257 */ "cmd ::= REINDEX", + /* 258 */ "cmd ::= REINDEX nm dbnm", + /* 259 */ "cmd ::= ANALYZE", + /* 260 */ "cmd ::= ANALYZE nm dbnm", + /* 261 */ "cmd ::= ALTER TABLE fullname RENAME TO nm", + /* 262 */ "cmd ::= ALTER TABLE add_column_fullname ADD kwcolumn_opt columnname carglist", + /* 263 */ "add_column_fullname ::= fullname", + /* 264 */ "cmd ::= create_vtab", + /* 265 */ "cmd ::= create_vtab LP vtabarglist RP", + /* 266 */ "create_vtab ::= createkw VIRTUAL TABLE ifnotexists nm dbnm USING nm", + /* 267 */ "vtabarg ::=", + /* 268 */ "vtabargtoken ::= ANY", + /* 269 */ "vtabargtoken ::= lp anylist RP", + /* 270 */ "lp ::= LP", + /* 271 */ "with ::= WITH wqlist", + /* 272 */ "with ::= WITH RECURSIVE wqlist", + /* 273 */ "wqlist ::= nm eidlist_opt AS LP select RP", + /* 274 */ "wqlist ::= wqlist COMMA nm eidlist_opt AS LP select RP", + /* 275 */ "input ::= cmdlist", + /* 276 */ "cmdlist ::= cmdlist ecmd", + /* 277 */ "cmdlist ::= ecmd", + /* 278 */ "ecmd ::= SEMI", + /* 279 */ "ecmd ::= explain cmdx SEMI", + /* 280 */ "explain ::=", + /* 281 */ "trans_opt ::=", + /* 282 */ "trans_opt ::= TRANSACTION", + /* 283 */ "trans_opt ::= TRANSACTION nm", + /* 284 */ "savepoint_opt ::= SAVEPOINT", + /* 285 */ "savepoint_opt ::=", + /* 286 */ "cmd ::= create_table create_table_args", + /* 287 */ "columnlist ::= columnlist COMMA columnname carglist", + /* 288 */ "columnlist ::= columnname carglist", + /* 289 */ "nm ::= ID|INDEXED", + /* 290 */ "nm ::= STRING", + /* 291 */ "nm ::= JOIN_KW", + /* 292 */ "typetoken ::= typename", + /* 293 */ "typename ::= ID|STRING", + /* 294 */ "signed ::= plus_num", + /* 295 */ "signed ::= minus_num", + /* 296 */ "carglist ::= carglist ccons", + /* 297 */ "carglist ::=", + /* 298 */ "ccons ::= NULL onconf", + /* 299 */ "conslist_opt ::= COMMA conslist", + /* 300 */ "conslist ::= conslist tconscomma tcons", + /* 301 */ "conslist ::= tcons", + /* 302 */ "tconscomma ::=", + /* 303 */ "defer_subclause_opt ::= defer_subclause", + /* 304 */ "resolvetype ::= raisetype", + /* 305 */ "selectnowith ::= oneselect", + /* 306 */ "oneselect ::= values", + /* 307 */ "sclp ::= selcollist COMMA", + /* 308 */ "as ::= ID|STRING", + /* 309 */ "expr ::= term", + /* 310 */ "likeop ::= LIKE_KW|MATCH", + /* 311 */ "exprlist ::= nexprlist", + /* 312 */ "nmnum ::= plus_num", + /* 313 */ "nmnum ::= nm", + /* 314 */ "nmnum ::= ON", + /* 315 */ "nmnum ::= DELETE", + /* 316 */ "nmnum ::= DEFAULT", + /* 317 */ "plus_num ::= INTEGER|FLOAT", + /* 318 */ "foreach_clause ::=", + /* 319 */ "foreach_clause ::= FOR EACH ROW", + /* 320 */ "trnm ::= nm", + /* 321 */ "tridxby ::=", + /* 322 */ "database_kw_opt ::= DATABASE", + /* 323 */ "database_kw_opt ::=", + /* 324 */ "kwcolumn_opt ::=", + /* 325 */ "kwcolumn_opt ::= COLUMNKW", + /* 326 */ "vtabarglist ::= vtabarg", + /* 327 */ "vtabarglist ::= vtabarglist COMMA vtabarg", + /* 328 */ "vtabarg ::= vtabarg vtabargtoken", + /* 329 */ "anylist ::=", + /* 330 */ "anylist ::= anylist LP anylist RP", + /* 331 */ "anylist ::= anylist ANY", + /* 332 */ "with ::=", }; #endif /* NDEBUG */ @@ -138472,76 +141485,71 @@ static void yy_destructor( */ /********* Begin destructor definitions ***************************************/ case 163: /* select */ - case 194: /* selectnowith */ - case 195: /* oneselect */ - case 206: /* values */ + case 195: /* selectnowith */ + case 196: /* oneselect */ + case 207: /* values */ { -sqlite3SelectDelete(pParse->db, (yypminor->yy243)); +sqlite3SelectDelete(pParse->db, (yypminor->yy387)); } break; - case 172: /* term */ - case 173: /* expr */ + case 173: /* term */ + case 174: /* expr */ + case 202: /* where_opt */ + case 204: /* having_opt */ + case 216: /* on_opt */ + case 227: /* case_operand */ + case 229: /* case_else */ + case 238: /* when_clause */ + case 243: /* key_opt */ { -sqlite3ExprDelete(pParse->db, (yypminor->yy190).pExpr); +sqlite3ExprDelete(pParse->db, (yypminor->yy314)); } break; - case 177: /* eidlist_opt */ - case 186: /* sortlist */ - case 187: /* eidlist */ - case 199: /* selcollist */ - case 202: /* groupby_opt */ - case 204: /* orderby_opt */ - case 207: /* nexprlist */ - case 208: /* exprlist */ - case 209: /* sclp */ - case 218: /* setlist */ - case 224: /* paren_exprlist */ - case 226: /* case_exprlist */ + case 178: /* eidlist_opt */ + case 187: /* sortlist */ + case 188: /* eidlist */ + case 200: /* selcollist */ + case 203: /* groupby_opt */ + case 205: /* orderby_opt */ + case 208: /* nexprlist */ + case 209: /* exprlist */ + case 210: /* sclp */ + case 220: /* setlist */ + case 226: /* paren_exprlist */ + case 228: /* case_exprlist */ { -sqlite3ExprListDelete(pParse->db, (yypminor->yy148)); +sqlite3ExprListDelete(pParse->db, (yypminor->yy322)); } break; - case 193: /* fullname */ - case 200: /* from */ - case 211: /* seltablist */ - case 212: /* stl_prefix */ + case 194: /* fullname */ + case 201: /* from */ + case 212: /* seltablist */ + case 213: /* stl_prefix */ { -sqlite3SrcListDelete(pParse->db, (yypminor->yy185)); +sqlite3SrcListDelete(pParse->db, (yypminor->yy259)); } break; - case 196: /* with */ - case 250: /* wqlist */ + case 197: /* wqlist */ { -sqlite3WithDelete(pParse->db, (yypminor->yy285)); +sqlite3WithDelete(pParse->db, (yypminor->yy451)); } break; - case 201: /* where_opt */ - case 203: /* having_opt */ - case 215: /* on_opt */ - case 225: /* case_operand */ - case 227: /* case_else */ - case 236: /* when_clause */ - case 241: /* key_opt */ + case 217: /* using_opt */ + case 218: /* idlist */ + case 222: /* idlist_opt */ { -sqlite3ExprDelete(pParse->db, (yypminor->yy72)); +sqlite3IdListDelete(pParse->db, (yypminor->yy384)); } break; - case 216: /* using_opt */ - case 217: /* idlist */ - case 220: /* idlist_opt */ + case 234: /* trigger_cmd_list */ + case 239: /* trigger_cmd */ { -sqlite3IdListDelete(pParse->db, (yypminor->yy254)); +sqlite3DeleteTriggerStep(pParse->db, (yypminor->yy203)); } break; - case 232: /* trigger_cmd_list */ - case 237: /* trigger_cmd */ + case 236: /* trigger_event */ { -sqlite3DeleteTriggerStep(pParse->db, (yypminor->yy145)); -} - break; - case 234: /* trigger_event */ -{ -sqlite3IdListDelete(pParse->db, (yypminor->yy332).b); +sqlite3IdListDelete(pParse->db, (yypminor->yy90).b); } break; /********* End destructor definitions *****************************************/ @@ -138612,6 +141620,43 @@ SQLITE_PRIVATE int sqlite3ParserStackPeak(void *p){ } #endif +/* This array of booleans keeps track of the parser statement +** coverage. The element yycoverage[X][Y] is set when the parser +** is in state X and has a lookahead token Y. In a well-tested +** systems, every element of this matrix should end up being set. +*/ +#if defined(YYCOVERAGE) +static unsigned char yycoverage[YYNSTATE][YYNTOKEN]; +#endif + +/* +** Write into out a description of every state/lookahead combination that +** +** (1) has not been used by the parser, and +** (2) is not a syntax error. +** +** Return the number of missed state/lookahead combinations. +*/ +#if defined(YYCOVERAGE) +SQLITE_PRIVATE int sqlite3ParserCoverage(FILE *out){ + int stateno, iLookAhead, i; + int nMissed = 0; + for(stateno=0; statenoyytos->stateno; - if( stateno>=YY_MIN_REDUCE ) return stateno; + if( stateno>YY_MAX_SHIFT ) return stateno; assert( stateno <= YY_SHIFT_COUNT ); +#if defined(YYCOVERAGE) + yycoverage[stateno][iLookAhead] = 1; +#endif do{ i = yy_shift_ofst[stateno]; + assert( i>=0 ); + assert( i+YYNTOKEN<=(int)sizeof(yy_lookahead)/sizeof(yy_lookahead[0]) ); assert( iLookAhead!=YYNOCODE ); + assert( iLookAhead < YYNTOKEN ); i += iLookAhead; - if( i<0 || i>=YY_ACTTAB_COUNT || yy_lookahead[i]!=iLookAhead ){ + if( yy_lookahead[i]!=iLookAhead ){ #ifdef YYFALLBACK YYCODETYPE iFallback; /* Fallback token */ if( iLookAheadyytos->major], + fprintf(yyTraceFILE,"%s%s '%s', go to state %d\n", + yyTracePrompt, zTag, yyTokenName[yypParser->yytos->major], yyNewState); }else{ - fprintf(yyTraceFILE,"%sShift '%s'\n", - yyTracePrompt,yyTokenName[yypParser->yytos->major]); + fprintf(yyTraceFILE,"%s%s '%s', pending reduce %d\n", + yyTracePrompt, zTag, yyTokenName[yypParser->yytos->major], + yyNewState - YY_MIN_REDUCE); } } } #else -# define yyTraceShift(X,Y) +# define yyTraceShift(X,Y,Z) #endif /* @@ -138785,7 +141836,7 @@ static void yy_shift( yytos->stateno = (YYACTIONTYPE)yyNewState; yytos->major = (YYCODETYPE)yyMajor; yytos->minor.yy0 = yyMinor; - yyTraceShift(yypParser, yyNewState); + yyTraceShift(yypParser, yyNewState, "Shift"); } /* The following table contains information about every rule that @@ -138795,335 +141846,339 @@ static const struct { YYCODETYPE lhs; /* Symbol on the left-hand side of the rule */ signed char nrhs; /* Negative of the number of RHS symbols in the rule */ } yyRuleInfo[] = { - { 147, -1 }, - { 147, -3 }, - { 148, -1 }, - { 149, -3 }, - { 150, 0 }, - { 150, -1 }, - { 150, -1 }, - { 150, -1 }, - { 149, -2 }, - { 149, -2 }, - { 149, -2 }, - { 149, -3 }, - { 149, -5 }, - { 154, -6 }, - { 156, -1 }, - { 158, 0 }, - { 158, -3 }, - { 157, -1 }, - { 157, 0 }, - { 155, -5 }, - { 155, -2 }, - { 162, 0 }, - { 162, -2 }, - { 164, -2 }, - { 166, 0 }, - { 166, -4 }, - { 166, -6 }, - { 167, -2 }, - { 171, -2 }, - { 171, -2 }, - { 171, -4 }, - { 171, -3 }, - { 171, -3 }, - { 171, -2 }, - { 171, -3 }, - { 171, -5 }, - { 171, -2 }, - { 171, -4 }, - { 171, -4 }, - { 171, -1 }, - { 171, -2 }, - { 176, 0 }, - { 176, -1 }, - { 178, 0 }, - { 178, -2 }, - { 180, -2 }, - { 180, -3 }, - { 180, -3 }, - { 180, -3 }, - { 181, -2 }, - { 181, -2 }, - { 181, -1 }, - { 181, -1 }, - { 181, -2 }, - { 179, -3 }, - { 179, -2 }, - { 182, 0 }, - { 182, -2 }, - { 182, -2 }, - { 161, 0 }, - { 184, -1 }, - { 185, -2 }, - { 185, -7 }, - { 185, -5 }, - { 185, -5 }, - { 185, -10 }, - { 188, 0 }, - { 174, 0 }, - { 174, -3 }, - { 189, 0 }, - { 189, -2 }, - { 190, -1 }, - { 190, -1 }, - { 149, -4 }, - { 192, -2 }, - { 192, 0 }, - { 149, -9 }, - { 149, -4 }, - { 149, -1 }, - { 163, -2 }, - { 194, -3 }, - { 197, -1 }, - { 197, -2 }, - { 197, -1 }, - { 195, -9 }, - { 206, -4 }, - { 206, -5 }, - { 198, -1 }, - { 198, -1 }, - { 198, 0 }, - { 209, 0 }, - { 199, -3 }, - { 199, -2 }, - { 199, -4 }, - { 210, -2 }, - { 210, 0 }, - { 200, 0 }, - { 200, -2 }, - { 212, -2 }, - { 212, 0 }, - { 211, -7 }, - { 211, -9 }, - { 211, -7 }, - { 211, -7 }, - { 159, 0 }, - { 159, -2 }, - { 193, -2 }, - { 213, -1 }, - { 213, -2 }, - { 213, -3 }, - { 213, -4 }, - { 215, -2 }, - { 215, 0 }, - { 214, 0 }, - { 214, -3 }, - { 214, -2 }, - { 216, -4 }, - { 216, 0 }, - { 204, 0 }, - { 204, -3 }, - { 186, -4 }, - { 186, -2 }, - { 175, -1 }, - { 175, -1 }, - { 175, 0 }, - { 202, 0 }, - { 202, -3 }, - { 203, 0 }, - { 203, -2 }, - { 205, 0 }, - { 205, -2 }, - { 205, -4 }, - { 205, -4 }, - { 149, -6 }, - { 201, 0 }, - { 201, -2 }, - { 149, -8 }, - { 218, -5 }, - { 218, -7 }, - { 218, -3 }, - { 218, -5 }, - { 149, -6 }, - { 149, -7 }, - { 219, -2 }, - { 219, -1 }, - { 220, 0 }, - { 220, -3 }, - { 217, -3 }, - { 217, -1 }, - { 173, -3 }, - { 173, -1 }, - { 173, -1 }, - { 173, -3 }, - { 173, -5 }, - { 172, -1 }, - { 172, -1 }, - { 172, -1 }, - { 173, -1 }, - { 173, -3 }, - { 173, -6 }, - { 173, -5 }, - { 173, -4 }, - { 172, -1 }, - { 173, -5 }, - { 173, -3 }, - { 173, -3 }, - { 173, -3 }, - { 173, -3 }, - { 173, -3 }, - { 173, -3 }, - { 173, -3 }, - { 173, -3 }, - { 221, -2 }, - { 173, -3 }, - { 173, -5 }, - { 173, -2 }, - { 173, -3 }, - { 173, -3 }, - { 173, -4 }, - { 173, -2 }, - { 173, -2 }, - { 173, -2 }, - { 173, -2 }, - { 222, -1 }, - { 222, -2 }, - { 173, -5 }, - { 223, -1 }, - { 223, -2 }, - { 173, -5 }, - { 173, -3 }, - { 173, -5 }, - { 173, -5 }, - { 173, -4 }, - { 173, -5 }, - { 226, -5 }, - { 226, -4 }, - { 227, -2 }, - { 227, 0 }, - { 225, -1 }, - { 225, 0 }, - { 208, 0 }, - { 207, -3 }, - { 207, -1 }, - { 224, 0 }, - { 224, -3 }, - { 149, -12 }, - { 228, -1 }, - { 228, 0 }, - { 177, 0 }, - { 177, -3 }, - { 187, -5 }, - { 187, -3 }, - { 229, 0 }, - { 229, -2 }, - { 149, -4 }, - { 149, -1 }, - { 149, -2 }, - { 149, -3 }, - { 149, -5 }, - { 149, -6 }, - { 149, -5 }, - { 149, -6 }, - { 169, -2 }, - { 170, -2 }, - { 149, -5 }, - { 231, -11 }, - { 233, -1 }, - { 233, -2 }, - { 233, 0 }, - { 234, -1 }, - { 234, -1 }, - { 234, -3 }, - { 236, 0 }, - { 236, -2 }, - { 232, -3 }, - { 232, -2 }, - { 238, -3 }, - { 239, -3 }, - { 239, -2 }, - { 237, -7 }, - { 237, -5 }, - { 237, -5 }, - { 237, -1 }, - { 173, -4 }, - { 173, -6 }, - { 191, -1 }, - { 191, -1 }, - { 191, -1 }, - { 149, -4 }, - { 149, -6 }, - { 149, -3 }, - { 241, 0 }, - { 241, -2 }, - { 149, -1 }, - { 149, -3 }, - { 149, -1 }, - { 149, -3 }, - { 149, -6 }, - { 149, -7 }, - { 242, -1 }, - { 149, -1 }, - { 149, -4 }, - { 244, -8 }, - { 246, 0 }, - { 247, -1 }, - { 247, -3 }, - { 248, -1 }, - { 196, 0 }, - { 196, -2 }, - { 196, -3 }, - { 250, -6 }, - { 250, -8 }, - { 144, -1 }, - { 145, -2 }, - { 145, -1 }, - { 146, -1 }, - { 146, -3 }, - { 147, 0 }, - { 151, 0 }, - { 151, -1 }, - { 151, -2 }, - { 153, -1 }, - { 153, 0 }, - { 149, -2 }, - { 160, -4 }, - { 160, -2 }, - { 152, -1 }, - { 152, -1 }, - { 152, -1 }, - { 166, -1 }, - { 167, -1 }, - { 168, -1 }, - { 168, -1 }, - { 165, -2 }, - { 165, 0 }, - { 171, -2 }, - { 161, -2 }, - { 183, -3 }, - { 183, -1 }, - { 184, 0 }, - { 188, -1 }, - { 190, -1 }, - { 194, -1 }, - { 195, -1 }, - { 209, -2 }, - { 210, -1 }, - { 173, -1 }, - { 221, -1 }, - { 208, -1 }, - { 230, -1 }, - { 230, -1 }, - { 230, -1 }, - { 230, -1 }, - { 230, -1 }, - { 169, -1 }, - { 235, 0 }, - { 235, -3 }, - { 238, -1 }, - { 239, 0 }, - { 240, -1 }, - { 240, 0 }, - { 243, 0 }, - { 243, -1 }, - { 245, -1 }, - { 245, -3 }, - { 246, -2 }, - { 249, 0 }, - { 249, -4 }, - { 249, -2 }, + { 147, -1 }, /* (0) explain ::= EXPLAIN */ + { 147, -3 }, /* (1) explain ::= EXPLAIN QUERY PLAN */ + { 148, -1 }, /* (2) cmdx ::= cmd */ + { 149, -3 }, /* (3) cmd ::= BEGIN transtype trans_opt */ + { 150, 0 }, /* (4) transtype ::= */ + { 150, -1 }, /* (5) transtype ::= DEFERRED */ + { 150, -1 }, /* (6) transtype ::= IMMEDIATE */ + { 150, -1 }, /* (7) transtype ::= EXCLUSIVE */ + { 149, -2 }, /* (8) cmd ::= COMMIT|END trans_opt */ + { 149, -2 }, /* (9) cmd ::= ROLLBACK trans_opt */ + { 149, -2 }, /* (10) cmd ::= SAVEPOINT nm */ + { 149, -3 }, /* (11) cmd ::= RELEASE savepoint_opt nm */ + { 149, -5 }, /* (12) cmd ::= ROLLBACK trans_opt TO savepoint_opt nm */ + { 154, -6 }, /* (13) create_table ::= createkw temp TABLE ifnotexists nm dbnm */ + { 156, -1 }, /* (14) createkw ::= CREATE */ + { 158, 0 }, /* (15) ifnotexists ::= */ + { 158, -3 }, /* (16) ifnotexists ::= IF NOT EXISTS */ + { 157, -1 }, /* (17) temp ::= TEMP */ + { 157, 0 }, /* (18) temp ::= */ + { 155, -5 }, /* (19) create_table_args ::= LP columnlist conslist_opt RP table_options */ + { 155, -2 }, /* (20) create_table_args ::= AS select */ + { 162, 0 }, /* (21) table_options ::= */ + { 162, -2 }, /* (22) table_options ::= WITHOUT nm */ + { 164, -2 }, /* (23) columnname ::= nm typetoken */ + { 166, 0 }, /* (24) typetoken ::= */ + { 166, -4 }, /* (25) typetoken ::= typename LP signed RP */ + { 166, -6 }, /* (26) typetoken ::= typename LP signed COMMA signed RP */ + { 167, -2 }, /* (27) typename ::= typename ID|STRING */ + { 171, 0 }, /* (28) scanpt ::= */ + { 172, -2 }, /* (29) ccons ::= CONSTRAINT nm */ + { 172, -4 }, /* (30) ccons ::= DEFAULT scanpt term scanpt */ + { 172, -4 }, /* (31) ccons ::= DEFAULT LP expr RP */ + { 172, -4 }, /* (32) ccons ::= DEFAULT PLUS term scanpt */ + { 172, -4 }, /* (33) ccons ::= DEFAULT MINUS term scanpt */ + { 172, -3 }, /* (34) ccons ::= DEFAULT scanpt ID|INDEXED */ + { 172, -3 }, /* (35) ccons ::= NOT NULL onconf */ + { 172, -5 }, /* (36) ccons ::= PRIMARY KEY sortorder onconf autoinc */ + { 172, -2 }, /* (37) ccons ::= UNIQUE onconf */ + { 172, -4 }, /* (38) ccons ::= CHECK LP expr RP */ + { 172, -4 }, /* (39) ccons ::= REFERENCES nm eidlist_opt refargs */ + { 172, -1 }, /* (40) ccons ::= defer_subclause */ + { 172, -2 }, /* (41) ccons ::= COLLATE ID|STRING */ + { 177, 0 }, /* (42) autoinc ::= */ + { 177, -1 }, /* (43) autoinc ::= AUTOINCR */ + { 179, 0 }, /* (44) refargs ::= */ + { 179, -2 }, /* (45) refargs ::= refargs refarg */ + { 181, -2 }, /* (46) refarg ::= MATCH nm */ + { 181, -3 }, /* (47) refarg ::= ON INSERT refact */ + { 181, -3 }, /* (48) refarg ::= ON DELETE refact */ + { 181, -3 }, /* (49) refarg ::= ON UPDATE refact */ + { 182, -2 }, /* (50) refact ::= SET NULL */ + { 182, -2 }, /* (51) refact ::= SET DEFAULT */ + { 182, -1 }, /* (52) refact ::= CASCADE */ + { 182, -1 }, /* (53) refact ::= RESTRICT */ + { 182, -2 }, /* (54) refact ::= NO ACTION */ + { 180, -3 }, /* (55) defer_subclause ::= NOT DEFERRABLE init_deferred_pred_opt */ + { 180, -2 }, /* (56) defer_subclause ::= DEFERRABLE init_deferred_pred_opt */ + { 183, 0 }, /* (57) init_deferred_pred_opt ::= */ + { 183, -2 }, /* (58) init_deferred_pred_opt ::= INITIALLY DEFERRED */ + { 183, -2 }, /* (59) init_deferred_pred_opt ::= INITIALLY IMMEDIATE */ + { 161, 0 }, /* (60) conslist_opt ::= */ + { 185, -1 }, /* (61) tconscomma ::= COMMA */ + { 186, -2 }, /* (62) tcons ::= CONSTRAINT nm */ + { 186, -7 }, /* (63) tcons ::= PRIMARY KEY LP sortlist autoinc RP onconf */ + { 186, -5 }, /* (64) tcons ::= UNIQUE LP sortlist RP onconf */ + { 186, -5 }, /* (65) tcons ::= CHECK LP expr RP onconf */ + { 186, -10 }, /* (66) tcons ::= FOREIGN KEY LP eidlist RP REFERENCES nm eidlist_opt refargs defer_subclause_opt */ + { 189, 0 }, /* (67) defer_subclause_opt ::= */ + { 175, 0 }, /* (68) onconf ::= */ + { 175, -3 }, /* (69) onconf ::= ON CONFLICT resolvetype */ + { 190, 0 }, /* (70) orconf ::= */ + { 190, -2 }, /* (71) orconf ::= OR resolvetype */ + { 191, -1 }, /* (72) resolvetype ::= IGNORE */ + { 191, -1 }, /* (73) resolvetype ::= REPLACE */ + { 149, -4 }, /* (74) cmd ::= DROP TABLE ifexists fullname */ + { 193, -2 }, /* (75) ifexists ::= IF EXISTS */ + { 193, 0 }, /* (76) ifexists ::= */ + { 149, -9 }, /* (77) cmd ::= createkw temp VIEW ifnotexists nm dbnm eidlist_opt AS select */ + { 149, -4 }, /* (78) cmd ::= DROP VIEW ifexists fullname */ + { 149, -1 }, /* (79) cmd ::= select */ + { 163, -3 }, /* (80) select ::= WITH wqlist selectnowith */ + { 163, -4 }, /* (81) select ::= WITH RECURSIVE wqlist selectnowith */ + { 163, -1 }, /* (82) select ::= selectnowith */ + { 195, -3 }, /* (83) selectnowith ::= selectnowith multiselect_op oneselect */ + { 198, -1 }, /* (84) multiselect_op ::= UNION */ + { 198, -2 }, /* (85) multiselect_op ::= UNION ALL */ + { 198, -1 }, /* (86) multiselect_op ::= EXCEPT|INTERSECT */ + { 196, -9 }, /* (87) oneselect ::= SELECT distinct selcollist from where_opt groupby_opt having_opt orderby_opt limit_opt */ + { 207, -4 }, /* (88) values ::= VALUES LP nexprlist RP */ + { 207, -5 }, /* (89) values ::= values COMMA LP exprlist RP */ + { 199, -1 }, /* (90) distinct ::= DISTINCT */ + { 199, -1 }, /* (91) distinct ::= ALL */ + { 199, 0 }, /* (92) distinct ::= */ + { 210, 0 }, /* (93) sclp ::= */ + { 200, -5 }, /* (94) selcollist ::= sclp scanpt expr scanpt as */ + { 200, -3 }, /* (95) selcollist ::= sclp scanpt STAR */ + { 200, -5 }, /* (96) selcollist ::= sclp scanpt nm DOT STAR */ + { 211, -2 }, /* (97) as ::= AS nm */ + { 211, 0 }, /* (98) as ::= */ + { 201, 0 }, /* (99) from ::= */ + { 201, -2 }, /* (100) from ::= FROM seltablist */ + { 213, -2 }, /* (101) stl_prefix ::= seltablist joinop */ + { 213, 0 }, /* (102) stl_prefix ::= */ + { 212, -7 }, /* (103) seltablist ::= stl_prefix nm dbnm as indexed_opt on_opt using_opt */ + { 212, -9 }, /* (104) seltablist ::= stl_prefix nm dbnm LP exprlist RP as on_opt using_opt */ + { 212, -7 }, /* (105) seltablist ::= stl_prefix LP select RP as on_opt using_opt */ + { 212, -7 }, /* (106) seltablist ::= stl_prefix LP seltablist RP as on_opt using_opt */ + { 159, 0 }, /* (107) dbnm ::= */ + { 159, -2 }, /* (108) dbnm ::= DOT nm */ + { 194, -1 }, /* (109) fullname ::= nm */ + { 194, -3 }, /* (110) fullname ::= nm DOT nm */ + { 214, -1 }, /* (111) joinop ::= COMMA|JOIN */ + { 214, -2 }, /* (112) joinop ::= JOIN_KW JOIN */ + { 214, -3 }, /* (113) joinop ::= JOIN_KW nm JOIN */ + { 214, -4 }, /* (114) joinop ::= JOIN_KW nm nm JOIN */ + { 216, -2 }, /* (115) on_opt ::= ON expr */ + { 216, 0 }, /* (116) on_opt ::= */ + { 215, 0 }, /* (117) indexed_opt ::= */ + { 215, -3 }, /* (118) indexed_opt ::= INDEXED BY nm */ + { 215, -2 }, /* (119) indexed_opt ::= NOT INDEXED */ + { 217, -4 }, /* (120) using_opt ::= USING LP idlist RP */ + { 217, 0 }, /* (121) using_opt ::= */ + { 205, 0 }, /* (122) orderby_opt ::= */ + { 205, -3 }, /* (123) orderby_opt ::= ORDER BY sortlist */ + { 187, -4 }, /* (124) sortlist ::= sortlist COMMA expr sortorder */ + { 187, -2 }, /* (125) sortlist ::= expr sortorder */ + { 176, -1 }, /* (126) sortorder ::= ASC */ + { 176, -1 }, /* (127) sortorder ::= DESC */ + { 176, 0 }, /* (128) sortorder ::= */ + { 203, 0 }, /* (129) groupby_opt ::= */ + { 203, -3 }, /* (130) groupby_opt ::= GROUP BY nexprlist */ + { 204, 0 }, /* (131) having_opt ::= */ + { 204, -2 }, /* (132) having_opt ::= HAVING expr */ + { 206, 0 }, /* (133) limit_opt ::= */ + { 206, -2 }, /* (134) limit_opt ::= LIMIT expr */ + { 206, -4 }, /* (135) limit_opt ::= LIMIT expr OFFSET expr */ + { 206, -4 }, /* (136) limit_opt ::= LIMIT expr COMMA expr */ + { 149, -6 }, /* (137) cmd ::= with DELETE FROM fullname indexed_opt where_opt */ + { 202, 0 }, /* (138) where_opt ::= */ + { 202, -2 }, /* (139) where_opt ::= WHERE expr */ + { 149, -8 }, /* (140) cmd ::= with UPDATE orconf fullname indexed_opt SET setlist where_opt */ + { 220, -5 }, /* (141) setlist ::= setlist COMMA nm EQ expr */ + { 220, -7 }, /* (142) setlist ::= setlist COMMA LP idlist RP EQ expr */ + { 220, -3 }, /* (143) setlist ::= nm EQ expr */ + { 220, -5 }, /* (144) setlist ::= LP idlist RP EQ expr */ + { 149, -6 }, /* (145) cmd ::= with insert_cmd INTO fullname idlist_opt select */ + { 149, -7 }, /* (146) cmd ::= with insert_cmd INTO fullname idlist_opt DEFAULT VALUES */ + { 221, -2 }, /* (147) insert_cmd ::= INSERT orconf */ + { 221, -1 }, /* (148) insert_cmd ::= REPLACE */ + { 222, 0 }, /* (149) idlist_opt ::= */ + { 222, -3 }, /* (150) idlist_opt ::= LP idlist RP */ + { 218, -3 }, /* (151) idlist ::= idlist COMMA nm */ + { 218, -1 }, /* (152) idlist ::= nm */ + { 174, -3 }, /* (153) expr ::= LP expr RP */ + { 174, -1 }, /* (154) expr ::= ID|INDEXED */ + { 174, -1 }, /* (155) expr ::= JOIN_KW */ + { 174, -3 }, /* (156) expr ::= nm DOT nm */ + { 174, -5 }, /* (157) expr ::= nm DOT nm DOT nm */ + { 173, -1 }, /* (158) term ::= NULL|FLOAT|BLOB */ + { 173, -1 }, /* (159) term ::= STRING */ + { 173, -1 }, /* (160) term ::= INTEGER */ + { 174, -1 }, /* (161) expr ::= VARIABLE */ + { 174, -3 }, /* (162) expr ::= expr COLLATE ID|STRING */ + { 174, -6 }, /* (163) expr ::= CAST LP expr AS typetoken RP */ + { 174, -5 }, /* (164) expr ::= ID|INDEXED LP distinct exprlist RP */ + { 174, -4 }, /* (165) expr ::= ID|INDEXED LP STAR RP */ + { 173, -1 }, /* (166) term ::= CTIME_KW */ + { 174, -5 }, /* (167) expr ::= LP nexprlist COMMA expr RP */ + { 174, -3 }, /* (168) expr ::= expr AND expr */ + { 174, -3 }, /* (169) expr ::= expr OR expr */ + { 174, -3 }, /* (170) expr ::= expr LT|GT|GE|LE expr */ + { 174, -3 }, /* (171) expr ::= expr EQ|NE expr */ + { 174, -3 }, /* (172) expr ::= expr BITAND|BITOR|LSHIFT|RSHIFT expr */ + { 174, -3 }, /* (173) expr ::= expr PLUS|MINUS expr */ + { 174, -3 }, /* (174) expr ::= expr STAR|SLASH|REM expr */ + { 174, -3 }, /* (175) expr ::= expr CONCAT expr */ + { 223, -2 }, /* (176) likeop ::= NOT LIKE_KW|MATCH */ + { 174, -3 }, /* (177) expr ::= expr likeop expr */ + { 174, -5 }, /* (178) expr ::= expr likeop expr ESCAPE expr */ + { 174, -2 }, /* (179) expr ::= expr ISNULL|NOTNULL */ + { 174, -3 }, /* (180) expr ::= expr NOT NULL */ + { 174, -3 }, /* (181) expr ::= expr IS expr */ + { 174, -4 }, /* (182) expr ::= expr IS NOT expr */ + { 174, -2 }, /* (183) expr ::= NOT expr */ + { 174, -2 }, /* (184) expr ::= BITNOT expr */ + { 174, -2 }, /* (185) expr ::= MINUS expr */ + { 174, -2 }, /* (186) expr ::= PLUS expr */ + { 224, -1 }, /* (187) between_op ::= BETWEEN */ + { 224, -2 }, /* (188) between_op ::= NOT BETWEEN */ + { 174, -5 }, /* (189) expr ::= expr between_op expr AND expr */ + { 225, -1 }, /* (190) in_op ::= IN */ + { 225, -2 }, /* (191) in_op ::= NOT IN */ + { 174, -5 }, /* (192) expr ::= expr in_op LP exprlist RP */ + { 174, -3 }, /* (193) expr ::= LP select RP */ + { 174, -5 }, /* (194) expr ::= expr in_op LP select RP */ + { 174, -5 }, /* (195) expr ::= expr in_op nm dbnm paren_exprlist */ + { 174, -4 }, /* (196) expr ::= EXISTS LP select RP */ + { 174, -5 }, /* (197) expr ::= CASE case_operand case_exprlist case_else END */ + { 228, -5 }, /* (198) case_exprlist ::= case_exprlist WHEN expr THEN expr */ + { 228, -4 }, /* (199) case_exprlist ::= WHEN expr THEN expr */ + { 229, -2 }, /* (200) case_else ::= ELSE expr */ + { 229, 0 }, /* (201) case_else ::= */ + { 227, -1 }, /* (202) case_operand ::= expr */ + { 227, 0 }, /* (203) case_operand ::= */ + { 209, 0 }, /* (204) exprlist ::= */ + { 208, -3 }, /* (205) nexprlist ::= nexprlist COMMA expr */ + { 208, -1 }, /* (206) nexprlist ::= expr */ + { 226, 0 }, /* (207) paren_exprlist ::= */ + { 226, -3 }, /* (208) paren_exprlist ::= LP exprlist RP */ + { 149, -12 }, /* (209) cmd ::= createkw uniqueflag INDEX ifnotexists nm dbnm ON nm LP sortlist RP where_opt */ + { 230, -1 }, /* (210) uniqueflag ::= UNIQUE */ + { 230, 0 }, /* (211) uniqueflag ::= */ + { 178, 0 }, /* (212) eidlist_opt ::= */ + { 178, -3 }, /* (213) eidlist_opt ::= LP eidlist RP */ + { 188, -5 }, /* (214) eidlist ::= eidlist COMMA nm collate sortorder */ + { 188, -3 }, /* (215) eidlist ::= nm collate sortorder */ + { 231, 0 }, /* (216) collate ::= */ + { 231, -2 }, /* (217) collate ::= COLLATE ID|STRING */ + { 149, -4 }, /* (218) cmd ::= DROP INDEX ifexists fullname */ + { 149, -1 }, /* (219) cmd ::= VACUUM */ + { 149, -2 }, /* (220) cmd ::= VACUUM nm */ + { 149, -3 }, /* (221) cmd ::= PRAGMA nm dbnm */ + { 149, -5 }, /* (222) cmd ::= PRAGMA nm dbnm EQ nmnum */ + { 149, -6 }, /* (223) cmd ::= PRAGMA nm dbnm LP nmnum RP */ + { 149, -5 }, /* (224) cmd ::= PRAGMA nm dbnm EQ minus_num */ + { 149, -6 }, /* (225) cmd ::= PRAGMA nm dbnm LP minus_num RP */ + { 169, -2 }, /* (226) plus_num ::= PLUS INTEGER|FLOAT */ + { 170, -2 }, /* (227) minus_num ::= MINUS INTEGER|FLOAT */ + { 149, -5 }, /* (228) cmd ::= createkw trigger_decl BEGIN trigger_cmd_list END */ + { 233, -11 }, /* (229) trigger_decl ::= temp TRIGGER ifnotexists nm dbnm trigger_time trigger_event ON fullname foreach_clause when_clause */ + { 235, -1 }, /* (230) trigger_time ::= BEFORE|AFTER */ + { 235, -2 }, /* (231) trigger_time ::= INSTEAD OF */ + { 235, 0 }, /* (232) trigger_time ::= */ + { 236, -1 }, /* (233) trigger_event ::= DELETE|INSERT */ + { 236, -1 }, /* (234) trigger_event ::= UPDATE */ + { 236, -3 }, /* (235) trigger_event ::= UPDATE OF idlist */ + { 238, 0 }, /* (236) when_clause ::= */ + { 238, -2 }, /* (237) when_clause ::= WHEN expr */ + { 234, -3 }, /* (238) trigger_cmd_list ::= trigger_cmd_list trigger_cmd SEMI */ + { 234, -2 }, /* (239) trigger_cmd_list ::= trigger_cmd SEMI */ + { 240, -3 }, /* (240) trnm ::= nm DOT nm */ + { 241, -3 }, /* (241) tridxby ::= INDEXED BY nm */ + { 241, -2 }, /* (242) tridxby ::= NOT INDEXED */ + { 239, -8 }, /* (243) trigger_cmd ::= UPDATE orconf trnm tridxby SET setlist where_opt scanpt */ + { 239, -7 }, /* (244) trigger_cmd ::= scanpt insert_cmd INTO trnm idlist_opt select scanpt */ + { 239, -6 }, /* (245) trigger_cmd ::= DELETE FROM trnm tridxby where_opt scanpt */ + { 239, -3 }, /* (246) trigger_cmd ::= scanpt select scanpt */ + { 174, -4 }, /* (247) expr ::= RAISE LP IGNORE RP */ + { 174, -6 }, /* (248) expr ::= RAISE LP raisetype COMMA nm RP */ + { 192, -1 }, /* (249) raisetype ::= ROLLBACK */ + { 192, -1 }, /* (250) raisetype ::= ABORT */ + { 192, -1 }, /* (251) raisetype ::= FAIL */ + { 149, -4 }, /* (252) cmd ::= DROP TRIGGER ifexists fullname */ + { 149, -6 }, /* (253) cmd ::= ATTACH database_kw_opt expr AS expr key_opt */ + { 149, -3 }, /* (254) cmd ::= DETACH database_kw_opt expr */ + { 243, 0 }, /* (255) key_opt ::= */ + { 243, -2 }, /* (256) key_opt ::= KEY expr */ + { 149, -1 }, /* (257) cmd ::= REINDEX */ + { 149, -3 }, /* (258) cmd ::= REINDEX nm dbnm */ + { 149, -1 }, /* (259) cmd ::= ANALYZE */ + { 149, -3 }, /* (260) cmd ::= ANALYZE nm dbnm */ + { 149, -6 }, /* (261) cmd ::= ALTER TABLE fullname RENAME TO nm */ + { 149, -7 }, /* (262) cmd ::= ALTER TABLE add_column_fullname ADD kwcolumn_opt columnname carglist */ + { 244, -1 }, /* (263) add_column_fullname ::= fullname */ + { 149, -1 }, /* (264) cmd ::= create_vtab */ + { 149, -4 }, /* (265) cmd ::= create_vtab LP vtabarglist RP */ + { 246, -8 }, /* (266) create_vtab ::= createkw VIRTUAL TABLE ifnotexists nm dbnm USING nm */ + { 248, 0 }, /* (267) vtabarg ::= */ + { 249, -1 }, /* (268) vtabargtoken ::= ANY */ + { 249, -3 }, /* (269) vtabargtoken ::= lp anylist RP */ + { 250, -1 }, /* (270) lp ::= LP */ + { 219, -2 }, /* (271) with ::= WITH wqlist */ + { 219, -3 }, /* (272) with ::= WITH RECURSIVE wqlist */ + { 197, -6 }, /* (273) wqlist ::= nm eidlist_opt AS LP select RP */ + { 197, -8 }, /* (274) wqlist ::= wqlist COMMA nm eidlist_opt AS LP select RP */ + { 144, -1 }, /* (275) input ::= cmdlist */ + { 145, -2 }, /* (276) cmdlist ::= cmdlist ecmd */ + { 145, -1 }, /* (277) cmdlist ::= ecmd */ + { 146, -1 }, /* (278) ecmd ::= SEMI */ + { 146, -3 }, /* (279) ecmd ::= explain cmdx SEMI */ + { 147, 0 }, /* (280) explain ::= */ + { 151, 0 }, /* (281) trans_opt ::= */ + { 151, -1 }, /* (282) trans_opt ::= TRANSACTION */ + { 151, -2 }, /* (283) trans_opt ::= TRANSACTION nm */ + { 153, -1 }, /* (284) savepoint_opt ::= SAVEPOINT */ + { 153, 0 }, /* (285) savepoint_opt ::= */ + { 149, -2 }, /* (286) cmd ::= create_table create_table_args */ + { 160, -4 }, /* (287) columnlist ::= columnlist COMMA columnname carglist */ + { 160, -2 }, /* (288) columnlist ::= columnname carglist */ + { 152, -1 }, /* (289) nm ::= ID|INDEXED */ + { 152, -1 }, /* (290) nm ::= STRING */ + { 152, -1 }, /* (291) nm ::= JOIN_KW */ + { 166, -1 }, /* (292) typetoken ::= typename */ + { 167, -1 }, /* (293) typename ::= ID|STRING */ + { 168, -1 }, /* (294) signed ::= plus_num */ + { 168, -1 }, /* (295) signed ::= minus_num */ + { 165, -2 }, /* (296) carglist ::= carglist ccons */ + { 165, 0 }, /* (297) carglist ::= */ + { 172, -2 }, /* (298) ccons ::= NULL onconf */ + { 161, -2 }, /* (299) conslist_opt ::= COMMA conslist */ + { 184, -3 }, /* (300) conslist ::= conslist tconscomma tcons */ + { 184, -1 }, /* (301) conslist ::= tcons */ + { 185, 0 }, /* (302) tconscomma ::= */ + { 189, -1 }, /* (303) defer_subclause_opt ::= defer_subclause */ + { 191, -1 }, /* (304) resolvetype ::= raisetype */ + { 195, -1 }, /* (305) selectnowith ::= oneselect */ + { 196, -1 }, /* (306) oneselect ::= values */ + { 210, -2 }, /* (307) sclp ::= selcollist COMMA */ + { 211, -1 }, /* (308) as ::= ID|STRING */ + { 174, -1 }, /* (309) expr ::= term */ + { 223, -1 }, /* (310) likeop ::= LIKE_KW|MATCH */ + { 209, -1 }, /* (311) exprlist ::= nexprlist */ + { 232, -1 }, /* (312) nmnum ::= plus_num */ + { 232, -1 }, /* (313) nmnum ::= nm */ + { 232, -1 }, /* (314) nmnum ::= ON */ + { 232, -1 }, /* (315) nmnum ::= DELETE */ + { 232, -1 }, /* (316) nmnum ::= DEFAULT */ + { 169, -1 }, /* (317) plus_num ::= INTEGER|FLOAT */ + { 237, 0 }, /* (318) foreach_clause ::= */ + { 237, -3 }, /* (319) foreach_clause ::= FOR EACH ROW */ + { 240, -1 }, /* (320) trnm ::= nm */ + { 241, 0 }, /* (321) tridxby ::= */ + { 242, -1 }, /* (322) database_kw_opt ::= DATABASE */ + { 242, 0 }, /* (323) database_kw_opt ::= */ + { 245, 0 }, /* (324) kwcolumn_opt ::= */ + { 245, -1 }, /* (325) kwcolumn_opt ::= COLUMNKW */ + { 247, -1 }, /* (326) vtabarglist ::= vtabarg */ + { 247, -3 }, /* (327) vtabarglist ::= vtabarglist COMMA vtabarg */ + { 248, -2 }, /* (328) vtabarg ::= vtabarg vtabargtoken */ + { 251, 0 }, /* (329) anylist ::= */ + { 251, -4 }, /* (330) anylist ::= anylist LP anylist RP */ + { 251, -2 }, /* (331) anylist ::= anylist ANY */ + { 219, 0 }, /* (332) with ::= */ }; static void yy_accept(yyParser*); /* Forward Declaration */ @@ -139131,22 +142186,38 @@ static void yy_accept(yyParser*); /* Forward Declaration */ /* ** Perform a reduce action and the shift that must immediately ** follow the reduce. +** +** The yyLookahead and yyLookaheadToken parameters provide reduce actions +** access to the lookahead token (if any). The yyLookahead will be YYNOCODE +** if the lookahead token has already been consumed. As this procedure is +** only called from one place, optimizing compilers will in-line it, which +** means that the extra parameters have no performance impact. */ static void yy_reduce( yyParser *yypParser, /* The parser */ - unsigned int yyruleno /* Number of the rule by which to reduce */ + unsigned int yyruleno, /* Number of the rule by which to reduce */ + int yyLookahead, /* Lookahead token, or YYNOCODE if none */ + sqlite3ParserTOKENTYPE yyLookaheadToken /* Value of the lookahead token */ ){ int yygoto; /* The next state */ int yyact; /* The next action */ yyStackEntry *yymsp; /* The top of the parser's stack */ int yysize; /* Amount to pop the stack */ sqlite3ParserARG_FETCH; + (void)yyLookahead; + (void)yyLookaheadToken; yymsp = yypParser->yytos; #ifndef NDEBUG if( yyTraceFILE && yyruleno<(int)(sizeof(yyRuleName)/sizeof(yyRuleName[0])) ){ yysize = yyRuleInfo[yyruleno].nrhs; - fprintf(yyTraceFILE, "%sReduce [%s], go to state %d.\n", yyTracePrompt, - yyRuleName[yyruleno], yymsp[yysize].stateno); + if( yysize ){ + fprintf(yyTraceFILE, "%sReduce %d [%s], go to state %d.\n", + yyTracePrompt, + yyruleno, yyRuleName[yyruleno], yymsp[yysize].stateno); + }else{ + fprintf(yyTraceFILE, "%sReduce %d [%s].\n", + yyTracePrompt, yyruleno, yyRuleName[yyruleno]); + } } #endif /* NDEBUG */ @@ -139197,15 +142268,15 @@ static void yy_reduce( { sqlite3FinishCoding(pParse); } break; case 3: /* cmd ::= BEGIN transtype trans_opt */ -{sqlite3BeginTransaction(pParse, yymsp[-1].minor.yy194);} +{sqlite3BeginTransaction(pParse, yymsp[-1].minor.yy4);} break; case 4: /* transtype ::= */ -{yymsp[1].minor.yy194 = TK_DEFERRED;} +{yymsp[1].minor.yy4 = TK_DEFERRED;} break; case 5: /* transtype ::= DEFERRED */ case 6: /* transtype ::= IMMEDIATE */ yytestcase(yyruleno==6); case 7: /* transtype ::= EXCLUSIVE */ yytestcase(yyruleno==7); -{yymsp[0].minor.yy194 = yymsp[0].major; /*A-overwrites-X*/} +{yymsp[0].minor.yy4 = yymsp[0].major; /*A-overwrites-X*/} break; case 8: /* cmd ::= COMMIT|END trans_opt */ case 9: /* cmd ::= ROLLBACK trans_opt */ yytestcase(yyruleno==9); @@ -139228,7 +142299,7 @@ static void yy_reduce( break; case 13: /* create_table ::= createkw temp TABLE ifnotexists nm dbnm */ { - sqlite3StartTable(pParse,&yymsp[-1].minor.yy0,&yymsp[0].minor.yy0,yymsp[-4].minor.yy194,0,0,yymsp[-2].minor.yy194); + sqlite3StartTable(pParse,&yymsp[-1].minor.yy0,&yymsp[0].minor.yy0,yymsp[-4].minor.yy4,0,0,yymsp[-2].minor.yy4); } break; case 14: /* createkw ::= CREATE */ @@ -139237,38 +142308,38 @@ static void yy_reduce( case 15: /* ifnotexists ::= */ case 18: /* temp ::= */ yytestcase(yyruleno==18); case 21: /* table_options ::= */ yytestcase(yyruleno==21); - case 41: /* autoinc ::= */ yytestcase(yyruleno==41); - case 56: /* init_deferred_pred_opt ::= */ yytestcase(yyruleno==56); - case 66: /* defer_subclause_opt ::= */ yytestcase(yyruleno==66); - case 75: /* ifexists ::= */ yytestcase(yyruleno==75); - case 89: /* distinct ::= */ yytestcase(yyruleno==89); - case 212: /* collate ::= */ yytestcase(yyruleno==212); -{yymsp[1].minor.yy194 = 0;} + case 42: /* autoinc ::= */ yytestcase(yyruleno==42); + case 57: /* init_deferred_pred_opt ::= */ yytestcase(yyruleno==57); + case 67: /* defer_subclause_opt ::= */ yytestcase(yyruleno==67); + case 76: /* ifexists ::= */ yytestcase(yyruleno==76); + case 92: /* distinct ::= */ yytestcase(yyruleno==92); + case 216: /* collate ::= */ yytestcase(yyruleno==216); +{yymsp[1].minor.yy4 = 0;} break; case 16: /* ifnotexists ::= IF NOT EXISTS */ -{yymsp[-2].minor.yy194 = 1;} +{yymsp[-2].minor.yy4 = 1;} break; case 17: /* temp ::= TEMP */ - case 42: /* autoinc ::= AUTOINCR */ yytestcase(yyruleno==42); -{yymsp[0].minor.yy194 = 1;} + case 43: /* autoinc ::= AUTOINCR */ yytestcase(yyruleno==43); +{yymsp[0].minor.yy4 = 1;} break; case 19: /* create_table_args ::= LP columnlist conslist_opt RP table_options */ { - sqlite3EndTable(pParse,&yymsp[-2].minor.yy0,&yymsp[-1].minor.yy0,yymsp[0].minor.yy194,0); + sqlite3EndTable(pParse,&yymsp[-2].minor.yy0,&yymsp[-1].minor.yy0,yymsp[0].minor.yy4,0); } break; case 20: /* create_table_args ::= AS select */ { - sqlite3EndTable(pParse,0,0,0,yymsp[0].minor.yy243); - sqlite3SelectDelete(pParse->db, yymsp[0].minor.yy243); + sqlite3EndTable(pParse,0,0,0,yymsp[0].minor.yy387); + sqlite3SelectDelete(pParse->db, yymsp[0].minor.yy387); } break; case 22: /* table_options ::= WITHOUT nm */ { if( yymsp[0].minor.yy0.n==5 && sqlite3_strnicmp(yymsp[0].minor.yy0.z,"rowid",5)==0 ){ - yymsp[-1].minor.yy194 = TF_WithoutRowid | TF_NoVisibleRowid; + yymsp[-1].minor.yy4 = TF_WithoutRowid | TF_NoVisibleRowid; }else{ - yymsp[-1].minor.yy194 = 0; + yymsp[-1].minor.yy4 = 0; sqlite3ErrorMsg(pParse, "unknown table option: %.*s", yymsp[0].minor.yy0.n, yymsp[0].minor.yy0.z); } } @@ -139277,8 +142348,8 @@ static void yy_reduce( {sqlite3AddColumn(pParse,&yymsp[-1].minor.yy0,&yymsp[0].minor.yy0);} break; case 24: /* typetoken ::= */ - case 59: /* conslist_opt ::= */ yytestcase(yyruleno==59); - case 95: /* as ::= */ yytestcase(yyruleno==95); + case 60: /* conslist_opt ::= */ yytestcase(yyruleno==60); + case 98: /* as ::= */ yytestcase(yyruleno==98); {yymsp[1].minor.yy0.n = 0; yymsp[1].minor.yy0.z = 0;} break; case 25: /* typetoken ::= typename LP signed RP */ @@ -139294,210 +142365,239 @@ static void yy_reduce( case 27: /* typename ::= typename ID|STRING */ {yymsp[-1].minor.yy0.n=yymsp[0].minor.yy0.n+(int)(yymsp[0].minor.yy0.z-yymsp[-1].minor.yy0.z);} break; - case 28: /* ccons ::= CONSTRAINT nm */ - case 61: /* tcons ::= CONSTRAINT nm */ yytestcase(yyruleno==61); + case 28: /* scanpt ::= */ +{ + assert( yyLookahead!=YYNOCODE ); + yymsp[1].minor.yy336 = yyLookaheadToken.z; +} + break; + case 29: /* ccons ::= CONSTRAINT nm */ + case 62: /* tcons ::= CONSTRAINT nm */ yytestcase(yyruleno==62); {pParse->constraintName = yymsp[0].minor.yy0;} break; - case 29: /* ccons ::= DEFAULT term */ - case 31: /* ccons ::= DEFAULT PLUS term */ yytestcase(yyruleno==31); -{sqlite3AddDefaultValue(pParse,&yymsp[0].minor.yy190);} + case 30: /* ccons ::= DEFAULT scanpt term scanpt */ +{sqlite3AddDefaultValue(pParse,yymsp[-1].minor.yy314,yymsp[-2].minor.yy336,yymsp[0].minor.yy336);} break; - case 30: /* ccons ::= DEFAULT LP expr RP */ -{sqlite3AddDefaultValue(pParse,&yymsp[-1].minor.yy190);} + case 31: /* ccons ::= DEFAULT LP expr RP */ +{sqlite3AddDefaultValue(pParse,yymsp[-1].minor.yy314,yymsp[-2].minor.yy0.z+1,yymsp[0].minor.yy0.z);} break; - case 32: /* ccons ::= DEFAULT MINUS term */ + case 32: /* ccons ::= DEFAULT PLUS term scanpt */ +{sqlite3AddDefaultValue(pParse,yymsp[-1].minor.yy314,yymsp[-2].minor.yy0.z,yymsp[0].minor.yy336);} + break; + case 33: /* ccons ::= DEFAULT MINUS term scanpt */ { - ExprSpan v; - v.pExpr = sqlite3PExpr(pParse, TK_UMINUS, yymsp[0].minor.yy190.pExpr, 0); - v.zStart = yymsp[-1].minor.yy0.z; - v.zEnd = yymsp[0].minor.yy190.zEnd; - sqlite3AddDefaultValue(pParse,&v); + Expr *p = sqlite3PExpr(pParse, TK_UMINUS, yymsp[-1].minor.yy314, 0); + sqlite3AddDefaultValue(pParse,p,yymsp[-2].minor.yy0.z,yymsp[0].minor.yy336); } break; - case 33: /* ccons ::= DEFAULT ID|INDEXED */ + case 34: /* ccons ::= DEFAULT scanpt ID|INDEXED */ { - ExprSpan v; - spanExpr(&v, pParse, TK_STRING, yymsp[0].minor.yy0); - sqlite3AddDefaultValue(pParse,&v); + Expr *p = tokenExpr(pParse, TK_STRING, yymsp[0].minor.yy0); + if( p ){ + sqlite3ExprIdToTrueFalse(p); + testcase( p->op==TK_TRUEFALSE && sqlite3ExprTruthValue(p) ); + } + sqlite3AddDefaultValue(pParse,p,yymsp[0].minor.yy0.z,yymsp[0].minor.yy0.z+yymsp[0].minor.yy0.n); } break; - case 34: /* ccons ::= NOT NULL onconf */ -{sqlite3AddNotNull(pParse, yymsp[0].minor.yy194);} + case 35: /* ccons ::= NOT NULL onconf */ +{sqlite3AddNotNull(pParse, yymsp[0].minor.yy4);} break; - case 35: /* ccons ::= PRIMARY KEY sortorder onconf autoinc */ -{sqlite3AddPrimaryKey(pParse,0,yymsp[-1].minor.yy194,yymsp[0].minor.yy194,yymsp[-2].minor.yy194);} + case 36: /* ccons ::= PRIMARY KEY sortorder onconf autoinc */ +{sqlite3AddPrimaryKey(pParse,0,yymsp[-1].minor.yy4,yymsp[0].minor.yy4,yymsp[-2].minor.yy4);} break; - case 36: /* ccons ::= UNIQUE onconf */ -{sqlite3CreateIndex(pParse,0,0,0,0,yymsp[0].minor.yy194,0,0,0,0, + case 37: /* ccons ::= UNIQUE onconf */ +{sqlite3CreateIndex(pParse,0,0,0,0,yymsp[0].minor.yy4,0,0,0,0, SQLITE_IDXTYPE_UNIQUE);} break; - case 37: /* ccons ::= CHECK LP expr RP */ -{sqlite3AddCheckConstraint(pParse,yymsp[-1].minor.yy190.pExpr);} + case 38: /* ccons ::= CHECK LP expr RP */ +{sqlite3AddCheckConstraint(pParse,yymsp[-1].minor.yy314);} break; - case 38: /* ccons ::= REFERENCES nm eidlist_opt refargs */ -{sqlite3CreateForeignKey(pParse,0,&yymsp[-2].minor.yy0,yymsp[-1].minor.yy148,yymsp[0].minor.yy194);} + case 39: /* ccons ::= REFERENCES nm eidlist_opt refargs */ +{sqlite3CreateForeignKey(pParse,0,&yymsp[-2].minor.yy0,yymsp[-1].minor.yy322,yymsp[0].minor.yy4);} break; - case 39: /* ccons ::= defer_subclause */ -{sqlite3DeferForeignKey(pParse,yymsp[0].minor.yy194);} + case 40: /* ccons ::= defer_subclause */ +{sqlite3DeferForeignKey(pParse,yymsp[0].minor.yy4);} break; - case 40: /* ccons ::= COLLATE ID|STRING */ + case 41: /* ccons ::= COLLATE ID|STRING */ {sqlite3AddCollateType(pParse, &yymsp[0].minor.yy0);} break; - case 43: /* refargs ::= */ -{ yymsp[1].minor.yy194 = OE_None*0x0101; /* EV: R-19803-45884 */} + case 44: /* refargs ::= */ +{ yymsp[1].minor.yy4 = OE_None*0x0101; /* EV: R-19803-45884 */} break; - case 44: /* refargs ::= refargs refarg */ -{ yymsp[-1].minor.yy194 = (yymsp[-1].minor.yy194 & ~yymsp[0].minor.yy497.mask) | yymsp[0].minor.yy497.value; } + case 45: /* refargs ::= refargs refarg */ +{ yymsp[-1].minor.yy4 = (yymsp[-1].minor.yy4 & ~yymsp[0].minor.yy215.mask) | yymsp[0].minor.yy215.value; } break; - case 45: /* refarg ::= MATCH nm */ -{ yymsp[-1].minor.yy497.value = 0; yymsp[-1].minor.yy497.mask = 0x000000; } + case 46: /* refarg ::= MATCH nm */ +{ yymsp[-1].minor.yy215.value = 0; yymsp[-1].minor.yy215.mask = 0x000000; } break; - case 46: /* refarg ::= ON INSERT refact */ -{ yymsp[-2].minor.yy497.value = 0; yymsp[-2].minor.yy497.mask = 0x000000; } + case 47: /* refarg ::= ON INSERT refact */ +{ yymsp[-2].minor.yy215.value = 0; yymsp[-2].minor.yy215.mask = 0x000000; } break; - case 47: /* refarg ::= ON DELETE refact */ -{ yymsp[-2].minor.yy497.value = yymsp[0].minor.yy194; yymsp[-2].minor.yy497.mask = 0x0000ff; } + case 48: /* refarg ::= ON DELETE refact */ +{ yymsp[-2].minor.yy215.value = yymsp[0].minor.yy4; yymsp[-2].minor.yy215.mask = 0x0000ff; } break; - case 48: /* refarg ::= ON UPDATE refact */ -{ yymsp[-2].minor.yy497.value = yymsp[0].minor.yy194<<8; yymsp[-2].minor.yy497.mask = 0x00ff00; } + case 49: /* refarg ::= ON UPDATE refact */ +{ yymsp[-2].minor.yy215.value = yymsp[0].minor.yy4<<8; yymsp[-2].minor.yy215.mask = 0x00ff00; } break; - case 49: /* refact ::= SET NULL */ -{ yymsp[-1].minor.yy194 = OE_SetNull; /* EV: R-33326-45252 */} + case 50: /* refact ::= SET NULL */ +{ yymsp[-1].minor.yy4 = OE_SetNull; /* EV: R-33326-45252 */} break; - case 50: /* refact ::= SET DEFAULT */ -{ yymsp[-1].minor.yy194 = OE_SetDflt; /* EV: R-33326-45252 */} + case 51: /* refact ::= SET DEFAULT */ +{ yymsp[-1].minor.yy4 = OE_SetDflt; /* EV: R-33326-45252 */} break; - case 51: /* refact ::= CASCADE */ -{ yymsp[0].minor.yy194 = OE_Cascade; /* EV: R-33326-45252 */} + case 52: /* refact ::= CASCADE */ +{ yymsp[0].minor.yy4 = OE_Cascade; /* EV: R-33326-45252 */} break; - case 52: /* refact ::= RESTRICT */ -{ yymsp[0].minor.yy194 = OE_Restrict; /* EV: R-33326-45252 */} + case 53: /* refact ::= RESTRICT */ +{ yymsp[0].minor.yy4 = OE_Restrict; /* EV: R-33326-45252 */} break; - case 53: /* refact ::= NO ACTION */ -{ yymsp[-1].minor.yy194 = OE_None; /* EV: R-33326-45252 */} + case 54: /* refact ::= NO ACTION */ +{ yymsp[-1].minor.yy4 = OE_None; /* EV: R-33326-45252 */} break; - case 54: /* defer_subclause ::= NOT DEFERRABLE init_deferred_pred_opt */ -{yymsp[-2].minor.yy194 = 0;} + case 55: /* defer_subclause ::= NOT DEFERRABLE init_deferred_pred_opt */ +{yymsp[-2].minor.yy4 = 0;} break; - case 55: /* defer_subclause ::= DEFERRABLE init_deferred_pred_opt */ - case 70: /* orconf ::= OR resolvetype */ yytestcase(yyruleno==70); - case 143: /* insert_cmd ::= INSERT orconf */ yytestcase(yyruleno==143); -{yymsp[-1].minor.yy194 = yymsp[0].minor.yy194;} + case 56: /* defer_subclause ::= DEFERRABLE init_deferred_pred_opt */ + case 71: /* orconf ::= OR resolvetype */ yytestcase(yyruleno==71); + case 147: /* insert_cmd ::= INSERT orconf */ yytestcase(yyruleno==147); +{yymsp[-1].minor.yy4 = yymsp[0].minor.yy4;} break; - case 57: /* init_deferred_pred_opt ::= INITIALLY DEFERRED */ - case 74: /* ifexists ::= IF EXISTS */ yytestcase(yyruleno==74); - case 184: /* between_op ::= NOT BETWEEN */ yytestcase(yyruleno==184); - case 187: /* in_op ::= NOT IN */ yytestcase(yyruleno==187); - case 213: /* collate ::= COLLATE ID|STRING */ yytestcase(yyruleno==213); -{yymsp[-1].minor.yy194 = 1;} + case 58: /* init_deferred_pred_opt ::= INITIALLY DEFERRED */ + case 75: /* ifexists ::= IF EXISTS */ yytestcase(yyruleno==75); + case 188: /* between_op ::= NOT BETWEEN */ yytestcase(yyruleno==188); + case 191: /* in_op ::= NOT IN */ yytestcase(yyruleno==191); + case 217: /* collate ::= COLLATE ID|STRING */ yytestcase(yyruleno==217); +{yymsp[-1].minor.yy4 = 1;} break; - case 58: /* init_deferred_pred_opt ::= INITIALLY IMMEDIATE */ -{yymsp[-1].minor.yy194 = 0;} + case 59: /* init_deferred_pred_opt ::= INITIALLY IMMEDIATE */ +{yymsp[-1].minor.yy4 = 0;} break; - case 60: /* tconscomma ::= COMMA */ + case 61: /* tconscomma ::= COMMA */ {pParse->constraintName.n = 0;} break; - case 62: /* tcons ::= PRIMARY KEY LP sortlist autoinc RP onconf */ -{sqlite3AddPrimaryKey(pParse,yymsp[-3].minor.yy148,yymsp[0].minor.yy194,yymsp[-2].minor.yy194,0);} + case 63: /* tcons ::= PRIMARY KEY LP sortlist autoinc RP onconf */ +{sqlite3AddPrimaryKey(pParse,yymsp[-3].minor.yy322,yymsp[0].minor.yy4,yymsp[-2].minor.yy4,0);} break; - case 63: /* tcons ::= UNIQUE LP sortlist RP onconf */ -{sqlite3CreateIndex(pParse,0,0,0,yymsp[-2].minor.yy148,yymsp[0].minor.yy194,0,0,0,0, + case 64: /* tcons ::= UNIQUE LP sortlist RP onconf */ +{sqlite3CreateIndex(pParse,0,0,0,yymsp[-2].minor.yy322,yymsp[0].minor.yy4,0,0,0,0, SQLITE_IDXTYPE_UNIQUE);} break; - case 64: /* tcons ::= CHECK LP expr RP onconf */ -{sqlite3AddCheckConstraint(pParse,yymsp[-2].minor.yy190.pExpr);} + case 65: /* tcons ::= CHECK LP expr RP onconf */ +{sqlite3AddCheckConstraint(pParse,yymsp[-2].minor.yy314);} break; - case 65: /* tcons ::= FOREIGN KEY LP eidlist RP REFERENCES nm eidlist_opt refargs defer_subclause_opt */ + case 66: /* tcons ::= FOREIGN KEY LP eidlist RP REFERENCES nm eidlist_opt refargs defer_subclause_opt */ { - sqlite3CreateForeignKey(pParse, yymsp[-6].minor.yy148, &yymsp[-3].minor.yy0, yymsp[-2].minor.yy148, yymsp[-1].minor.yy194); - sqlite3DeferForeignKey(pParse, yymsp[0].minor.yy194); + sqlite3CreateForeignKey(pParse, yymsp[-6].minor.yy322, &yymsp[-3].minor.yy0, yymsp[-2].minor.yy322, yymsp[-1].minor.yy4); + sqlite3DeferForeignKey(pParse, yymsp[0].minor.yy4); } break; - case 67: /* onconf ::= */ - case 69: /* orconf ::= */ yytestcase(yyruleno==69); -{yymsp[1].minor.yy194 = OE_Default;} + case 68: /* onconf ::= */ + case 70: /* orconf ::= */ yytestcase(yyruleno==70); +{yymsp[1].minor.yy4 = OE_Default;} break; - case 68: /* onconf ::= ON CONFLICT resolvetype */ -{yymsp[-2].minor.yy194 = yymsp[0].minor.yy194;} + case 69: /* onconf ::= ON CONFLICT resolvetype */ +{yymsp[-2].minor.yy4 = yymsp[0].minor.yy4;} break; - case 71: /* resolvetype ::= IGNORE */ -{yymsp[0].minor.yy194 = OE_Ignore;} + case 72: /* resolvetype ::= IGNORE */ +{yymsp[0].minor.yy4 = OE_Ignore;} break; - case 72: /* resolvetype ::= REPLACE */ - case 144: /* insert_cmd ::= REPLACE */ yytestcase(yyruleno==144); -{yymsp[0].minor.yy194 = OE_Replace;} + case 73: /* resolvetype ::= REPLACE */ + case 148: /* insert_cmd ::= REPLACE */ yytestcase(yyruleno==148); +{yymsp[0].minor.yy4 = OE_Replace;} break; - case 73: /* cmd ::= DROP TABLE ifexists fullname */ + case 74: /* cmd ::= DROP TABLE ifexists fullname */ { - sqlite3DropTable(pParse, yymsp[0].minor.yy185, 0, yymsp[-1].minor.yy194); + sqlite3DropTable(pParse, yymsp[0].minor.yy259, 0, yymsp[-1].minor.yy4); } break; - case 76: /* cmd ::= createkw temp VIEW ifnotexists nm dbnm eidlist_opt AS select */ + case 77: /* cmd ::= createkw temp VIEW ifnotexists nm dbnm eidlist_opt AS select */ { - sqlite3CreateView(pParse, &yymsp[-8].minor.yy0, &yymsp[-4].minor.yy0, &yymsp[-3].minor.yy0, yymsp[-2].minor.yy148, yymsp[0].minor.yy243, yymsp[-7].minor.yy194, yymsp[-5].minor.yy194); + sqlite3CreateView(pParse, &yymsp[-8].minor.yy0, &yymsp[-4].minor.yy0, &yymsp[-3].minor.yy0, yymsp[-2].minor.yy322, yymsp[0].minor.yy387, yymsp[-7].minor.yy4, yymsp[-5].minor.yy4); } break; - case 77: /* cmd ::= DROP VIEW ifexists fullname */ + case 78: /* cmd ::= DROP VIEW ifexists fullname */ { - sqlite3DropTable(pParse, yymsp[0].minor.yy185, 1, yymsp[-1].minor.yy194); + sqlite3DropTable(pParse, yymsp[0].minor.yy259, 1, yymsp[-1].minor.yy4); } break; - case 78: /* cmd ::= select */ + case 79: /* cmd ::= select */ { SelectDest dest = {SRT_Output, 0, 0, 0, 0, 0}; - sqlite3Select(pParse, yymsp[0].minor.yy243, &dest); - sqlite3SelectDelete(pParse->db, yymsp[0].minor.yy243); + sqlite3Select(pParse, yymsp[0].minor.yy387, &dest); + sqlite3SelectDelete(pParse->db, yymsp[0].minor.yy387); } break; - case 79: /* select ::= with selectnowith */ + case 80: /* select ::= WITH wqlist selectnowith */ { - Select *p = yymsp[0].minor.yy243; + Select *p = yymsp[0].minor.yy387; if( p ){ - p->pWith = yymsp[-1].minor.yy285; + p->pWith = yymsp[-1].minor.yy451; parserDoubleLinkSelect(pParse, p); }else{ - sqlite3WithDelete(pParse->db, yymsp[-1].minor.yy285); + sqlite3WithDelete(pParse->db, yymsp[-1].minor.yy451); } - yymsp[-1].minor.yy243 = p; /*A-overwrites-W*/ + yymsp[-2].minor.yy387 = p; } break; - case 80: /* selectnowith ::= selectnowith multiselect_op oneselect */ + case 81: /* select ::= WITH RECURSIVE wqlist selectnowith */ { - Select *pRhs = yymsp[0].minor.yy243; - Select *pLhs = yymsp[-2].minor.yy243; + Select *p = yymsp[0].minor.yy387; + if( p ){ + p->pWith = yymsp[-1].minor.yy451; + parserDoubleLinkSelect(pParse, p); + }else{ + sqlite3WithDelete(pParse->db, yymsp[-1].minor.yy451); + } + yymsp[-3].minor.yy387 = p; +} + break; + case 82: /* select ::= selectnowith */ +{ + Select *p = yymsp[0].minor.yy387; + if( p ){ + parserDoubleLinkSelect(pParse, p); + } + yymsp[0].minor.yy387 = p; /*A-overwrites-X*/ +} + break; + case 83: /* selectnowith ::= selectnowith multiselect_op oneselect */ +{ + Select *pRhs = yymsp[0].minor.yy387; + Select *pLhs = yymsp[-2].minor.yy387; if( pRhs && pRhs->pPrior ){ SrcList *pFrom; Token x; x.n = 0; parserDoubleLinkSelect(pParse, pRhs); pFrom = sqlite3SrcListAppendFromTerm(pParse,0,0,0,&x,pRhs,0,0); - pRhs = sqlite3SelectNew(pParse,0,pFrom,0,0,0,0,0,0,0); + pRhs = sqlite3SelectNew(pParse,0,pFrom,0,0,0,0,0,0); } if( pRhs ){ - pRhs->op = (u8)yymsp[-1].minor.yy194; + pRhs->op = (u8)yymsp[-1].minor.yy4; pRhs->pPrior = pLhs; if( ALWAYS(pLhs) ) pLhs->selFlags &= ~SF_MultiValue; pRhs->selFlags &= ~SF_MultiValue; - if( yymsp[-1].minor.yy194!=TK_ALL ) pParse->hasCompound = 1; + if( yymsp[-1].minor.yy4!=TK_ALL ) pParse->hasCompound = 1; }else{ sqlite3SelectDelete(pParse->db, pLhs); } - yymsp[-2].minor.yy243 = pRhs; + yymsp[-2].minor.yy387 = pRhs; } break; - case 81: /* multiselect_op ::= UNION */ - case 83: /* multiselect_op ::= EXCEPT|INTERSECT */ yytestcase(yyruleno==83); -{yymsp[0].minor.yy194 = yymsp[0].major; /*A-overwrites-OP*/} + case 84: /* multiselect_op ::= UNION */ + case 86: /* multiselect_op ::= EXCEPT|INTERSECT */ yytestcase(yyruleno==86); +{yymsp[0].minor.yy4 = yymsp[0].major; /*A-overwrites-OP*/} break; - case 82: /* multiselect_op ::= UNION ALL */ -{yymsp[-1].minor.yy194 = TK_ALL;} + case 85: /* multiselect_op ::= UNION ALL */ +{yymsp[-1].minor.yy4 = TK_ALL;} break; - case 84: /* oneselect ::= SELECT distinct selcollist from where_opt groupby_opt having_opt orderby_opt limit_opt */ + case 87: /* oneselect ::= SELECT distinct selcollist from where_opt groupby_opt having_opt orderby_opt limit_opt */ { #if SELECTTRACE_ENABLED Token s = yymsp[-8].minor.yy0; /*A-overwrites-S*/ #endif - yymsp[-8].minor.yy243 = sqlite3SelectNew(pParse,yymsp[-6].minor.yy148,yymsp[-5].minor.yy185,yymsp[-4].minor.yy72,yymsp[-3].minor.yy148,yymsp[-2].minor.yy72,yymsp[-1].minor.yy148,yymsp[-7].minor.yy194,yymsp[0].minor.yy354.pLimit,yymsp[0].minor.yy354.pOffset); + yymsp[-8].minor.yy387 = sqlite3SelectNew(pParse,yymsp[-6].minor.yy322,yymsp[-5].minor.yy259,yymsp[-4].minor.yy314,yymsp[-3].minor.yy322,yymsp[-2].minor.yy314,yymsp[-1].minor.yy322,yymsp[-7].minor.yy4,yymsp[0].minor.yy314); #if SELECTTRACE_ENABLED /* Populate the Select.zSelName[] string that is used to help with ** query planner debugging, to differentiate between multiple Select @@ -139508,483 +142608,466 @@ static void yy_reduce( ** comment to be the zSelName value. Otherwise, the label is #N where ** is an integer that is incremented with each SELECT statement seen. */ - if( yymsp[-8].minor.yy243!=0 ){ + if( yymsp[-8].minor.yy387!=0 ){ const char *z = s.z+6; int i; - sqlite3_snprintf(sizeof(yymsp[-8].minor.yy243->zSelName), yymsp[-8].minor.yy243->zSelName, "#%d", - ++pParse->nSelect); + sqlite3_snprintf(sizeof(yymsp[-8].minor.yy387->zSelName), yymsp[-8].minor.yy387->zSelName,"#%d",++pParse->nSelect); while( z[0]==' ' ) z++; if( z[0]=='/' && z[1]=='*' ){ z += 2; while( z[0]==' ' ) z++; for(i=0; sqlite3Isalnum(z[i]); i++){} - sqlite3_snprintf(sizeof(yymsp[-8].minor.yy243->zSelName), yymsp[-8].minor.yy243->zSelName, "%.*s", i, z); + sqlite3_snprintf(sizeof(yymsp[-8].minor.yy387->zSelName), yymsp[-8].minor.yy387->zSelName, "%.*s", i, z); } } #endif /* SELECTRACE_ENABLED */ } break; - case 85: /* values ::= VALUES LP nexprlist RP */ + case 88: /* values ::= VALUES LP nexprlist RP */ { - yymsp[-3].minor.yy243 = sqlite3SelectNew(pParse,yymsp[-1].minor.yy148,0,0,0,0,0,SF_Values,0,0); + yymsp[-3].minor.yy387 = sqlite3SelectNew(pParse,yymsp[-1].minor.yy322,0,0,0,0,0,SF_Values,0); } break; - case 86: /* values ::= values COMMA LP exprlist RP */ + case 89: /* values ::= values COMMA LP exprlist RP */ { - Select *pRight, *pLeft = yymsp[-4].minor.yy243; - pRight = sqlite3SelectNew(pParse,yymsp[-1].minor.yy148,0,0,0,0,0,SF_Values|SF_MultiValue,0,0); + Select *pRight, *pLeft = yymsp[-4].minor.yy387; + pRight = sqlite3SelectNew(pParse,yymsp[-1].minor.yy322,0,0,0,0,0,SF_Values|SF_MultiValue,0); if( ALWAYS(pLeft) ) pLeft->selFlags &= ~SF_MultiValue; if( pRight ){ pRight->op = TK_ALL; pRight->pPrior = pLeft; - yymsp[-4].minor.yy243 = pRight; + yymsp[-4].minor.yy387 = pRight; }else{ - yymsp[-4].minor.yy243 = pLeft; + yymsp[-4].minor.yy387 = pLeft; } } break; - case 87: /* distinct ::= DISTINCT */ -{yymsp[0].minor.yy194 = SF_Distinct;} + case 90: /* distinct ::= DISTINCT */ +{yymsp[0].minor.yy4 = SF_Distinct;} break; - case 88: /* distinct ::= ALL */ -{yymsp[0].minor.yy194 = SF_All;} + case 91: /* distinct ::= ALL */ +{yymsp[0].minor.yy4 = SF_All;} break; - case 90: /* sclp ::= */ - case 118: /* orderby_opt ::= */ yytestcase(yyruleno==118); - case 125: /* groupby_opt ::= */ yytestcase(yyruleno==125); - case 200: /* exprlist ::= */ yytestcase(yyruleno==200); - case 203: /* paren_exprlist ::= */ yytestcase(yyruleno==203); - case 208: /* eidlist_opt ::= */ yytestcase(yyruleno==208); -{yymsp[1].minor.yy148 = 0;} + case 93: /* sclp ::= */ + case 122: /* orderby_opt ::= */ yytestcase(yyruleno==122); + case 129: /* groupby_opt ::= */ yytestcase(yyruleno==129); + case 204: /* exprlist ::= */ yytestcase(yyruleno==204); + case 207: /* paren_exprlist ::= */ yytestcase(yyruleno==207); + case 212: /* eidlist_opt ::= */ yytestcase(yyruleno==212); +{yymsp[1].minor.yy322 = 0;} break; - case 91: /* selcollist ::= sclp expr as */ + case 94: /* selcollist ::= sclp scanpt expr scanpt as */ { - yymsp[-2].minor.yy148 = sqlite3ExprListAppend(pParse, yymsp[-2].minor.yy148, yymsp[-1].minor.yy190.pExpr); - if( yymsp[0].minor.yy0.n>0 ) sqlite3ExprListSetName(pParse, yymsp[-2].minor.yy148, &yymsp[0].minor.yy0, 1); - sqlite3ExprListSetSpan(pParse,yymsp[-2].minor.yy148,&yymsp[-1].minor.yy190); + yymsp[-4].minor.yy322 = sqlite3ExprListAppend(pParse, yymsp[-4].minor.yy322, yymsp[-2].minor.yy314); + if( yymsp[0].minor.yy0.n>0 ) sqlite3ExprListSetName(pParse, yymsp[-4].minor.yy322, &yymsp[0].minor.yy0, 1); + sqlite3ExprListSetSpan(pParse,yymsp[-4].minor.yy322,yymsp[-3].minor.yy336,yymsp[-1].minor.yy336); } break; - case 92: /* selcollist ::= sclp STAR */ + case 95: /* selcollist ::= sclp scanpt STAR */ { Expr *p = sqlite3Expr(pParse->db, TK_ASTERISK, 0); - yymsp[-1].minor.yy148 = sqlite3ExprListAppend(pParse, yymsp[-1].minor.yy148, p); + yymsp[-2].minor.yy322 = sqlite3ExprListAppend(pParse, yymsp[-2].minor.yy322, p); } break; - case 93: /* selcollist ::= sclp nm DOT STAR */ + case 96: /* selcollist ::= sclp scanpt nm DOT STAR */ { Expr *pRight = sqlite3PExpr(pParse, TK_ASTERISK, 0, 0); Expr *pLeft = sqlite3ExprAlloc(pParse->db, TK_ID, &yymsp[-2].minor.yy0, 1); Expr *pDot = sqlite3PExpr(pParse, TK_DOT, pLeft, pRight); - yymsp[-3].minor.yy148 = sqlite3ExprListAppend(pParse,yymsp[-3].minor.yy148, pDot); + yymsp[-4].minor.yy322 = sqlite3ExprListAppend(pParse,yymsp[-4].minor.yy322, pDot); } break; - case 94: /* as ::= AS nm */ - case 105: /* dbnm ::= DOT nm */ yytestcase(yyruleno==105); - case 222: /* plus_num ::= PLUS INTEGER|FLOAT */ yytestcase(yyruleno==222); - case 223: /* minus_num ::= MINUS INTEGER|FLOAT */ yytestcase(yyruleno==223); + case 97: /* as ::= AS nm */ + case 108: /* dbnm ::= DOT nm */ yytestcase(yyruleno==108); + case 226: /* plus_num ::= PLUS INTEGER|FLOAT */ yytestcase(yyruleno==226); + case 227: /* minus_num ::= MINUS INTEGER|FLOAT */ yytestcase(yyruleno==227); {yymsp[-1].minor.yy0 = yymsp[0].minor.yy0;} break; - case 96: /* from ::= */ -{yymsp[1].minor.yy185 = sqlite3DbMallocZero(pParse->db, sizeof(*yymsp[1].minor.yy185));} + case 99: /* from ::= */ +{yymsp[1].minor.yy259 = sqlite3DbMallocZero(pParse->db, sizeof(*yymsp[1].minor.yy259));} break; - case 97: /* from ::= FROM seltablist */ + case 100: /* from ::= FROM seltablist */ { - yymsp[-1].minor.yy185 = yymsp[0].minor.yy185; - sqlite3SrcListShiftJoinType(yymsp[-1].minor.yy185); + yymsp[-1].minor.yy259 = yymsp[0].minor.yy259; + sqlite3SrcListShiftJoinType(yymsp[-1].minor.yy259); } break; - case 98: /* stl_prefix ::= seltablist joinop */ + case 101: /* stl_prefix ::= seltablist joinop */ { - if( ALWAYS(yymsp[-1].minor.yy185 && yymsp[-1].minor.yy185->nSrc>0) ) yymsp[-1].minor.yy185->a[yymsp[-1].minor.yy185->nSrc-1].fg.jointype = (u8)yymsp[0].minor.yy194; + if( ALWAYS(yymsp[-1].minor.yy259 && yymsp[-1].minor.yy259->nSrc>0) ) yymsp[-1].minor.yy259->a[yymsp[-1].minor.yy259->nSrc-1].fg.jointype = (u8)yymsp[0].minor.yy4; } break; - case 99: /* stl_prefix ::= */ -{yymsp[1].minor.yy185 = 0;} + case 102: /* stl_prefix ::= */ +{yymsp[1].minor.yy259 = 0;} break; - case 100: /* seltablist ::= stl_prefix nm dbnm as indexed_opt on_opt using_opt */ + case 103: /* seltablist ::= stl_prefix nm dbnm as indexed_opt on_opt using_opt */ { - yymsp[-6].minor.yy185 = sqlite3SrcListAppendFromTerm(pParse,yymsp[-6].minor.yy185,&yymsp[-5].minor.yy0,&yymsp[-4].minor.yy0,&yymsp[-3].minor.yy0,0,yymsp[-1].minor.yy72,yymsp[0].minor.yy254); - sqlite3SrcListIndexedBy(pParse, yymsp[-6].minor.yy185, &yymsp[-2].minor.yy0); + yymsp[-6].minor.yy259 = sqlite3SrcListAppendFromTerm(pParse,yymsp[-6].minor.yy259,&yymsp[-5].minor.yy0,&yymsp[-4].minor.yy0,&yymsp[-3].minor.yy0,0,yymsp[-1].minor.yy314,yymsp[0].minor.yy384); + sqlite3SrcListIndexedBy(pParse, yymsp[-6].minor.yy259, &yymsp[-2].minor.yy0); } break; - case 101: /* seltablist ::= stl_prefix nm dbnm LP exprlist RP as on_opt using_opt */ + case 104: /* seltablist ::= stl_prefix nm dbnm LP exprlist RP as on_opt using_opt */ { - yymsp[-8].minor.yy185 = sqlite3SrcListAppendFromTerm(pParse,yymsp[-8].minor.yy185,&yymsp[-7].minor.yy0,&yymsp[-6].minor.yy0,&yymsp[-2].minor.yy0,0,yymsp[-1].minor.yy72,yymsp[0].minor.yy254); - sqlite3SrcListFuncArgs(pParse, yymsp[-8].minor.yy185, yymsp[-4].minor.yy148); + yymsp[-8].minor.yy259 = sqlite3SrcListAppendFromTerm(pParse,yymsp[-8].minor.yy259,&yymsp[-7].minor.yy0,&yymsp[-6].minor.yy0,&yymsp[-2].minor.yy0,0,yymsp[-1].minor.yy314,yymsp[0].minor.yy384); + sqlite3SrcListFuncArgs(pParse, yymsp[-8].minor.yy259, yymsp[-4].minor.yy322); } break; - case 102: /* seltablist ::= stl_prefix LP select RP as on_opt using_opt */ + case 105: /* seltablist ::= stl_prefix LP select RP as on_opt using_opt */ { - yymsp[-6].minor.yy185 = sqlite3SrcListAppendFromTerm(pParse,yymsp[-6].minor.yy185,0,0,&yymsp[-2].minor.yy0,yymsp[-4].minor.yy243,yymsp[-1].minor.yy72,yymsp[0].minor.yy254); + yymsp[-6].minor.yy259 = sqlite3SrcListAppendFromTerm(pParse,yymsp[-6].minor.yy259,0,0,&yymsp[-2].minor.yy0,yymsp[-4].minor.yy387,yymsp[-1].minor.yy314,yymsp[0].minor.yy384); } break; - case 103: /* seltablist ::= stl_prefix LP seltablist RP as on_opt using_opt */ + case 106: /* seltablist ::= stl_prefix LP seltablist RP as on_opt using_opt */ { - if( yymsp[-6].minor.yy185==0 && yymsp[-2].minor.yy0.n==0 && yymsp[-1].minor.yy72==0 && yymsp[0].minor.yy254==0 ){ - yymsp[-6].minor.yy185 = yymsp[-4].minor.yy185; - }else if( yymsp[-4].minor.yy185->nSrc==1 ){ - yymsp[-6].minor.yy185 = sqlite3SrcListAppendFromTerm(pParse,yymsp[-6].minor.yy185,0,0,&yymsp[-2].minor.yy0,0,yymsp[-1].minor.yy72,yymsp[0].minor.yy254); - if( yymsp[-6].minor.yy185 ){ - struct SrcList_item *pNew = &yymsp[-6].minor.yy185->a[yymsp[-6].minor.yy185->nSrc-1]; - struct SrcList_item *pOld = yymsp[-4].minor.yy185->a; + if( yymsp[-6].minor.yy259==0 && yymsp[-2].minor.yy0.n==0 && yymsp[-1].minor.yy314==0 && yymsp[0].minor.yy384==0 ){ + yymsp[-6].minor.yy259 = yymsp[-4].minor.yy259; + }else if( yymsp[-4].minor.yy259->nSrc==1 ){ + yymsp[-6].minor.yy259 = sqlite3SrcListAppendFromTerm(pParse,yymsp[-6].minor.yy259,0,0,&yymsp[-2].minor.yy0,0,yymsp[-1].minor.yy314,yymsp[0].minor.yy384); + if( yymsp[-6].minor.yy259 ){ + struct SrcList_item *pNew = &yymsp[-6].minor.yy259->a[yymsp[-6].minor.yy259->nSrc-1]; + struct SrcList_item *pOld = yymsp[-4].minor.yy259->a; pNew->zName = pOld->zName; pNew->zDatabase = pOld->zDatabase; pNew->pSelect = pOld->pSelect; pOld->zName = pOld->zDatabase = 0; pOld->pSelect = 0; } - sqlite3SrcListDelete(pParse->db, yymsp[-4].minor.yy185); + sqlite3SrcListDelete(pParse->db, yymsp[-4].minor.yy259); }else{ Select *pSubquery; - sqlite3SrcListShiftJoinType(yymsp[-4].minor.yy185); - pSubquery = sqlite3SelectNew(pParse,0,yymsp[-4].minor.yy185,0,0,0,0,SF_NestedFrom,0,0); - yymsp[-6].minor.yy185 = sqlite3SrcListAppendFromTerm(pParse,yymsp[-6].minor.yy185,0,0,&yymsp[-2].minor.yy0,pSubquery,yymsp[-1].minor.yy72,yymsp[0].minor.yy254); + sqlite3SrcListShiftJoinType(yymsp[-4].minor.yy259); + pSubquery = sqlite3SelectNew(pParse,0,yymsp[-4].minor.yy259,0,0,0,0,SF_NestedFrom,0); + yymsp[-6].minor.yy259 = sqlite3SrcListAppendFromTerm(pParse,yymsp[-6].minor.yy259,0,0,&yymsp[-2].minor.yy0,pSubquery,yymsp[-1].minor.yy314,yymsp[0].minor.yy384); } } break; - case 104: /* dbnm ::= */ - case 113: /* indexed_opt ::= */ yytestcase(yyruleno==113); + case 107: /* dbnm ::= */ + case 117: /* indexed_opt ::= */ yytestcase(yyruleno==117); {yymsp[1].minor.yy0.z=0; yymsp[1].minor.yy0.n=0;} break; - case 106: /* fullname ::= nm dbnm */ -{yymsp[-1].minor.yy185 = sqlite3SrcListAppend(pParse->db,0,&yymsp[-1].minor.yy0,&yymsp[0].minor.yy0); /*A-overwrites-X*/} + case 109: /* fullname ::= nm */ +{yymsp[0].minor.yy259 = sqlite3SrcListAppend(pParse->db,0,&yymsp[0].minor.yy0,0); /*A-overwrites-X*/} break; - case 107: /* joinop ::= COMMA|JOIN */ -{ yymsp[0].minor.yy194 = JT_INNER; } + case 110: /* fullname ::= nm DOT nm */ +{yymsp[-2].minor.yy259 = sqlite3SrcListAppend(pParse->db,0,&yymsp[-2].minor.yy0,&yymsp[0].minor.yy0); /*A-overwrites-X*/} break; - case 108: /* joinop ::= JOIN_KW JOIN */ -{yymsp[-1].minor.yy194 = sqlite3JoinType(pParse,&yymsp[-1].minor.yy0,0,0); /*X-overwrites-A*/} + case 111: /* joinop ::= COMMA|JOIN */ +{ yymsp[0].minor.yy4 = JT_INNER; } break; - case 109: /* joinop ::= JOIN_KW nm JOIN */ -{yymsp[-2].minor.yy194 = sqlite3JoinType(pParse,&yymsp[-2].minor.yy0,&yymsp[-1].minor.yy0,0); /*X-overwrites-A*/} + case 112: /* joinop ::= JOIN_KW JOIN */ +{yymsp[-1].minor.yy4 = sqlite3JoinType(pParse,&yymsp[-1].minor.yy0,0,0); /*X-overwrites-A*/} break; - case 110: /* joinop ::= JOIN_KW nm nm JOIN */ -{yymsp[-3].minor.yy194 = sqlite3JoinType(pParse,&yymsp[-3].minor.yy0,&yymsp[-2].minor.yy0,&yymsp[-1].minor.yy0);/*X-overwrites-A*/} + case 113: /* joinop ::= JOIN_KW nm JOIN */ +{yymsp[-2].minor.yy4 = sqlite3JoinType(pParse,&yymsp[-2].minor.yy0,&yymsp[-1].minor.yy0,0); /*X-overwrites-A*/} break; - case 111: /* on_opt ::= ON expr */ - case 128: /* having_opt ::= HAVING expr */ yytestcase(yyruleno==128); - case 135: /* where_opt ::= WHERE expr */ yytestcase(yyruleno==135); - case 196: /* case_else ::= ELSE expr */ yytestcase(yyruleno==196); -{yymsp[-1].minor.yy72 = yymsp[0].minor.yy190.pExpr;} + case 114: /* joinop ::= JOIN_KW nm nm JOIN */ +{yymsp[-3].minor.yy4 = sqlite3JoinType(pParse,&yymsp[-3].minor.yy0,&yymsp[-2].minor.yy0,&yymsp[-1].minor.yy0);/*X-overwrites-A*/} break; - case 112: /* on_opt ::= */ - case 127: /* having_opt ::= */ yytestcase(yyruleno==127); - case 134: /* where_opt ::= */ yytestcase(yyruleno==134); - case 197: /* case_else ::= */ yytestcase(yyruleno==197); - case 199: /* case_operand ::= */ yytestcase(yyruleno==199); -{yymsp[1].minor.yy72 = 0;} + case 115: /* on_opt ::= ON expr */ + case 132: /* having_opt ::= HAVING expr */ yytestcase(yyruleno==132); + case 139: /* where_opt ::= WHERE expr */ yytestcase(yyruleno==139); + case 200: /* case_else ::= ELSE expr */ yytestcase(yyruleno==200); +{yymsp[-1].minor.yy314 = yymsp[0].minor.yy314;} break; - case 114: /* indexed_opt ::= INDEXED BY nm */ + case 116: /* on_opt ::= */ + case 131: /* having_opt ::= */ yytestcase(yyruleno==131); + case 133: /* limit_opt ::= */ yytestcase(yyruleno==133); + case 138: /* where_opt ::= */ yytestcase(yyruleno==138); + case 201: /* case_else ::= */ yytestcase(yyruleno==201); + case 203: /* case_operand ::= */ yytestcase(yyruleno==203); +{yymsp[1].minor.yy314 = 0;} + break; + case 118: /* indexed_opt ::= INDEXED BY nm */ {yymsp[-2].minor.yy0 = yymsp[0].minor.yy0;} break; - case 115: /* indexed_opt ::= NOT INDEXED */ + case 119: /* indexed_opt ::= NOT INDEXED */ {yymsp[-1].minor.yy0.z=0; yymsp[-1].minor.yy0.n=1;} break; - case 116: /* using_opt ::= USING LP idlist RP */ -{yymsp[-3].minor.yy254 = yymsp[-1].minor.yy254;} + case 120: /* using_opt ::= USING LP idlist RP */ +{yymsp[-3].minor.yy384 = yymsp[-1].minor.yy384;} break; - case 117: /* using_opt ::= */ - case 145: /* idlist_opt ::= */ yytestcase(yyruleno==145); -{yymsp[1].minor.yy254 = 0;} + case 121: /* using_opt ::= */ + case 149: /* idlist_opt ::= */ yytestcase(yyruleno==149); +{yymsp[1].minor.yy384 = 0;} break; - case 119: /* orderby_opt ::= ORDER BY sortlist */ - case 126: /* groupby_opt ::= GROUP BY nexprlist */ yytestcase(yyruleno==126); -{yymsp[-2].minor.yy148 = yymsp[0].minor.yy148;} + case 123: /* orderby_opt ::= ORDER BY sortlist */ + case 130: /* groupby_opt ::= GROUP BY nexprlist */ yytestcase(yyruleno==130); +{yymsp[-2].minor.yy322 = yymsp[0].minor.yy322;} break; - case 120: /* sortlist ::= sortlist COMMA expr sortorder */ + case 124: /* sortlist ::= sortlist COMMA expr sortorder */ { - yymsp[-3].minor.yy148 = sqlite3ExprListAppend(pParse,yymsp[-3].minor.yy148,yymsp[-1].minor.yy190.pExpr); - sqlite3ExprListSetSortOrder(yymsp[-3].minor.yy148,yymsp[0].minor.yy194); + yymsp[-3].minor.yy322 = sqlite3ExprListAppend(pParse,yymsp[-3].minor.yy322,yymsp[-1].minor.yy314); + sqlite3ExprListSetSortOrder(yymsp[-3].minor.yy322,yymsp[0].minor.yy4); } break; - case 121: /* sortlist ::= expr sortorder */ + case 125: /* sortlist ::= expr sortorder */ { - yymsp[-1].minor.yy148 = sqlite3ExprListAppend(pParse,0,yymsp[-1].minor.yy190.pExpr); /*A-overwrites-Y*/ - sqlite3ExprListSetSortOrder(yymsp[-1].minor.yy148,yymsp[0].minor.yy194); + yymsp[-1].minor.yy322 = sqlite3ExprListAppend(pParse,0,yymsp[-1].minor.yy314); /*A-overwrites-Y*/ + sqlite3ExprListSetSortOrder(yymsp[-1].minor.yy322,yymsp[0].minor.yy4); } break; - case 122: /* sortorder ::= ASC */ -{yymsp[0].minor.yy194 = SQLITE_SO_ASC;} + case 126: /* sortorder ::= ASC */ +{yymsp[0].minor.yy4 = SQLITE_SO_ASC;} break; - case 123: /* sortorder ::= DESC */ -{yymsp[0].minor.yy194 = SQLITE_SO_DESC;} + case 127: /* sortorder ::= DESC */ +{yymsp[0].minor.yy4 = SQLITE_SO_DESC;} break; - case 124: /* sortorder ::= */ -{yymsp[1].minor.yy194 = SQLITE_SO_UNDEFINED;} + case 128: /* sortorder ::= */ +{yymsp[1].minor.yy4 = SQLITE_SO_UNDEFINED;} break; - case 129: /* limit_opt ::= */ -{yymsp[1].minor.yy354.pLimit = 0; yymsp[1].minor.yy354.pOffset = 0;} + case 134: /* limit_opt ::= LIMIT expr */ +{yymsp[-1].minor.yy314 = sqlite3PExpr(pParse,TK_LIMIT,yymsp[0].minor.yy314,0);} break; - case 130: /* limit_opt ::= LIMIT expr */ -{yymsp[-1].minor.yy354.pLimit = yymsp[0].minor.yy190.pExpr; yymsp[-1].minor.yy354.pOffset = 0;} + case 135: /* limit_opt ::= LIMIT expr OFFSET expr */ +{yymsp[-3].minor.yy314 = sqlite3PExpr(pParse,TK_LIMIT,yymsp[-2].minor.yy314,yymsp[0].minor.yy314);} break; - case 131: /* limit_opt ::= LIMIT expr OFFSET expr */ -{yymsp[-3].minor.yy354.pLimit = yymsp[-2].minor.yy190.pExpr; yymsp[-3].minor.yy354.pOffset = yymsp[0].minor.yy190.pExpr;} + case 136: /* limit_opt ::= LIMIT expr COMMA expr */ +{yymsp[-3].minor.yy314 = sqlite3PExpr(pParse,TK_LIMIT,yymsp[0].minor.yy314,yymsp[-2].minor.yy314);} break; - case 132: /* limit_opt ::= LIMIT expr COMMA expr */ -{yymsp[-3].minor.yy354.pOffset = yymsp[-2].minor.yy190.pExpr; yymsp[-3].minor.yy354.pLimit = yymsp[0].minor.yy190.pExpr;} - break; - case 133: /* cmd ::= with DELETE FROM fullname indexed_opt where_opt */ + case 137: /* cmd ::= with DELETE FROM fullname indexed_opt where_opt */ { - sqlite3WithPush(pParse, yymsp[-5].minor.yy285, 1); - sqlite3SrcListIndexedBy(pParse, yymsp[-2].minor.yy185, &yymsp[-1].minor.yy0); - sqlite3DeleteFrom(pParse,yymsp[-2].minor.yy185,yymsp[0].minor.yy72); + sqlite3SrcListIndexedBy(pParse, yymsp[-2].minor.yy259, &yymsp[-1].minor.yy0); + sqlite3DeleteFrom(pParse,yymsp[-2].minor.yy259,yymsp[0].minor.yy314,0,0); } break; - case 136: /* cmd ::= with UPDATE orconf fullname indexed_opt SET setlist where_opt */ + case 140: /* cmd ::= with UPDATE orconf fullname indexed_opt SET setlist where_opt */ { - sqlite3WithPush(pParse, yymsp[-7].minor.yy285, 1); - sqlite3SrcListIndexedBy(pParse, yymsp[-4].minor.yy185, &yymsp[-3].minor.yy0); - sqlite3ExprListCheckLength(pParse,yymsp[-1].minor.yy148,"set list"); - sqlite3Update(pParse,yymsp[-4].minor.yy185,yymsp[-1].minor.yy148,yymsp[0].minor.yy72,yymsp[-5].minor.yy194); + sqlite3SrcListIndexedBy(pParse, yymsp[-4].minor.yy259, &yymsp[-3].minor.yy0); + sqlite3ExprListCheckLength(pParse,yymsp[-1].minor.yy322,"set list"); + sqlite3Update(pParse,yymsp[-4].minor.yy259,yymsp[-1].minor.yy322,yymsp[0].minor.yy314,yymsp[-5].minor.yy4,0,0); } break; - case 137: /* setlist ::= setlist COMMA nm EQ expr */ + case 141: /* setlist ::= setlist COMMA nm EQ expr */ { - yymsp[-4].minor.yy148 = sqlite3ExprListAppend(pParse, yymsp[-4].minor.yy148, yymsp[0].minor.yy190.pExpr); - sqlite3ExprListSetName(pParse, yymsp[-4].minor.yy148, &yymsp[-2].minor.yy0, 1); + yymsp[-4].minor.yy322 = sqlite3ExprListAppend(pParse, yymsp[-4].minor.yy322, yymsp[0].minor.yy314); + sqlite3ExprListSetName(pParse, yymsp[-4].minor.yy322, &yymsp[-2].minor.yy0, 1); } break; - case 138: /* setlist ::= setlist COMMA LP idlist RP EQ expr */ + case 142: /* setlist ::= setlist COMMA LP idlist RP EQ expr */ { - yymsp[-6].minor.yy148 = sqlite3ExprListAppendVector(pParse, yymsp[-6].minor.yy148, yymsp[-3].minor.yy254, yymsp[0].minor.yy190.pExpr); + yymsp[-6].minor.yy322 = sqlite3ExprListAppendVector(pParse, yymsp[-6].minor.yy322, yymsp[-3].minor.yy384, yymsp[0].minor.yy314); } break; - case 139: /* setlist ::= nm EQ expr */ + case 143: /* setlist ::= nm EQ expr */ { - yylhsminor.yy148 = sqlite3ExprListAppend(pParse, 0, yymsp[0].minor.yy190.pExpr); - sqlite3ExprListSetName(pParse, yylhsminor.yy148, &yymsp[-2].minor.yy0, 1); + yylhsminor.yy322 = sqlite3ExprListAppend(pParse, 0, yymsp[0].minor.yy314); + sqlite3ExprListSetName(pParse, yylhsminor.yy322, &yymsp[-2].minor.yy0, 1); } - yymsp[-2].minor.yy148 = yylhsminor.yy148; + yymsp[-2].minor.yy322 = yylhsminor.yy322; break; - case 140: /* setlist ::= LP idlist RP EQ expr */ + case 144: /* setlist ::= LP idlist RP EQ expr */ { - yymsp[-4].minor.yy148 = sqlite3ExprListAppendVector(pParse, 0, yymsp[-3].minor.yy254, yymsp[0].minor.yy190.pExpr); + yymsp[-4].minor.yy322 = sqlite3ExprListAppendVector(pParse, 0, yymsp[-3].minor.yy384, yymsp[0].minor.yy314); } break; - case 141: /* cmd ::= with insert_cmd INTO fullname idlist_opt select */ + case 145: /* cmd ::= with insert_cmd INTO fullname idlist_opt select */ { - sqlite3WithPush(pParse, yymsp[-5].minor.yy285, 1); - sqlite3Insert(pParse, yymsp[-2].minor.yy185, yymsp[0].minor.yy243, yymsp[-1].minor.yy254, yymsp[-4].minor.yy194); + sqlite3Insert(pParse, yymsp[-2].minor.yy259, yymsp[0].minor.yy387, yymsp[-1].minor.yy384, yymsp[-4].minor.yy4); } break; - case 142: /* cmd ::= with insert_cmd INTO fullname idlist_opt DEFAULT VALUES */ + case 146: /* cmd ::= with insert_cmd INTO fullname idlist_opt DEFAULT VALUES */ { - sqlite3WithPush(pParse, yymsp[-6].minor.yy285, 1); - sqlite3Insert(pParse, yymsp[-3].minor.yy185, 0, yymsp[-2].minor.yy254, yymsp[-5].minor.yy194); + sqlite3Insert(pParse, yymsp[-3].minor.yy259, 0, yymsp[-2].minor.yy384, yymsp[-5].minor.yy4); } break; - case 146: /* idlist_opt ::= LP idlist RP */ -{yymsp[-2].minor.yy254 = yymsp[-1].minor.yy254;} + case 150: /* idlist_opt ::= LP idlist RP */ +{yymsp[-2].minor.yy384 = yymsp[-1].minor.yy384;} break; - case 147: /* idlist ::= idlist COMMA nm */ -{yymsp[-2].minor.yy254 = sqlite3IdListAppend(pParse->db,yymsp[-2].minor.yy254,&yymsp[0].minor.yy0);} + case 151: /* idlist ::= idlist COMMA nm */ +{yymsp[-2].minor.yy384 = sqlite3IdListAppend(pParse->db,yymsp[-2].minor.yy384,&yymsp[0].minor.yy0);} break; - case 148: /* idlist ::= nm */ -{yymsp[0].minor.yy254 = sqlite3IdListAppend(pParse->db,0,&yymsp[0].minor.yy0); /*A-overwrites-Y*/} + case 152: /* idlist ::= nm */ +{yymsp[0].minor.yy384 = sqlite3IdListAppend(pParse->db,0,&yymsp[0].minor.yy0); /*A-overwrites-Y*/} break; - case 149: /* expr ::= LP expr RP */ -{spanSet(&yymsp[-2].minor.yy190,&yymsp[-2].minor.yy0,&yymsp[0].minor.yy0); /*A-overwrites-B*/ yymsp[-2].minor.yy190.pExpr = yymsp[-1].minor.yy190.pExpr;} + case 153: /* expr ::= LP expr RP */ +{yymsp[-2].minor.yy314 = yymsp[-1].minor.yy314;} break; - case 150: /* expr ::= ID|INDEXED */ - case 151: /* expr ::= JOIN_KW */ yytestcase(yyruleno==151); -{spanExpr(&yymsp[0].minor.yy190,pParse,TK_ID,yymsp[0].minor.yy0); /*A-overwrites-X*/} + case 154: /* expr ::= ID|INDEXED */ + case 155: /* expr ::= JOIN_KW */ yytestcase(yyruleno==155); +{yymsp[0].minor.yy314=tokenExpr(pParse,TK_ID,yymsp[0].minor.yy0); /*A-overwrites-X*/} break; - case 152: /* expr ::= nm DOT nm */ + case 156: /* expr ::= nm DOT nm */ { Expr *temp1 = sqlite3ExprAlloc(pParse->db, TK_ID, &yymsp[-2].minor.yy0, 1); Expr *temp2 = sqlite3ExprAlloc(pParse->db, TK_ID, &yymsp[0].minor.yy0, 1); - spanSet(&yymsp[-2].minor.yy190,&yymsp[-2].minor.yy0,&yymsp[0].minor.yy0); /*A-overwrites-X*/ - yymsp[-2].minor.yy190.pExpr = sqlite3PExpr(pParse, TK_DOT, temp1, temp2); + yylhsminor.yy314 = sqlite3PExpr(pParse, TK_DOT, temp1, temp2); } + yymsp[-2].minor.yy314 = yylhsminor.yy314; break; - case 153: /* expr ::= nm DOT nm DOT nm */ + case 157: /* expr ::= nm DOT nm DOT nm */ { Expr *temp1 = sqlite3ExprAlloc(pParse->db, TK_ID, &yymsp[-4].minor.yy0, 1); Expr *temp2 = sqlite3ExprAlloc(pParse->db, TK_ID, &yymsp[-2].minor.yy0, 1); Expr *temp3 = sqlite3ExprAlloc(pParse->db, TK_ID, &yymsp[0].minor.yy0, 1); Expr *temp4 = sqlite3PExpr(pParse, TK_DOT, temp2, temp3); - spanSet(&yymsp[-4].minor.yy190,&yymsp[-4].minor.yy0,&yymsp[0].minor.yy0); /*A-overwrites-X*/ - yymsp[-4].minor.yy190.pExpr = sqlite3PExpr(pParse, TK_DOT, temp1, temp4); + yylhsminor.yy314 = sqlite3PExpr(pParse, TK_DOT, temp1, temp4); } + yymsp[-4].minor.yy314 = yylhsminor.yy314; break; - case 154: /* term ::= NULL|FLOAT|BLOB */ - case 155: /* term ::= STRING */ yytestcase(yyruleno==155); -{spanExpr(&yymsp[0].minor.yy190,pParse,yymsp[0].major,yymsp[0].minor.yy0); /*A-overwrites-X*/} + case 158: /* term ::= NULL|FLOAT|BLOB */ + case 159: /* term ::= STRING */ yytestcase(yyruleno==159); +{yymsp[0].minor.yy314=tokenExpr(pParse,yymsp[0].major,yymsp[0].minor.yy0); /*A-overwrites-X*/} break; - case 156: /* term ::= INTEGER */ + case 160: /* term ::= INTEGER */ { - yylhsminor.yy190.pExpr = sqlite3ExprAlloc(pParse->db, TK_INTEGER, &yymsp[0].minor.yy0, 1); - yylhsminor.yy190.zStart = yymsp[0].minor.yy0.z; - yylhsminor.yy190.zEnd = yymsp[0].minor.yy0.z + yymsp[0].minor.yy0.n; + yylhsminor.yy314 = sqlite3ExprAlloc(pParse->db, TK_INTEGER, &yymsp[0].minor.yy0, 1); } - yymsp[0].minor.yy190 = yylhsminor.yy190; + yymsp[0].minor.yy314 = yylhsminor.yy314; break; - case 157: /* expr ::= VARIABLE */ + case 161: /* expr ::= VARIABLE */ { if( !(yymsp[0].minor.yy0.z[0]=='#' && sqlite3Isdigit(yymsp[0].minor.yy0.z[1])) ){ u32 n = yymsp[0].minor.yy0.n; - spanExpr(&yymsp[0].minor.yy190, pParse, TK_VARIABLE, yymsp[0].minor.yy0); - sqlite3ExprAssignVarNumber(pParse, yymsp[0].minor.yy190.pExpr, n); + yymsp[0].minor.yy314 = tokenExpr(pParse, TK_VARIABLE, yymsp[0].minor.yy0); + sqlite3ExprAssignVarNumber(pParse, yymsp[0].minor.yy314, n); }else{ /* When doing a nested parse, one can include terms in an expression ** that look like this: #1 #2 ... These terms refer to registers ** in the virtual machine. #N is the N-th register. */ Token t = yymsp[0].minor.yy0; /*A-overwrites-X*/ assert( t.n>=2 ); - spanSet(&yymsp[0].minor.yy190, &t, &t); if( pParse->nested==0 ){ sqlite3ErrorMsg(pParse, "near \"%T\": syntax error", &t); - yymsp[0].minor.yy190.pExpr = 0; + yymsp[0].minor.yy314 = 0; }else{ - yymsp[0].minor.yy190.pExpr = sqlite3PExpr(pParse, TK_REGISTER, 0, 0); - if( yymsp[0].minor.yy190.pExpr ) sqlite3GetInt32(&t.z[1], &yymsp[0].minor.yy190.pExpr->iTable); + yymsp[0].minor.yy314 = sqlite3PExpr(pParse, TK_REGISTER, 0, 0); + if( yymsp[0].minor.yy314 ) sqlite3GetInt32(&t.z[1], &yymsp[0].minor.yy314->iTable); } } } break; - case 158: /* expr ::= expr COLLATE ID|STRING */ + case 162: /* expr ::= expr COLLATE ID|STRING */ { - yymsp[-2].minor.yy190.pExpr = sqlite3ExprAddCollateToken(pParse, yymsp[-2].minor.yy190.pExpr, &yymsp[0].minor.yy0, 1); - yymsp[-2].minor.yy190.zEnd = &yymsp[0].minor.yy0.z[yymsp[0].minor.yy0.n]; + yymsp[-2].minor.yy314 = sqlite3ExprAddCollateToken(pParse, yymsp[-2].minor.yy314, &yymsp[0].minor.yy0, 1); } break; - case 159: /* expr ::= CAST LP expr AS typetoken RP */ + case 163: /* expr ::= CAST LP expr AS typetoken RP */ { - spanSet(&yymsp[-5].minor.yy190,&yymsp[-5].minor.yy0,&yymsp[0].minor.yy0); /*A-overwrites-X*/ - yymsp[-5].minor.yy190.pExpr = sqlite3ExprAlloc(pParse->db, TK_CAST, &yymsp[-1].minor.yy0, 1); - sqlite3ExprAttachSubtrees(pParse->db, yymsp[-5].minor.yy190.pExpr, yymsp[-3].minor.yy190.pExpr, 0); + yymsp[-5].minor.yy314 = sqlite3ExprAlloc(pParse->db, TK_CAST, &yymsp[-1].minor.yy0, 1); + sqlite3ExprAttachSubtrees(pParse->db, yymsp[-5].minor.yy314, yymsp[-3].minor.yy314, 0); } break; - case 160: /* expr ::= ID|INDEXED LP distinct exprlist RP */ + case 164: /* expr ::= ID|INDEXED LP distinct exprlist RP */ { - if( yymsp[-1].minor.yy148 && yymsp[-1].minor.yy148->nExpr>pParse->db->aLimit[SQLITE_LIMIT_FUNCTION_ARG] ){ + if( yymsp[-1].minor.yy322 && yymsp[-1].minor.yy322->nExpr>pParse->db->aLimit[SQLITE_LIMIT_FUNCTION_ARG] ){ sqlite3ErrorMsg(pParse, "too many arguments on function %T", &yymsp[-4].minor.yy0); } - yylhsminor.yy190.pExpr = sqlite3ExprFunction(pParse, yymsp[-1].minor.yy148, &yymsp[-4].minor.yy0); - spanSet(&yylhsminor.yy190,&yymsp[-4].minor.yy0,&yymsp[0].minor.yy0); - if( yymsp[-2].minor.yy194==SF_Distinct && yylhsminor.yy190.pExpr ){ - yylhsminor.yy190.pExpr->flags |= EP_Distinct; + yylhsminor.yy314 = sqlite3ExprFunction(pParse, yymsp[-1].minor.yy322, &yymsp[-4].minor.yy0); + if( yymsp[-2].minor.yy4==SF_Distinct && yylhsminor.yy314 ){ + yylhsminor.yy314->flags |= EP_Distinct; } } - yymsp[-4].minor.yy190 = yylhsminor.yy190; + yymsp[-4].minor.yy314 = yylhsminor.yy314; break; - case 161: /* expr ::= ID|INDEXED LP STAR RP */ + case 165: /* expr ::= ID|INDEXED LP STAR RP */ { - yylhsminor.yy190.pExpr = sqlite3ExprFunction(pParse, 0, &yymsp[-3].minor.yy0); - spanSet(&yylhsminor.yy190,&yymsp[-3].minor.yy0,&yymsp[0].minor.yy0); + yylhsminor.yy314 = sqlite3ExprFunction(pParse, 0, &yymsp[-3].minor.yy0); } - yymsp[-3].minor.yy190 = yylhsminor.yy190; + yymsp[-3].minor.yy314 = yylhsminor.yy314; break; - case 162: /* term ::= CTIME_KW */ + case 166: /* term ::= CTIME_KW */ { - yylhsminor.yy190.pExpr = sqlite3ExprFunction(pParse, 0, &yymsp[0].minor.yy0); - spanSet(&yylhsminor.yy190, &yymsp[0].minor.yy0, &yymsp[0].minor.yy0); + yylhsminor.yy314 = sqlite3ExprFunction(pParse, 0, &yymsp[0].minor.yy0); } - yymsp[0].minor.yy190 = yylhsminor.yy190; + yymsp[0].minor.yy314 = yylhsminor.yy314; break; - case 163: /* expr ::= LP nexprlist COMMA expr RP */ + case 167: /* expr ::= LP nexprlist COMMA expr RP */ { - ExprList *pList = sqlite3ExprListAppend(pParse, yymsp[-3].minor.yy148, yymsp[-1].minor.yy190.pExpr); - yylhsminor.yy190.pExpr = sqlite3PExpr(pParse, TK_VECTOR, 0, 0); - if( yylhsminor.yy190.pExpr ){ - yylhsminor.yy190.pExpr->x.pList = pList; - spanSet(&yylhsminor.yy190, &yymsp[-4].minor.yy0, &yymsp[0].minor.yy0); + ExprList *pList = sqlite3ExprListAppend(pParse, yymsp[-3].minor.yy322, yymsp[-1].minor.yy314); + yymsp[-4].minor.yy314 = sqlite3PExpr(pParse, TK_VECTOR, 0, 0); + if( yymsp[-4].minor.yy314 ){ + yymsp[-4].minor.yy314->x.pList = pList; }else{ sqlite3ExprListDelete(pParse->db, pList); } } - yymsp[-4].minor.yy190 = yylhsminor.yy190; break; - case 164: /* expr ::= expr AND expr */ - case 165: /* expr ::= expr OR expr */ yytestcase(yyruleno==165); - case 166: /* expr ::= expr LT|GT|GE|LE expr */ yytestcase(yyruleno==166); - case 167: /* expr ::= expr EQ|NE expr */ yytestcase(yyruleno==167); - case 168: /* expr ::= expr BITAND|BITOR|LSHIFT|RSHIFT expr */ yytestcase(yyruleno==168); - case 169: /* expr ::= expr PLUS|MINUS expr */ yytestcase(yyruleno==169); - case 170: /* expr ::= expr STAR|SLASH|REM expr */ yytestcase(yyruleno==170); - case 171: /* expr ::= expr CONCAT expr */ yytestcase(yyruleno==171); -{spanBinaryExpr(pParse,yymsp[-1].major,&yymsp[-2].minor.yy190,&yymsp[0].minor.yy190);} + case 168: /* expr ::= expr AND expr */ + case 169: /* expr ::= expr OR expr */ yytestcase(yyruleno==169); + case 170: /* expr ::= expr LT|GT|GE|LE expr */ yytestcase(yyruleno==170); + case 171: /* expr ::= expr EQ|NE expr */ yytestcase(yyruleno==171); + case 172: /* expr ::= expr BITAND|BITOR|LSHIFT|RSHIFT expr */ yytestcase(yyruleno==172); + case 173: /* expr ::= expr PLUS|MINUS expr */ yytestcase(yyruleno==173); + case 174: /* expr ::= expr STAR|SLASH|REM expr */ yytestcase(yyruleno==174); + case 175: /* expr ::= expr CONCAT expr */ yytestcase(yyruleno==175); +{yymsp[-2].minor.yy314=sqlite3PExpr(pParse,yymsp[-1].major,yymsp[-2].minor.yy314,yymsp[0].minor.yy314);} break; - case 172: /* likeop ::= NOT LIKE_KW|MATCH */ + case 176: /* likeop ::= NOT LIKE_KW|MATCH */ {yymsp[-1].minor.yy0=yymsp[0].minor.yy0; yymsp[-1].minor.yy0.n|=0x80000000; /*yymsp[-1].minor.yy0-overwrite-yymsp[0].minor.yy0*/} break; - case 173: /* expr ::= expr likeop expr */ + case 177: /* expr ::= expr likeop expr */ { ExprList *pList; int bNot = yymsp[-1].minor.yy0.n & 0x80000000; yymsp[-1].minor.yy0.n &= 0x7fffffff; - pList = sqlite3ExprListAppend(pParse,0, yymsp[0].minor.yy190.pExpr); - pList = sqlite3ExprListAppend(pParse,pList, yymsp[-2].minor.yy190.pExpr); - yymsp[-2].minor.yy190.pExpr = sqlite3ExprFunction(pParse, pList, &yymsp[-1].minor.yy0); - exprNot(pParse, bNot, &yymsp[-2].minor.yy190); - yymsp[-2].minor.yy190.zEnd = yymsp[0].minor.yy190.zEnd; - if( yymsp[-2].minor.yy190.pExpr ) yymsp[-2].minor.yy190.pExpr->flags |= EP_InfixFunc; + pList = sqlite3ExprListAppend(pParse,0, yymsp[0].minor.yy314); + pList = sqlite3ExprListAppend(pParse,pList, yymsp[-2].minor.yy314); + yymsp[-2].minor.yy314 = sqlite3ExprFunction(pParse, pList, &yymsp[-1].minor.yy0); + if( bNot ) yymsp[-2].minor.yy314 = sqlite3PExpr(pParse, TK_NOT, yymsp[-2].minor.yy314, 0); + if( yymsp[-2].minor.yy314 ) yymsp[-2].minor.yy314->flags |= EP_InfixFunc; } break; - case 174: /* expr ::= expr likeop expr ESCAPE expr */ + case 178: /* expr ::= expr likeop expr ESCAPE expr */ { ExprList *pList; int bNot = yymsp[-3].minor.yy0.n & 0x80000000; yymsp[-3].minor.yy0.n &= 0x7fffffff; - pList = sqlite3ExprListAppend(pParse,0, yymsp[-2].minor.yy190.pExpr); - pList = sqlite3ExprListAppend(pParse,pList, yymsp[-4].minor.yy190.pExpr); - pList = sqlite3ExprListAppend(pParse,pList, yymsp[0].minor.yy190.pExpr); - yymsp[-4].minor.yy190.pExpr = sqlite3ExprFunction(pParse, pList, &yymsp[-3].minor.yy0); - exprNot(pParse, bNot, &yymsp[-4].minor.yy190); - yymsp[-4].minor.yy190.zEnd = yymsp[0].minor.yy190.zEnd; - if( yymsp[-4].minor.yy190.pExpr ) yymsp[-4].minor.yy190.pExpr->flags |= EP_InfixFunc; + pList = sqlite3ExprListAppend(pParse,0, yymsp[-2].minor.yy314); + pList = sqlite3ExprListAppend(pParse,pList, yymsp[-4].minor.yy314); + pList = sqlite3ExprListAppend(pParse,pList, yymsp[0].minor.yy314); + yymsp[-4].minor.yy314 = sqlite3ExprFunction(pParse, pList, &yymsp[-3].minor.yy0); + if( bNot ) yymsp[-4].minor.yy314 = sqlite3PExpr(pParse, TK_NOT, yymsp[-4].minor.yy314, 0); + if( yymsp[-4].minor.yy314 ) yymsp[-4].minor.yy314->flags |= EP_InfixFunc; } break; - case 175: /* expr ::= expr ISNULL|NOTNULL */ -{spanUnaryPostfix(pParse,yymsp[0].major,&yymsp[-1].minor.yy190,&yymsp[0].minor.yy0);} + case 179: /* expr ::= expr ISNULL|NOTNULL */ +{yymsp[-1].minor.yy314 = sqlite3PExpr(pParse,yymsp[0].major,yymsp[-1].minor.yy314,0);} break; - case 176: /* expr ::= expr NOT NULL */ -{spanUnaryPostfix(pParse,TK_NOTNULL,&yymsp[-2].minor.yy190,&yymsp[0].minor.yy0);} + case 180: /* expr ::= expr NOT NULL */ +{yymsp[-2].minor.yy314 = sqlite3PExpr(pParse,TK_NOTNULL,yymsp[-2].minor.yy314,0);} break; - case 177: /* expr ::= expr IS expr */ + case 181: /* expr ::= expr IS expr */ { - spanBinaryExpr(pParse,TK_IS,&yymsp[-2].minor.yy190,&yymsp[0].minor.yy190); - binaryToUnaryIfNull(pParse, yymsp[0].minor.yy190.pExpr, yymsp[-2].minor.yy190.pExpr, TK_ISNULL); + yymsp[-2].minor.yy314 = sqlite3PExpr(pParse,TK_IS,yymsp[-2].minor.yy314,yymsp[0].minor.yy314); + binaryToUnaryIfNull(pParse, yymsp[0].minor.yy314, yymsp[-2].minor.yy314, TK_ISNULL); } break; - case 178: /* expr ::= expr IS NOT expr */ + case 182: /* expr ::= expr IS NOT expr */ { - spanBinaryExpr(pParse,TK_ISNOT,&yymsp[-3].minor.yy190,&yymsp[0].minor.yy190); - binaryToUnaryIfNull(pParse, yymsp[0].minor.yy190.pExpr, yymsp[-3].minor.yy190.pExpr, TK_NOTNULL); + yymsp[-3].minor.yy314 = sqlite3PExpr(pParse,TK_ISNOT,yymsp[-3].minor.yy314,yymsp[0].minor.yy314); + binaryToUnaryIfNull(pParse, yymsp[0].minor.yy314, yymsp[-3].minor.yy314, TK_NOTNULL); } break; - case 179: /* expr ::= NOT expr */ - case 180: /* expr ::= BITNOT expr */ yytestcase(yyruleno==180); -{spanUnaryPrefix(&yymsp[-1].minor.yy190,pParse,yymsp[-1].major,&yymsp[0].minor.yy190,&yymsp[-1].minor.yy0);/*A-overwrites-B*/} + case 183: /* expr ::= NOT expr */ + case 184: /* expr ::= BITNOT expr */ yytestcase(yyruleno==184); +{yymsp[-1].minor.yy314 = sqlite3PExpr(pParse, yymsp[-1].major, yymsp[0].minor.yy314, 0);/*A-overwrites-B*/} break; - case 181: /* expr ::= MINUS expr */ -{spanUnaryPrefix(&yymsp[-1].minor.yy190,pParse,TK_UMINUS,&yymsp[0].minor.yy190,&yymsp[-1].minor.yy0);/*A-overwrites-B*/} + case 185: /* expr ::= MINUS expr */ +{yymsp[-1].minor.yy314 = sqlite3PExpr(pParse, TK_UMINUS, yymsp[0].minor.yy314, 0);} break; - case 182: /* expr ::= PLUS expr */ -{spanUnaryPrefix(&yymsp[-1].minor.yy190,pParse,TK_UPLUS,&yymsp[0].minor.yy190,&yymsp[-1].minor.yy0);/*A-overwrites-B*/} + case 186: /* expr ::= PLUS expr */ +{yymsp[-1].minor.yy314 = sqlite3PExpr(pParse, TK_UPLUS, yymsp[0].minor.yy314, 0);} break; - case 183: /* between_op ::= BETWEEN */ - case 186: /* in_op ::= IN */ yytestcase(yyruleno==186); -{yymsp[0].minor.yy194 = 0;} + case 187: /* between_op ::= BETWEEN */ + case 190: /* in_op ::= IN */ yytestcase(yyruleno==190); +{yymsp[0].minor.yy4 = 0;} break; - case 185: /* expr ::= expr between_op expr AND expr */ + case 189: /* expr ::= expr between_op expr AND expr */ { - ExprList *pList = sqlite3ExprListAppend(pParse,0, yymsp[-2].minor.yy190.pExpr); - pList = sqlite3ExprListAppend(pParse,pList, yymsp[0].minor.yy190.pExpr); - yymsp[-4].minor.yy190.pExpr = sqlite3PExpr(pParse, TK_BETWEEN, yymsp[-4].minor.yy190.pExpr, 0); - if( yymsp[-4].minor.yy190.pExpr ){ - yymsp[-4].minor.yy190.pExpr->x.pList = pList; + ExprList *pList = sqlite3ExprListAppend(pParse,0, yymsp[-2].minor.yy314); + pList = sqlite3ExprListAppend(pParse,pList, yymsp[0].minor.yy314); + yymsp[-4].minor.yy314 = sqlite3PExpr(pParse, TK_BETWEEN, yymsp[-4].minor.yy314, 0); + if( yymsp[-4].minor.yy314 ){ + yymsp[-4].minor.yy314->x.pList = pList; }else{ sqlite3ExprListDelete(pParse->db, pList); } - exprNot(pParse, yymsp[-3].minor.yy194, &yymsp[-4].minor.yy190); - yymsp[-4].minor.yy190.zEnd = yymsp[0].minor.yy190.zEnd; + if( yymsp[-3].minor.yy4 ) yymsp[-4].minor.yy314 = sqlite3PExpr(pParse, TK_NOT, yymsp[-4].minor.yy314, 0); } break; - case 188: /* expr ::= expr in_op LP exprlist RP */ + case 192: /* expr ::= expr in_op LP exprlist RP */ { - if( yymsp[-1].minor.yy148==0 ){ + if( yymsp[-1].minor.yy322==0 ){ /* Expressions of the form ** ** expr1 IN () @@ -139993,9 +143076,9 @@ static void yy_reduce( ** simplify to constants 0 (false) and 1 (true), respectively, ** regardless of the value of expr1. */ - sqlite3ExprDelete(pParse->db, yymsp[-4].minor.yy190.pExpr); - yymsp[-4].minor.yy190.pExpr = sqlite3ExprAlloc(pParse->db, TK_INTEGER,&sqlite3IntTokens[yymsp[-3].minor.yy194],1); - }else if( yymsp[-1].minor.yy148->nExpr==1 ){ + sqlite3ExprDelete(pParse->db, yymsp[-4].minor.yy314); + yymsp[-4].minor.yy314 = sqlite3ExprAlloc(pParse->db, TK_INTEGER,&sqlite3IntTokens[yymsp[-3].minor.yy4],1); + }else if( yymsp[-1].minor.yy322->nExpr==1 ){ /* Expressions of the form: ** ** expr1 IN (?1) @@ -140012,201 +143095,195 @@ static void yy_reduce( ** affinity or the collating sequence to use for comparison. Otherwise, ** the semantics would be subtly different from IN or NOT IN. */ - Expr *pRHS = yymsp[-1].minor.yy148->a[0].pExpr; - yymsp[-1].minor.yy148->a[0].pExpr = 0; - sqlite3ExprListDelete(pParse->db, yymsp[-1].minor.yy148); + Expr *pRHS = yymsp[-1].minor.yy322->a[0].pExpr; + yymsp[-1].minor.yy322->a[0].pExpr = 0; + sqlite3ExprListDelete(pParse->db, yymsp[-1].minor.yy322); /* pRHS cannot be NULL because a malloc error would have been detected ** before now and control would have never reached this point */ if( ALWAYS(pRHS) ){ pRHS->flags &= ~EP_Collate; pRHS->flags |= EP_Generic; } - yymsp[-4].minor.yy190.pExpr = sqlite3PExpr(pParse, yymsp[-3].minor.yy194 ? TK_NE : TK_EQ, yymsp[-4].minor.yy190.pExpr, pRHS); + yymsp[-4].minor.yy314 = sqlite3PExpr(pParse, yymsp[-3].minor.yy4 ? TK_NE : TK_EQ, yymsp[-4].minor.yy314, pRHS); }else{ - yymsp[-4].minor.yy190.pExpr = sqlite3PExpr(pParse, TK_IN, yymsp[-4].minor.yy190.pExpr, 0); - if( yymsp[-4].minor.yy190.pExpr ){ - yymsp[-4].minor.yy190.pExpr->x.pList = yymsp[-1].minor.yy148; - sqlite3ExprSetHeightAndFlags(pParse, yymsp[-4].minor.yy190.pExpr); + yymsp[-4].minor.yy314 = sqlite3PExpr(pParse, TK_IN, yymsp[-4].minor.yy314, 0); + if( yymsp[-4].minor.yy314 ){ + yymsp[-4].minor.yy314->x.pList = yymsp[-1].minor.yy322; + sqlite3ExprSetHeightAndFlags(pParse, yymsp[-4].minor.yy314); }else{ - sqlite3ExprListDelete(pParse->db, yymsp[-1].minor.yy148); + sqlite3ExprListDelete(pParse->db, yymsp[-1].minor.yy322); } - exprNot(pParse, yymsp[-3].minor.yy194, &yymsp[-4].minor.yy190); + if( yymsp[-3].minor.yy4 ) yymsp[-4].minor.yy314 = sqlite3PExpr(pParse, TK_NOT, yymsp[-4].minor.yy314, 0); } - yymsp[-4].minor.yy190.zEnd = &yymsp[0].minor.yy0.z[yymsp[0].minor.yy0.n]; } break; - case 189: /* expr ::= LP select RP */ + case 193: /* expr ::= LP select RP */ { - spanSet(&yymsp[-2].minor.yy190,&yymsp[-2].minor.yy0,&yymsp[0].minor.yy0); /*A-overwrites-B*/ - yymsp[-2].minor.yy190.pExpr = sqlite3PExpr(pParse, TK_SELECT, 0, 0); - sqlite3PExprAddSelect(pParse, yymsp[-2].minor.yy190.pExpr, yymsp[-1].minor.yy243); + yymsp[-2].minor.yy314 = sqlite3PExpr(pParse, TK_SELECT, 0, 0); + sqlite3PExprAddSelect(pParse, yymsp[-2].minor.yy314, yymsp[-1].minor.yy387); } break; - case 190: /* expr ::= expr in_op LP select RP */ + case 194: /* expr ::= expr in_op LP select RP */ { - yymsp[-4].minor.yy190.pExpr = sqlite3PExpr(pParse, TK_IN, yymsp[-4].minor.yy190.pExpr, 0); - sqlite3PExprAddSelect(pParse, yymsp[-4].minor.yy190.pExpr, yymsp[-1].minor.yy243); - exprNot(pParse, yymsp[-3].minor.yy194, &yymsp[-4].minor.yy190); - yymsp[-4].minor.yy190.zEnd = &yymsp[0].minor.yy0.z[yymsp[0].minor.yy0.n]; + yymsp[-4].minor.yy314 = sqlite3PExpr(pParse, TK_IN, yymsp[-4].minor.yy314, 0); + sqlite3PExprAddSelect(pParse, yymsp[-4].minor.yy314, yymsp[-1].minor.yy387); + if( yymsp[-3].minor.yy4 ) yymsp[-4].minor.yy314 = sqlite3PExpr(pParse, TK_NOT, yymsp[-4].minor.yy314, 0); } break; - case 191: /* expr ::= expr in_op nm dbnm paren_exprlist */ + case 195: /* expr ::= expr in_op nm dbnm paren_exprlist */ { SrcList *pSrc = sqlite3SrcListAppend(pParse->db, 0,&yymsp[-2].minor.yy0,&yymsp[-1].minor.yy0); - Select *pSelect = sqlite3SelectNew(pParse, 0,pSrc,0,0,0,0,0,0,0); - if( yymsp[0].minor.yy148 ) sqlite3SrcListFuncArgs(pParse, pSelect ? pSrc : 0, yymsp[0].minor.yy148); - yymsp[-4].minor.yy190.pExpr = sqlite3PExpr(pParse, TK_IN, yymsp[-4].minor.yy190.pExpr, 0); - sqlite3PExprAddSelect(pParse, yymsp[-4].minor.yy190.pExpr, pSelect); - exprNot(pParse, yymsp[-3].minor.yy194, &yymsp[-4].minor.yy190); - yymsp[-4].minor.yy190.zEnd = yymsp[-1].minor.yy0.z ? &yymsp[-1].minor.yy0.z[yymsp[-1].minor.yy0.n] : &yymsp[-2].minor.yy0.z[yymsp[-2].minor.yy0.n]; + Select *pSelect = sqlite3SelectNew(pParse, 0,pSrc,0,0,0,0,0,0); + if( yymsp[0].minor.yy322 ) sqlite3SrcListFuncArgs(pParse, pSelect ? pSrc : 0, yymsp[0].minor.yy322); + yymsp[-4].minor.yy314 = sqlite3PExpr(pParse, TK_IN, yymsp[-4].minor.yy314, 0); + sqlite3PExprAddSelect(pParse, yymsp[-4].minor.yy314, pSelect); + if( yymsp[-3].minor.yy4 ) yymsp[-4].minor.yy314 = sqlite3PExpr(pParse, TK_NOT, yymsp[-4].minor.yy314, 0); } break; - case 192: /* expr ::= EXISTS LP select RP */ + case 196: /* expr ::= EXISTS LP select RP */ { Expr *p; - spanSet(&yymsp[-3].minor.yy190,&yymsp[-3].minor.yy0,&yymsp[0].minor.yy0); /*A-overwrites-B*/ - p = yymsp[-3].minor.yy190.pExpr = sqlite3PExpr(pParse, TK_EXISTS, 0, 0); - sqlite3PExprAddSelect(pParse, p, yymsp[-1].minor.yy243); + p = yymsp[-3].minor.yy314 = sqlite3PExpr(pParse, TK_EXISTS, 0, 0); + sqlite3PExprAddSelect(pParse, p, yymsp[-1].minor.yy387); } break; - case 193: /* expr ::= CASE case_operand case_exprlist case_else END */ + case 197: /* expr ::= CASE case_operand case_exprlist case_else END */ { - spanSet(&yymsp[-4].minor.yy190,&yymsp[-4].minor.yy0,&yymsp[0].minor.yy0); /*A-overwrites-C*/ - yymsp[-4].minor.yy190.pExpr = sqlite3PExpr(pParse, TK_CASE, yymsp[-3].minor.yy72, 0); - if( yymsp[-4].minor.yy190.pExpr ){ - yymsp[-4].minor.yy190.pExpr->x.pList = yymsp[-1].minor.yy72 ? sqlite3ExprListAppend(pParse,yymsp[-2].minor.yy148,yymsp[-1].minor.yy72) : yymsp[-2].minor.yy148; - sqlite3ExprSetHeightAndFlags(pParse, yymsp[-4].minor.yy190.pExpr); + yymsp[-4].minor.yy314 = sqlite3PExpr(pParse, TK_CASE, yymsp[-3].minor.yy314, 0); + if( yymsp[-4].minor.yy314 ){ + yymsp[-4].minor.yy314->x.pList = yymsp[-1].minor.yy314 ? sqlite3ExprListAppend(pParse,yymsp[-2].minor.yy322,yymsp[-1].minor.yy314) : yymsp[-2].minor.yy322; + sqlite3ExprSetHeightAndFlags(pParse, yymsp[-4].minor.yy314); }else{ - sqlite3ExprListDelete(pParse->db, yymsp[-2].minor.yy148); - sqlite3ExprDelete(pParse->db, yymsp[-1].minor.yy72); + sqlite3ExprListDelete(pParse->db, yymsp[-2].minor.yy322); + sqlite3ExprDelete(pParse->db, yymsp[-1].minor.yy314); } } break; - case 194: /* case_exprlist ::= case_exprlist WHEN expr THEN expr */ + case 198: /* case_exprlist ::= case_exprlist WHEN expr THEN expr */ { - yymsp[-4].minor.yy148 = sqlite3ExprListAppend(pParse,yymsp[-4].minor.yy148, yymsp[-2].minor.yy190.pExpr); - yymsp[-4].minor.yy148 = sqlite3ExprListAppend(pParse,yymsp[-4].minor.yy148, yymsp[0].minor.yy190.pExpr); + yymsp[-4].minor.yy322 = sqlite3ExprListAppend(pParse,yymsp[-4].minor.yy322, yymsp[-2].minor.yy314); + yymsp[-4].minor.yy322 = sqlite3ExprListAppend(pParse,yymsp[-4].minor.yy322, yymsp[0].minor.yy314); } break; - case 195: /* case_exprlist ::= WHEN expr THEN expr */ + case 199: /* case_exprlist ::= WHEN expr THEN expr */ { - yymsp[-3].minor.yy148 = sqlite3ExprListAppend(pParse,0, yymsp[-2].minor.yy190.pExpr); - yymsp[-3].minor.yy148 = sqlite3ExprListAppend(pParse,yymsp[-3].minor.yy148, yymsp[0].minor.yy190.pExpr); + yymsp[-3].minor.yy322 = sqlite3ExprListAppend(pParse,0, yymsp[-2].minor.yy314); + yymsp[-3].minor.yy322 = sqlite3ExprListAppend(pParse,yymsp[-3].minor.yy322, yymsp[0].minor.yy314); } break; - case 198: /* case_operand ::= expr */ -{yymsp[0].minor.yy72 = yymsp[0].minor.yy190.pExpr; /*A-overwrites-X*/} + case 202: /* case_operand ::= expr */ +{yymsp[0].minor.yy314 = yymsp[0].minor.yy314; /*A-overwrites-X*/} break; - case 201: /* nexprlist ::= nexprlist COMMA expr */ -{yymsp[-2].minor.yy148 = sqlite3ExprListAppend(pParse,yymsp[-2].minor.yy148,yymsp[0].minor.yy190.pExpr);} + case 205: /* nexprlist ::= nexprlist COMMA expr */ +{yymsp[-2].minor.yy322 = sqlite3ExprListAppend(pParse,yymsp[-2].minor.yy322,yymsp[0].minor.yy314);} break; - case 202: /* nexprlist ::= expr */ -{yymsp[0].minor.yy148 = sqlite3ExprListAppend(pParse,0,yymsp[0].minor.yy190.pExpr); /*A-overwrites-Y*/} + case 206: /* nexprlist ::= expr */ +{yymsp[0].minor.yy322 = sqlite3ExprListAppend(pParse,0,yymsp[0].minor.yy314); /*A-overwrites-Y*/} break; - case 204: /* paren_exprlist ::= LP exprlist RP */ - case 209: /* eidlist_opt ::= LP eidlist RP */ yytestcase(yyruleno==209); -{yymsp[-2].minor.yy148 = yymsp[-1].minor.yy148;} + case 208: /* paren_exprlist ::= LP exprlist RP */ + case 213: /* eidlist_opt ::= LP eidlist RP */ yytestcase(yyruleno==213); +{yymsp[-2].minor.yy322 = yymsp[-1].minor.yy322;} break; - case 205: /* cmd ::= createkw uniqueflag INDEX ifnotexists nm dbnm ON nm LP sortlist RP where_opt */ + case 209: /* cmd ::= createkw uniqueflag INDEX ifnotexists nm dbnm ON nm LP sortlist RP where_opt */ { sqlite3CreateIndex(pParse, &yymsp[-7].minor.yy0, &yymsp[-6].minor.yy0, - sqlite3SrcListAppend(pParse->db,0,&yymsp[-4].minor.yy0,0), yymsp[-2].minor.yy148, yymsp[-10].minor.yy194, - &yymsp[-11].minor.yy0, yymsp[0].minor.yy72, SQLITE_SO_ASC, yymsp[-8].minor.yy194, SQLITE_IDXTYPE_APPDEF); + sqlite3SrcListAppend(pParse->db,0,&yymsp[-4].minor.yy0,0), yymsp[-2].minor.yy322, yymsp[-10].minor.yy4, + &yymsp[-11].minor.yy0, yymsp[0].minor.yy314, SQLITE_SO_ASC, yymsp[-8].minor.yy4, SQLITE_IDXTYPE_APPDEF); } break; - case 206: /* uniqueflag ::= UNIQUE */ - case 246: /* raisetype ::= ABORT */ yytestcase(yyruleno==246); -{yymsp[0].minor.yy194 = OE_Abort;} + case 210: /* uniqueflag ::= UNIQUE */ + case 250: /* raisetype ::= ABORT */ yytestcase(yyruleno==250); +{yymsp[0].minor.yy4 = OE_Abort;} break; - case 207: /* uniqueflag ::= */ -{yymsp[1].minor.yy194 = OE_None;} + case 211: /* uniqueflag ::= */ +{yymsp[1].minor.yy4 = OE_None;} break; - case 210: /* eidlist ::= eidlist COMMA nm collate sortorder */ + case 214: /* eidlist ::= eidlist COMMA nm collate sortorder */ { - yymsp[-4].minor.yy148 = parserAddExprIdListTerm(pParse, yymsp[-4].minor.yy148, &yymsp[-2].minor.yy0, yymsp[-1].minor.yy194, yymsp[0].minor.yy194); + yymsp[-4].minor.yy322 = parserAddExprIdListTerm(pParse, yymsp[-4].minor.yy322, &yymsp[-2].minor.yy0, yymsp[-1].minor.yy4, yymsp[0].minor.yy4); } break; - case 211: /* eidlist ::= nm collate sortorder */ + case 215: /* eidlist ::= nm collate sortorder */ { - yymsp[-2].minor.yy148 = parserAddExprIdListTerm(pParse, 0, &yymsp[-2].minor.yy0, yymsp[-1].minor.yy194, yymsp[0].minor.yy194); /*A-overwrites-Y*/ + yymsp[-2].minor.yy322 = parserAddExprIdListTerm(pParse, 0, &yymsp[-2].minor.yy0, yymsp[-1].minor.yy4, yymsp[0].minor.yy4); /*A-overwrites-Y*/ } break; - case 214: /* cmd ::= DROP INDEX ifexists fullname */ -{sqlite3DropIndex(pParse, yymsp[0].minor.yy185, yymsp[-1].minor.yy194);} + case 218: /* cmd ::= DROP INDEX ifexists fullname */ +{sqlite3DropIndex(pParse, yymsp[0].minor.yy259, yymsp[-1].minor.yy4);} break; - case 215: /* cmd ::= VACUUM */ + case 219: /* cmd ::= VACUUM */ {sqlite3Vacuum(pParse,0);} break; - case 216: /* cmd ::= VACUUM nm */ + case 220: /* cmd ::= VACUUM nm */ {sqlite3Vacuum(pParse,&yymsp[0].minor.yy0);} break; - case 217: /* cmd ::= PRAGMA nm dbnm */ + case 221: /* cmd ::= PRAGMA nm dbnm */ {sqlite3Pragma(pParse,&yymsp[-1].minor.yy0,&yymsp[0].minor.yy0,0,0);} break; - case 218: /* cmd ::= PRAGMA nm dbnm EQ nmnum */ + case 222: /* cmd ::= PRAGMA nm dbnm EQ nmnum */ {sqlite3Pragma(pParse,&yymsp[-3].minor.yy0,&yymsp[-2].minor.yy0,&yymsp[0].minor.yy0,0);} break; - case 219: /* cmd ::= PRAGMA nm dbnm LP nmnum RP */ + case 223: /* cmd ::= PRAGMA nm dbnm LP nmnum RP */ {sqlite3Pragma(pParse,&yymsp[-4].minor.yy0,&yymsp[-3].minor.yy0,&yymsp[-1].minor.yy0,0);} break; - case 220: /* cmd ::= PRAGMA nm dbnm EQ minus_num */ + case 224: /* cmd ::= PRAGMA nm dbnm EQ minus_num */ {sqlite3Pragma(pParse,&yymsp[-3].minor.yy0,&yymsp[-2].minor.yy0,&yymsp[0].minor.yy0,1);} break; - case 221: /* cmd ::= PRAGMA nm dbnm LP minus_num RP */ + case 225: /* cmd ::= PRAGMA nm dbnm LP minus_num RP */ {sqlite3Pragma(pParse,&yymsp[-4].minor.yy0,&yymsp[-3].minor.yy0,&yymsp[-1].minor.yy0,1);} break; - case 224: /* cmd ::= createkw trigger_decl BEGIN trigger_cmd_list END */ + case 228: /* cmd ::= createkw trigger_decl BEGIN trigger_cmd_list END */ { Token all; all.z = yymsp[-3].minor.yy0.z; all.n = (int)(yymsp[0].minor.yy0.z - yymsp[-3].minor.yy0.z) + yymsp[0].minor.yy0.n; - sqlite3FinishTrigger(pParse, yymsp[-1].minor.yy145, &all); + sqlite3FinishTrigger(pParse, yymsp[-1].minor.yy203, &all); } break; - case 225: /* trigger_decl ::= temp TRIGGER ifnotexists nm dbnm trigger_time trigger_event ON fullname foreach_clause when_clause */ + case 229: /* trigger_decl ::= temp TRIGGER ifnotexists nm dbnm trigger_time trigger_event ON fullname foreach_clause when_clause */ { - sqlite3BeginTrigger(pParse, &yymsp[-7].minor.yy0, &yymsp[-6].minor.yy0, yymsp[-5].minor.yy194, yymsp[-4].minor.yy332.a, yymsp[-4].minor.yy332.b, yymsp[-2].minor.yy185, yymsp[0].minor.yy72, yymsp[-10].minor.yy194, yymsp[-8].minor.yy194); + sqlite3BeginTrigger(pParse, &yymsp[-7].minor.yy0, &yymsp[-6].minor.yy0, yymsp[-5].minor.yy4, yymsp[-4].minor.yy90.a, yymsp[-4].minor.yy90.b, yymsp[-2].minor.yy259, yymsp[0].minor.yy314, yymsp[-10].minor.yy4, yymsp[-8].minor.yy4); yymsp[-10].minor.yy0 = (yymsp[-6].minor.yy0.n==0?yymsp[-7].minor.yy0:yymsp[-6].minor.yy0); /*A-overwrites-T*/ } break; - case 226: /* trigger_time ::= BEFORE|AFTER */ -{ yymsp[0].minor.yy194 = yymsp[0].major; /*A-overwrites-X*/ } + case 230: /* trigger_time ::= BEFORE|AFTER */ +{ yymsp[0].minor.yy4 = yymsp[0].major; /*A-overwrites-X*/ } break; - case 227: /* trigger_time ::= INSTEAD OF */ -{ yymsp[-1].minor.yy194 = TK_INSTEAD;} + case 231: /* trigger_time ::= INSTEAD OF */ +{ yymsp[-1].minor.yy4 = TK_INSTEAD;} break; - case 228: /* trigger_time ::= */ -{ yymsp[1].minor.yy194 = TK_BEFORE; } + case 232: /* trigger_time ::= */ +{ yymsp[1].minor.yy4 = TK_BEFORE; } break; - case 229: /* trigger_event ::= DELETE|INSERT */ - case 230: /* trigger_event ::= UPDATE */ yytestcase(yyruleno==230); -{yymsp[0].minor.yy332.a = yymsp[0].major; /*A-overwrites-X*/ yymsp[0].minor.yy332.b = 0;} + case 233: /* trigger_event ::= DELETE|INSERT */ + case 234: /* trigger_event ::= UPDATE */ yytestcase(yyruleno==234); +{yymsp[0].minor.yy90.a = yymsp[0].major; /*A-overwrites-X*/ yymsp[0].minor.yy90.b = 0;} break; - case 231: /* trigger_event ::= UPDATE OF idlist */ -{yymsp[-2].minor.yy332.a = TK_UPDATE; yymsp[-2].minor.yy332.b = yymsp[0].minor.yy254;} + case 235: /* trigger_event ::= UPDATE OF idlist */ +{yymsp[-2].minor.yy90.a = TK_UPDATE; yymsp[-2].minor.yy90.b = yymsp[0].minor.yy384;} break; - case 232: /* when_clause ::= */ - case 251: /* key_opt ::= */ yytestcase(yyruleno==251); -{ yymsp[1].minor.yy72 = 0; } + case 236: /* when_clause ::= */ + case 255: /* key_opt ::= */ yytestcase(yyruleno==255); +{ yymsp[1].minor.yy314 = 0; } break; - case 233: /* when_clause ::= WHEN expr */ - case 252: /* key_opt ::= KEY expr */ yytestcase(yyruleno==252); -{ yymsp[-1].minor.yy72 = yymsp[0].minor.yy190.pExpr; } + case 237: /* when_clause ::= WHEN expr */ + case 256: /* key_opt ::= KEY expr */ yytestcase(yyruleno==256); +{ yymsp[-1].minor.yy314 = yymsp[0].minor.yy314; } break; - case 234: /* trigger_cmd_list ::= trigger_cmd_list trigger_cmd SEMI */ + case 238: /* trigger_cmd_list ::= trigger_cmd_list trigger_cmd SEMI */ { - assert( yymsp[-2].minor.yy145!=0 ); - yymsp[-2].minor.yy145->pLast->pNext = yymsp[-1].minor.yy145; - yymsp[-2].minor.yy145->pLast = yymsp[-1].minor.yy145; + assert( yymsp[-2].minor.yy203!=0 ); + yymsp[-2].minor.yy203->pLast->pNext = yymsp[-1].minor.yy203; + yymsp[-2].minor.yy203->pLast = yymsp[-1].minor.yy203; } break; - case 235: /* trigger_cmd_list ::= trigger_cmd SEMI */ + case 239: /* trigger_cmd_list ::= trigger_cmd SEMI */ { - assert( yymsp[-1].minor.yy145!=0 ); - yymsp[-1].minor.yy145->pLast = yymsp[-1].minor.yy145; + assert( yymsp[-1].minor.yy203!=0 ); + yymsp[-1].minor.yy203->pLast = yymsp[-1].minor.yy203; } break; - case 236: /* trnm ::= nm DOT nm */ + case 240: /* trnm ::= nm DOT nm */ { yymsp[-2].minor.yy0 = yymsp[0].minor.yy0; sqlite3ErrorMsg(pParse, @@ -140214,196 +143291,194 @@ static void yy_reduce( "statements within triggers"); } break; - case 237: /* tridxby ::= INDEXED BY nm */ + case 241: /* tridxby ::= INDEXED BY nm */ { sqlite3ErrorMsg(pParse, "the INDEXED BY clause is not allowed on UPDATE or DELETE statements " "within triggers"); } break; - case 238: /* tridxby ::= NOT INDEXED */ + case 242: /* tridxby ::= NOT INDEXED */ { sqlite3ErrorMsg(pParse, "the NOT INDEXED clause is not allowed on UPDATE or DELETE statements " "within triggers"); } break; - case 239: /* trigger_cmd ::= UPDATE orconf trnm tridxby SET setlist where_opt */ -{yymsp[-6].minor.yy145 = sqlite3TriggerUpdateStep(pParse->db, &yymsp[-4].minor.yy0, yymsp[-1].minor.yy148, yymsp[0].minor.yy72, yymsp[-5].minor.yy194);} + case 243: /* trigger_cmd ::= UPDATE orconf trnm tridxby SET setlist where_opt scanpt */ +{yylhsminor.yy203 = sqlite3TriggerUpdateStep(pParse->db, &yymsp[-5].minor.yy0, yymsp[-2].minor.yy322, yymsp[-1].minor.yy314, yymsp[-6].minor.yy4, yymsp[-7].minor.yy0.z, yymsp[0].minor.yy336);} + yymsp[-7].minor.yy203 = yylhsminor.yy203; break; - case 240: /* trigger_cmd ::= insert_cmd INTO trnm idlist_opt select */ -{yymsp[-4].minor.yy145 = sqlite3TriggerInsertStep(pParse->db, &yymsp[-2].minor.yy0, yymsp[-1].minor.yy254, yymsp[0].minor.yy243, yymsp[-4].minor.yy194);/*A-overwrites-R*/} + case 244: /* trigger_cmd ::= scanpt insert_cmd INTO trnm idlist_opt select scanpt */ +{yylhsminor.yy203 = sqlite3TriggerInsertStep(pParse->db,&yymsp[-3].minor.yy0,yymsp[-2].minor.yy384,yymsp[-1].minor.yy387,yymsp[-5].minor.yy4,yymsp[-6].minor.yy336,yymsp[0].minor.yy336);/*yylhsminor.yy203-overwrites-yymsp[-5].minor.yy4*/} + yymsp[-6].minor.yy203 = yylhsminor.yy203; break; - case 241: /* trigger_cmd ::= DELETE FROM trnm tridxby where_opt */ -{yymsp[-4].minor.yy145 = sqlite3TriggerDeleteStep(pParse->db, &yymsp[-2].minor.yy0, yymsp[0].minor.yy72);} + case 245: /* trigger_cmd ::= DELETE FROM trnm tridxby where_opt scanpt */ +{yylhsminor.yy203 = sqlite3TriggerDeleteStep(pParse->db, &yymsp[-3].minor.yy0, yymsp[-1].minor.yy314, yymsp[-5].minor.yy0.z, yymsp[0].minor.yy336);} + yymsp[-5].minor.yy203 = yylhsminor.yy203; break; - case 242: /* trigger_cmd ::= select */ -{yymsp[0].minor.yy145 = sqlite3TriggerSelectStep(pParse->db, yymsp[0].minor.yy243); /*A-overwrites-X*/} + case 246: /* trigger_cmd ::= scanpt select scanpt */ +{yylhsminor.yy203 = sqlite3TriggerSelectStep(pParse->db, yymsp[-1].minor.yy387, yymsp[-2].minor.yy336, yymsp[0].minor.yy336); /*yylhsminor.yy203-overwrites-yymsp[-1].minor.yy387*/} + yymsp[-2].minor.yy203 = yylhsminor.yy203; break; - case 243: /* expr ::= RAISE LP IGNORE RP */ + case 247: /* expr ::= RAISE LP IGNORE RP */ { - spanSet(&yymsp[-3].minor.yy190,&yymsp[-3].minor.yy0,&yymsp[0].minor.yy0); /*A-overwrites-X*/ - yymsp[-3].minor.yy190.pExpr = sqlite3PExpr(pParse, TK_RAISE, 0, 0); - if( yymsp[-3].minor.yy190.pExpr ){ - yymsp[-3].minor.yy190.pExpr->affinity = OE_Ignore; + yymsp[-3].minor.yy314 = sqlite3PExpr(pParse, TK_RAISE, 0, 0); + if( yymsp[-3].minor.yy314 ){ + yymsp[-3].minor.yy314->affinity = OE_Ignore; } } break; - case 244: /* expr ::= RAISE LP raisetype COMMA nm RP */ + case 248: /* expr ::= RAISE LP raisetype COMMA nm RP */ { - spanSet(&yymsp[-5].minor.yy190,&yymsp[-5].minor.yy0,&yymsp[0].minor.yy0); /*A-overwrites-X*/ - yymsp[-5].minor.yy190.pExpr = sqlite3ExprAlloc(pParse->db, TK_RAISE, &yymsp[-1].minor.yy0, 1); - if( yymsp[-5].minor.yy190.pExpr ) { - yymsp[-5].minor.yy190.pExpr->affinity = (char)yymsp[-3].minor.yy194; + yymsp[-5].minor.yy314 = sqlite3ExprAlloc(pParse->db, TK_RAISE, &yymsp[-1].minor.yy0, 1); + if( yymsp[-5].minor.yy314 ) { + yymsp[-5].minor.yy314->affinity = (char)yymsp[-3].minor.yy4; } } break; - case 245: /* raisetype ::= ROLLBACK */ -{yymsp[0].minor.yy194 = OE_Rollback;} + case 249: /* raisetype ::= ROLLBACK */ +{yymsp[0].minor.yy4 = OE_Rollback;} break; - case 247: /* raisetype ::= FAIL */ -{yymsp[0].minor.yy194 = OE_Fail;} + case 251: /* raisetype ::= FAIL */ +{yymsp[0].minor.yy4 = OE_Fail;} break; - case 248: /* cmd ::= DROP TRIGGER ifexists fullname */ + case 252: /* cmd ::= DROP TRIGGER ifexists fullname */ { - sqlite3DropTrigger(pParse,yymsp[0].minor.yy185,yymsp[-1].minor.yy194); + sqlite3DropTrigger(pParse,yymsp[0].minor.yy259,yymsp[-1].minor.yy4); } break; - case 249: /* cmd ::= ATTACH database_kw_opt expr AS expr key_opt */ + case 253: /* cmd ::= ATTACH database_kw_opt expr AS expr key_opt */ { - sqlite3Attach(pParse, yymsp[-3].minor.yy190.pExpr, yymsp[-1].minor.yy190.pExpr, yymsp[0].minor.yy72); + sqlite3Attach(pParse, yymsp[-3].minor.yy314, yymsp[-1].minor.yy314, yymsp[0].minor.yy314); } break; - case 250: /* cmd ::= DETACH database_kw_opt expr */ + case 254: /* cmd ::= DETACH database_kw_opt expr */ { - sqlite3Detach(pParse, yymsp[0].minor.yy190.pExpr); + sqlite3Detach(pParse, yymsp[0].minor.yy314); } break; - case 253: /* cmd ::= REINDEX */ + case 257: /* cmd ::= REINDEX */ {sqlite3Reindex(pParse, 0, 0);} break; - case 254: /* cmd ::= REINDEX nm dbnm */ + case 258: /* cmd ::= REINDEX nm dbnm */ {sqlite3Reindex(pParse, &yymsp[-1].minor.yy0, &yymsp[0].minor.yy0);} break; - case 255: /* cmd ::= ANALYZE */ + case 259: /* cmd ::= ANALYZE */ {sqlite3Analyze(pParse, 0, 0);} break; - case 256: /* cmd ::= ANALYZE nm dbnm */ + case 260: /* cmd ::= ANALYZE nm dbnm */ {sqlite3Analyze(pParse, &yymsp[-1].minor.yy0, &yymsp[0].minor.yy0);} break; - case 257: /* cmd ::= ALTER TABLE fullname RENAME TO nm */ + case 261: /* cmd ::= ALTER TABLE fullname RENAME TO nm */ { - sqlite3AlterRenameTable(pParse,yymsp[-3].minor.yy185,&yymsp[0].minor.yy0); + sqlite3AlterRenameTable(pParse,yymsp[-3].minor.yy259,&yymsp[0].minor.yy0); } break; - case 258: /* cmd ::= ALTER TABLE add_column_fullname ADD kwcolumn_opt columnname carglist */ + case 262: /* cmd ::= ALTER TABLE add_column_fullname ADD kwcolumn_opt columnname carglist */ { yymsp[-1].minor.yy0.n = (int)(pParse->sLastToken.z-yymsp[-1].minor.yy0.z) + pParse->sLastToken.n; sqlite3AlterFinishAddColumn(pParse, &yymsp[-1].minor.yy0); } break; - case 259: /* add_column_fullname ::= fullname */ + case 263: /* add_column_fullname ::= fullname */ { disableLookaside(pParse); - sqlite3AlterBeginAddColumn(pParse, yymsp[0].minor.yy185); + sqlite3AlterBeginAddColumn(pParse, yymsp[0].minor.yy259); } break; - case 260: /* cmd ::= create_vtab */ + case 264: /* cmd ::= create_vtab */ {sqlite3VtabFinishParse(pParse,0);} break; - case 261: /* cmd ::= create_vtab LP vtabarglist RP */ + case 265: /* cmd ::= create_vtab LP vtabarglist RP */ {sqlite3VtabFinishParse(pParse,&yymsp[0].minor.yy0);} break; - case 262: /* create_vtab ::= createkw VIRTUAL TABLE ifnotexists nm dbnm USING nm */ + case 266: /* create_vtab ::= createkw VIRTUAL TABLE ifnotexists nm dbnm USING nm */ { - sqlite3VtabBeginParse(pParse, &yymsp[-3].minor.yy0, &yymsp[-2].minor.yy0, &yymsp[0].minor.yy0, yymsp[-4].minor.yy194); + sqlite3VtabBeginParse(pParse, &yymsp[-3].minor.yy0, &yymsp[-2].minor.yy0, &yymsp[0].minor.yy0, yymsp[-4].minor.yy4); } break; - case 263: /* vtabarg ::= */ + case 267: /* vtabarg ::= */ {sqlite3VtabArgInit(pParse);} break; - case 264: /* vtabargtoken ::= ANY */ - case 265: /* vtabargtoken ::= lp anylist RP */ yytestcase(yyruleno==265); - case 266: /* lp ::= LP */ yytestcase(yyruleno==266); + case 268: /* vtabargtoken ::= ANY */ + case 269: /* vtabargtoken ::= lp anylist RP */ yytestcase(yyruleno==269); + case 270: /* lp ::= LP */ yytestcase(yyruleno==270); {sqlite3VtabArgExtend(pParse,&yymsp[0].minor.yy0);} break; - case 267: /* with ::= */ -{yymsp[1].minor.yy285 = 0;} + case 271: /* with ::= WITH wqlist */ + case 272: /* with ::= WITH RECURSIVE wqlist */ yytestcase(yyruleno==272); +{ sqlite3WithPush(pParse, yymsp[0].minor.yy451, 1); } break; - case 268: /* with ::= WITH wqlist */ -{ yymsp[-1].minor.yy285 = yymsp[0].minor.yy285; } - break; - case 269: /* with ::= WITH RECURSIVE wqlist */ -{ yymsp[-2].minor.yy285 = yymsp[0].minor.yy285; } - break; - case 270: /* wqlist ::= nm eidlist_opt AS LP select RP */ + case 273: /* wqlist ::= nm eidlist_opt AS LP select RP */ { - yymsp[-5].minor.yy285 = sqlite3WithAdd(pParse, 0, &yymsp[-5].minor.yy0, yymsp[-4].minor.yy148, yymsp[-1].minor.yy243); /*A-overwrites-X*/ + yymsp[-5].minor.yy451 = sqlite3WithAdd(pParse, 0, &yymsp[-5].minor.yy0, yymsp[-4].minor.yy322, yymsp[-1].minor.yy387); /*A-overwrites-X*/ } break; - case 271: /* wqlist ::= wqlist COMMA nm eidlist_opt AS LP select RP */ + case 274: /* wqlist ::= wqlist COMMA nm eidlist_opt AS LP select RP */ { - yymsp[-7].minor.yy285 = sqlite3WithAdd(pParse, yymsp[-7].minor.yy285, &yymsp[-5].minor.yy0, yymsp[-4].minor.yy148, yymsp[-1].minor.yy243); + yymsp[-7].minor.yy451 = sqlite3WithAdd(pParse, yymsp[-7].minor.yy451, &yymsp[-5].minor.yy0, yymsp[-4].minor.yy322, yymsp[-1].minor.yy387); } break; default: - /* (272) input ::= cmdlist */ yytestcase(yyruleno==272); - /* (273) cmdlist ::= cmdlist ecmd */ yytestcase(yyruleno==273); - /* (274) cmdlist ::= ecmd (OPTIMIZED OUT) */ assert(yyruleno!=274); - /* (275) ecmd ::= SEMI */ yytestcase(yyruleno==275); - /* (276) ecmd ::= explain cmdx SEMI */ yytestcase(yyruleno==276); - /* (277) explain ::= */ yytestcase(yyruleno==277); - /* (278) trans_opt ::= */ yytestcase(yyruleno==278); - /* (279) trans_opt ::= TRANSACTION */ yytestcase(yyruleno==279); - /* (280) trans_opt ::= TRANSACTION nm */ yytestcase(yyruleno==280); - /* (281) savepoint_opt ::= SAVEPOINT */ yytestcase(yyruleno==281); - /* (282) savepoint_opt ::= */ yytestcase(yyruleno==282); - /* (283) cmd ::= create_table create_table_args */ yytestcase(yyruleno==283); - /* (284) columnlist ::= columnlist COMMA columnname carglist */ yytestcase(yyruleno==284); - /* (285) columnlist ::= columnname carglist */ yytestcase(yyruleno==285); - /* (286) nm ::= ID|INDEXED */ yytestcase(yyruleno==286); - /* (287) nm ::= STRING */ yytestcase(yyruleno==287); - /* (288) nm ::= JOIN_KW */ yytestcase(yyruleno==288); - /* (289) typetoken ::= typename */ yytestcase(yyruleno==289); - /* (290) typename ::= ID|STRING */ yytestcase(yyruleno==290); - /* (291) signed ::= plus_num (OPTIMIZED OUT) */ assert(yyruleno!=291); - /* (292) signed ::= minus_num (OPTIMIZED OUT) */ assert(yyruleno!=292); - /* (293) carglist ::= carglist ccons */ yytestcase(yyruleno==293); - /* (294) carglist ::= */ yytestcase(yyruleno==294); - /* (295) ccons ::= NULL onconf */ yytestcase(yyruleno==295); - /* (296) conslist_opt ::= COMMA conslist */ yytestcase(yyruleno==296); - /* (297) conslist ::= conslist tconscomma tcons */ yytestcase(yyruleno==297); - /* (298) conslist ::= tcons (OPTIMIZED OUT) */ assert(yyruleno!=298); - /* (299) tconscomma ::= */ yytestcase(yyruleno==299); - /* (300) defer_subclause_opt ::= defer_subclause (OPTIMIZED OUT) */ assert(yyruleno!=300); - /* (301) resolvetype ::= raisetype (OPTIMIZED OUT) */ assert(yyruleno!=301); - /* (302) selectnowith ::= oneselect (OPTIMIZED OUT) */ assert(yyruleno!=302); - /* (303) oneselect ::= values */ yytestcase(yyruleno==303); - /* (304) sclp ::= selcollist COMMA */ yytestcase(yyruleno==304); - /* (305) as ::= ID|STRING */ yytestcase(yyruleno==305); - /* (306) expr ::= term (OPTIMIZED OUT) */ assert(yyruleno!=306); - /* (307) likeop ::= LIKE_KW|MATCH */ yytestcase(yyruleno==307); - /* (308) exprlist ::= nexprlist */ yytestcase(yyruleno==308); - /* (309) nmnum ::= plus_num (OPTIMIZED OUT) */ assert(yyruleno!=309); - /* (310) nmnum ::= nm (OPTIMIZED OUT) */ assert(yyruleno!=310); - /* (311) nmnum ::= ON */ yytestcase(yyruleno==311); - /* (312) nmnum ::= DELETE */ yytestcase(yyruleno==312); - /* (313) nmnum ::= DEFAULT */ yytestcase(yyruleno==313); - /* (314) plus_num ::= INTEGER|FLOAT */ yytestcase(yyruleno==314); - /* (315) foreach_clause ::= */ yytestcase(yyruleno==315); - /* (316) foreach_clause ::= FOR EACH ROW */ yytestcase(yyruleno==316); - /* (317) trnm ::= nm */ yytestcase(yyruleno==317); - /* (318) tridxby ::= */ yytestcase(yyruleno==318); - /* (319) database_kw_opt ::= DATABASE */ yytestcase(yyruleno==319); - /* (320) database_kw_opt ::= */ yytestcase(yyruleno==320); - /* (321) kwcolumn_opt ::= */ yytestcase(yyruleno==321); - /* (322) kwcolumn_opt ::= COLUMNKW */ yytestcase(yyruleno==322); - /* (323) vtabarglist ::= vtabarg */ yytestcase(yyruleno==323); - /* (324) vtabarglist ::= vtabarglist COMMA vtabarg */ yytestcase(yyruleno==324); - /* (325) vtabarg ::= vtabarg vtabargtoken */ yytestcase(yyruleno==325); - /* (326) anylist ::= */ yytestcase(yyruleno==326); - /* (327) anylist ::= anylist LP anylist RP */ yytestcase(yyruleno==327); - /* (328) anylist ::= anylist ANY */ yytestcase(yyruleno==328); + /* (275) input ::= cmdlist */ yytestcase(yyruleno==275); + /* (276) cmdlist ::= cmdlist ecmd */ yytestcase(yyruleno==276); + /* (277) cmdlist ::= ecmd (OPTIMIZED OUT) */ assert(yyruleno!=277); + /* (278) ecmd ::= SEMI */ yytestcase(yyruleno==278); + /* (279) ecmd ::= explain cmdx SEMI */ yytestcase(yyruleno==279); + /* (280) explain ::= */ yytestcase(yyruleno==280); + /* (281) trans_opt ::= */ yytestcase(yyruleno==281); + /* (282) trans_opt ::= TRANSACTION */ yytestcase(yyruleno==282); + /* (283) trans_opt ::= TRANSACTION nm */ yytestcase(yyruleno==283); + /* (284) savepoint_opt ::= SAVEPOINT */ yytestcase(yyruleno==284); + /* (285) savepoint_opt ::= */ yytestcase(yyruleno==285); + /* (286) cmd ::= create_table create_table_args */ yytestcase(yyruleno==286); + /* (287) columnlist ::= columnlist COMMA columnname carglist */ yytestcase(yyruleno==287); + /* (288) columnlist ::= columnname carglist */ yytestcase(yyruleno==288); + /* (289) nm ::= ID|INDEXED */ yytestcase(yyruleno==289); + /* (290) nm ::= STRING */ yytestcase(yyruleno==290); + /* (291) nm ::= JOIN_KW */ yytestcase(yyruleno==291); + /* (292) typetoken ::= typename */ yytestcase(yyruleno==292); + /* (293) typename ::= ID|STRING */ yytestcase(yyruleno==293); + /* (294) signed ::= plus_num (OPTIMIZED OUT) */ assert(yyruleno!=294); + /* (295) signed ::= minus_num (OPTIMIZED OUT) */ assert(yyruleno!=295); + /* (296) carglist ::= carglist ccons */ yytestcase(yyruleno==296); + /* (297) carglist ::= */ yytestcase(yyruleno==297); + /* (298) ccons ::= NULL onconf */ yytestcase(yyruleno==298); + /* (299) conslist_opt ::= COMMA conslist */ yytestcase(yyruleno==299); + /* (300) conslist ::= conslist tconscomma tcons */ yytestcase(yyruleno==300); + /* (301) conslist ::= tcons (OPTIMIZED OUT) */ assert(yyruleno!=301); + /* (302) tconscomma ::= */ yytestcase(yyruleno==302); + /* (303) defer_subclause_opt ::= defer_subclause (OPTIMIZED OUT) */ assert(yyruleno!=303); + /* (304) resolvetype ::= raisetype (OPTIMIZED OUT) */ assert(yyruleno!=304); + /* (305) selectnowith ::= oneselect (OPTIMIZED OUT) */ assert(yyruleno!=305); + /* (306) oneselect ::= values */ yytestcase(yyruleno==306); + /* (307) sclp ::= selcollist COMMA */ yytestcase(yyruleno==307); + /* (308) as ::= ID|STRING */ yytestcase(yyruleno==308); + /* (309) expr ::= term (OPTIMIZED OUT) */ assert(yyruleno!=309); + /* (310) likeop ::= LIKE_KW|MATCH */ yytestcase(yyruleno==310); + /* (311) exprlist ::= nexprlist */ yytestcase(yyruleno==311); + /* (312) nmnum ::= plus_num (OPTIMIZED OUT) */ assert(yyruleno!=312); + /* (313) nmnum ::= nm (OPTIMIZED OUT) */ assert(yyruleno!=313); + /* (314) nmnum ::= ON */ yytestcase(yyruleno==314); + /* (315) nmnum ::= DELETE */ yytestcase(yyruleno==315); + /* (316) nmnum ::= DEFAULT */ yytestcase(yyruleno==316); + /* (317) plus_num ::= INTEGER|FLOAT */ yytestcase(yyruleno==317); + /* (318) foreach_clause ::= */ yytestcase(yyruleno==318); + /* (319) foreach_clause ::= FOR EACH ROW */ yytestcase(yyruleno==319); + /* (320) trnm ::= nm */ yytestcase(yyruleno==320); + /* (321) tridxby ::= */ yytestcase(yyruleno==321); + /* (322) database_kw_opt ::= DATABASE */ yytestcase(yyruleno==322); + /* (323) database_kw_opt ::= */ yytestcase(yyruleno==323); + /* (324) kwcolumn_opt ::= */ yytestcase(yyruleno==324); + /* (325) kwcolumn_opt ::= COLUMNKW */ yytestcase(yyruleno==325); + /* (326) vtabarglist ::= vtabarg */ yytestcase(yyruleno==326); + /* (327) vtabarglist ::= vtabarglist COMMA vtabarg */ yytestcase(yyruleno==327); + /* (328) vtabarg ::= vtabarg vtabargtoken */ yytestcase(yyruleno==328); + /* (329) anylist ::= */ yytestcase(yyruleno==329); + /* (330) anylist ::= anylist LP anylist RP */ yytestcase(yyruleno==330); + /* (331) anylist ::= anylist ANY */ yytestcase(yyruleno==331); + /* (332) with ::= */ yytestcase(yyruleno==332); break; /********** End reduce actions ************************************************/ }; @@ -140419,16 +143494,11 @@ static void yy_reduce( /* It is not possible for a REDUCE to be followed by an error */ assert( yyact!=YY_ERROR_ACTION ); - if( yyact==YY_ACCEPT_ACTION ){ - yypParser->yytos += yysize; - yy_accept(yypParser); - }else{ - yymsp += yysize+1; - yypParser->yytos = yymsp; - yymsp->stateno = (YYACTIONTYPE)yyact; - yymsp->major = (YYCODETYPE)yygoto; - yyTraceShift(yypParser, yyact); - } + yymsp += yysize+1; + yypParser->yytos = yymsp; + yymsp->stateno = (YYACTIONTYPE)yyact; + yymsp->major = (YYCODETYPE)yygoto; + yyTraceShift(yypParser, yyact, "... then shift"); } /* @@ -140466,8 +143536,11 @@ static void yy_syntax_error( /************ Begin %syntax_error code ****************************************/ UNUSED_PARAMETER(yymajor); /* Silence some compiler warnings */ - assert( TOKEN.z[0] ); /* The tokenizer always gives us a token */ - sqlite3ErrorMsg(pParse, "near \"%T\": syntax error", &TOKEN); + if( TOKEN.z[0] ){ + sqlite3ErrorMsg(pParse, "near \"%T\": syntax error", &TOKEN); + }else{ + sqlite3ErrorMsg(pParse, "incomplete input"); + } /************ End %syntax_error code ******************************************/ sqlite3ParserARG_STORE; /* Suppress warning about unused %extra_argument variable */ } @@ -140539,20 +143612,31 @@ SQLITE_PRIVATE void sqlite3Parser( #ifndef NDEBUG if( yyTraceFILE ){ - fprintf(yyTraceFILE,"%sInput '%s'\n",yyTracePrompt,yyTokenName[yymajor]); + int stateno = yypParser->yytos->stateno; + if( stateno < YY_MIN_REDUCE ){ + fprintf(yyTraceFILE,"%sInput '%s' in state %d\n", + yyTracePrompt,yyTokenName[yymajor],stateno); + }else{ + fprintf(yyTraceFILE,"%sInput '%s' with pending reduce %d\n", + yyTracePrompt,yyTokenName[yymajor],stateno-YY_MIN_REDUCE); + } } #endif do{ yyact = yy_find_shift_action(yypParser,(YYCODETYPE)yymajor); - if( yyact <= YY_MAX_SHIFTREDUCE ){ + if( yyact >= YY_MIN_REDUCE ){ + yy_reduce(yypParser,yyact-YY_MIN_REDUCE,yymajor,yyminor); + }else if( yyact <= YY_MAX_SHIFTREDUCE ){ yy_shift(yypParser,yyact,yymajor,yyminor); #ifndef YYNOERRORRECOVERY yypParser->yyerrcnt--; #endif yymajor = YYNOCODE; - }else if( yyact <= YY_MAX_REDUCE ){ - yy_reduce(yypParser,yyact-YY_MIN_REDUCE); + }else if( yyact==YY_ACCEPT_ACTION ){ + yypParser->yytos--; + yy_accept(yypParser); + return; }else{ assert( yyact == YY_ERROR_ACTION ); yyminorunion.yy0 = yyminor; @@ -141501,7 +144585,7 @@ SQLITE_PRIVATE int sqlite3RunParser(Parse *pParse, const char *zSql, char **pzEr }else{ tokenType = TK_SEMI; } - zSql -= n; + n = 0; } if( tokenType>=TK_SPACE ){ assert( tokenType==TK_SPACE || tokenType==TK_ILLEGAL ); @@ -141956,6 +145040,10 @@ SQLITE_PRIVATE int sqlite3Fts3Init(sqlite3 *db); */ /* #include "sqlite3.h" */ +#ifdef SQLITE_OMIT_VIRTUALTABLE +# undef SQLITE_ENABLE_RTREE +#endif + #if 0 extern "C" { #endif /* __cplusplus */ @@ -141969,7 +145057,7 @@ SQLITE_PRIVATE int sqlite3RtreeInit(sqlite3 *db); /************** End of rtree.h ***********************************************/ /************** Continuing where we left off in main.c ***********************/ #endif -#ifdef SQLITE_ENABLE_ICU +#if defined(SQLITE_ENABLE_ICU) || defined(SQLITE_ENABLE_ICU_COLLATIONS) /************** Include sqliteicu.h in the middle of main.c ******************/ /************** Begin file sqliteicu.h ***************************************/ /* @@ -142217,6 +145305,11 @@ SQLITE_API int sqlite3_initialize(void){ sqlite3GlobalConfig.isPCacheInit = 1; rc = sqlite3OsInit(); } +#ifdef SQLITE_ENABLE_DESERIALIZE + if( rc==SQLITE_OK ){ + rc = sqlite3MemdbInit(); + } +#endif if( rc==SQLITE_OK ){ sqlite3PCacheBufferSetup( sqlite3GlobalConfig.pPage, sqlite3GlobalConfig.szPage, sqlite3GlobalConfig.nPage); @@ -142249,7 +145342,7 @@ SQLITE_API int sqlite3_initialize(void){ #ifndef NDEBUG #ifndef SQLITE_OMIT_FLOATING_POINT /* This section of code's only "output" is via assert() statements. */ - if ( rc==SQLITE_OK ){ + if( rc==SQLITE_OK ){ u64 x = (((u64)1)<<63)-1; double y; assert(sizeof(x)==8); @@ -142795,6 +145888,7 @@ SQLITE_API int sqlite3_db_config(sqlite3 *db, int op, ...){ { SQLITE_DBCONFIG_ENABLE_LOAD_EXTENSION, SQLITE_LoadExtension }, { SQLITE_DBCONFIG_NO_CKPT_ON_CLOSE, SQLITE_NoCkptOnClose }, { SQLITE_DBCONFIG_ENABLE_QPSG, SQLITE_EnableQPSG }, + { SQLITE_DBCONFIG_TRIGGER_EQP, SQLITE_TriggerEQP }, }; unsigned int i; rc = SQLITE_ERROR; /* IMP: R-42790-23372 */ @@ -143292,9 +146386,10 @@ SQLITE_PRIVATE const char *sqlite3ErrName(int rc){ case SQLITE_NOMEM: zName = "SQLITE_NOMEM"; break; case SQLITE_READONLY: zName = "SQLITE_READONLY"; break; case SQLITE_READONLY_RECOVERY: zName = "SQLITE_READONLY_RECOVERY"; break; - case SQLITE_READONLY_CANTLOCK: zName = "SQLITE_READONLY_CANTLOCK"; break; + case SQLITE_READONLY_CANTINIT: zName = "SQLITE_READONLY_CANTINIT"; break; case SQLITE_READONLY_ROLLBACK: zName = "SQLITE_READONLY_ROLLBACK"; break; case SQLITE_READONLY_DBMOVED: zName = "SQLITE_READONLY_DBMOVED"; break; + case SQLITE_READONLY_DIRECTORY: zName = "SQLITE_READONLY_DIRECTORY";break; case SQLITE_INTERRUPT: zName = "SQLITE_INTERRUPT"; break; case SQLITE_IOERR: zName = "SQLITE_IOERR"; break; case SQLITE_IOERR_READ: zName = "SQLITE_IOERR_READ"; break; @@ -143414,6 +146509,8 @@ SQLITE_PRIVATE const char *sqlite3ErrStr(int rc){ /* SQLITE_FORMAT */ 0, /* SQLITE_RANGE */ "column index out of range", /* SQLITE_NOTADB */ "file is not a database", + /* SQLITE_NOTICE */ "notification message", + /* SQLITE_WARNING */ "warning message", }; const char *zErr = "unknown error"; switch( rc ){ @@ -143421,6 +146518,14 @@ SQLITE_PRIVATE const char *sqlite3ErrStr(int rc){ zErr = "abort due to ROLLBACK"; break; } + case SQLITE_ROW: { + zErr = "another row available"; + break; + } + case SQLITE_DONE: { + zErr = "no more rows available"; + break; + } default: { rc &= 0xff; if( ALWAYS(rc>=0) && rcbusyTimeout; + int tmout = db->busyTimeout; int delay, prior; +#ifdef SQLITE_ENABLE_SETLK_TIMEOUT + if( sqlite3OsFileControl(pFile,SQLITE_FCNTL_LOCK_TIMEOUT,&tmout)==SQLITE_OK ){ + if( count ){ + tmout = 0; + sqlite3OsFileControl(pFile, SQLITE_FCNTL_LOCK_TIMEOUT, &tmout); + return 0; + }else{ + return 1; + } + } +#else + UNUSED_PARAMETER(pFile); +#endif assert( count>=0 ); if( count < NDELAY ){ delay = delays[count]; @@ -143460,16 +146584,19 @@ static int sqliteDefaultBusyCallback( delay = delays[NDELAY-1]; prior = totals[NDELAY-1] + delay*(count-(NDELAY-1)); } - if( prior + delay > timeout ){ - delay = timeout - prior; + if( prior + delay > tmout ){ + delay = tmout - prior; if( delay<=0 ) return 0; } sqlite3OsSleep(db->pVfs, delay*1000); return 1; #else + /* This case for unix systems that lack usleep() support. Sleeping + ** must be done in increments of whole seconds */ sqlite3 *db = (sqlite3 *)ptr; - int timeout = ((sqlite3 *)ptr)->busyTimeout; - if( (count+1)*1000 > timeout ){ + int tmout = ((sqlite3 *)ptr)->busyTimeout; + UNUSED_PARAMETER(pFile); + if( (count+1)*1000 > tmout ){ return 0; } sqlite3OsSleep(db->pVfs, 1000000); @@ -143480,14 +146607,25 @@ static int sqliteDefaultBusyCallback( /* ** Invoke the given busy handler. ** -** This routine is called when an operation failed with a lock. +** This routine is called when an operation failed to acquire a +** lock on VFS file pFile. +** ** If this routine returns non-zero, the lock is retried. If it ** returns 0, the operation aborts with an SQLITE_BUSY error. */ -SQLITE_PRIVATE int sqlite3InvokeBusyHandler(BusyHandler *p){ +SQLITE_PRIVATE int sqlite3InvokeBusyHandler(BusyHandler *p, sqlite3_file *pFile){ int rc; - if( NEVER(p==0) || p->xFunc==0 || p->nBusy<0 ) return 0; - rc = p->xFunc(p->pArg, p->nBusy); + if( p->xBusyHandler==0 || p->nBusy<0 ) return 0; + if( p->bExtraFileArg ){ + /* Add an extra parameter with the pFile pointer to the end of the + ** callback argument list */ + int (*xTra)(void*,int,sqlite3_file*); + xTra = (int(*)(void*,int,sqlite3_file*))p->xBusyHandler; + rc = xTra(p->pBusyArg, p->nBusy, pFile); + }else{ + /* Legacy style busy handler callback */ + rc = p->xBusyHandler(p->pBusyArg, p->nBusy); + } if( rc==0 ){ p->nBusy = -1; }else{ @@ -143509,9 +146647,10 @@ SQLITE_API int sqlite3_busy_handler( if( !sqlite3SafetyCheckOk(db) ) return SQLITE_MISUSE_BKPT; #endif sqlite3_mutex_enter(db->mutex); - db->busyHandler.xFunc = xBusy; - db->busyHandler.pArg = pArg; + db->busyHandler.xBusyHandler = xBusy; + db->busyHandler.pBusyArg = pArg; db->busyHandler.nBusy = 0; + db->busyHandler.bExtraFileArg = 0; db->busyTimeout = 0; sqlite3_mutex_leave(db->mutex); return SQLITE_OK; @@ -143559,8 +146698,10 @@ SQLITE_API int sqlite3_busy_timeout(sqlite3 *db, int ms){ if( !sqlite3SafetyCheckOk(db) ) return SQLITE_MISUSE_BKPT; #endif if( ms>0 ){ - sqlite3_busy_handler(db, sqliteDefaultBusyCallback, (void*)db); + sqlite3_busy_handler(db, (int(*)(void*,int))sqliteDefaultBusyCallback, + (void*)db); db->busyTimeout = ms; + db->busyHandler.bExtraFileArg = 1; }else{ sqlite3_busy_handler(db, 0, 0); } @@ -144800,6 +147941,7 @@ static int openDatabase( }else{ isThreadsafe = sqlite3GlobalConfig.bFullMutex; } + if( flags & SQLITE_OPEN_PRIVATECACHE ){ flags &= ~SQLITE_OPEN_SHAREDCACHE; }else if( sqlite3GlobalConfig.sharedCacheEnabled ){ @@ -144832,13 +147974,20 @@ static int openDatabase( /* Allocate the sqlite data structure */ db = sqlite3MallocZero( sizeof(sqlite3) ); if( db==0 ) goto opendb_out; - if( isThreadsafe ){ + if( isThreadsafe +#ifdef SQLITE_ENABLE_MULTITHREADED_CHECKS + || sqlite3GlobalConfig.bCoreMutex +#endif + ){ db->mutex = sqlite3MutexAlloc(SQLITE_MUTEX_RECURSIVE); if( db->mutex==0 ){ sqlite3_free(db); db = 0; goto opendb_out; } + if( isThreadsafe==0 ){ + sqlite3MutexWarnOnContention(db->mutex); + } } sqlite3_mutex_enter(db->mutex); db->errMask = 0xff; @@ -145020,7 +148169,7 @@ static int openDatabase( } #endif -#ifdef SQLITE_ENABLE_ICU +#if defined(SQLITE_ENABLE_ICU) || defined(SQLITE_ENABLE_ICU_COLLATIONS) if( !db->mallocFailed && rc==SQLITE_OK ){ rc = sqlite3IcuInit(db); } @@ -145322,37 +148471,37 @@ SQLITE_API int sqlite3_get_autocommit(sqlite3 *db){ ** 2. Invoke sqlite3_log() to provide the source code location where ** a low-level error is first detected. */ -static int reportError(int iErr, int lineno, const char *zType){ +SQLITE_PRIVATE int sqlite3ReportError(int iErr, int lineno, const char *zType){ sqlite3_log(iErr, "%s at line %d of [%.10s]", zType, lineno, 20+sqlite3_sourceid()); return iErr; } SQLITE_PRIVATE int sqlite3CorruptError(int lineno){ testcase( sqlite3GlobalConfig.xLog!=0 ); - return reportError(SQLITE_CORRUPT, lineno, "database corruption"); + return sqlite3ReportError(SQLITE_CORRUPT, lineno, "database corruption"); } SQLITE_PRIVATE int sqlite3MisuseError(int lineno){ testcase( sqlite3GlobalConfig.xLog!=0 ); - return reportError(SQLITE_MISUSE, lineno, "misuse"); + return sqlite3ReportError(SQLITE_MISUSE, lineno, "misuse"); } SQLITE_PRIVATE int sqlite3CantopenError(int lineno){ testcase( sqlite3GlobalConfig.xLog!=0 ); - return reportError(SQLITE_CANTOPEN, lineno, "cannot open file"); + return sqlite3ReportError(SQLITE_CANTOPEN, lineno, "cannot open file"); } #ifdef SQLITE_DEBUG SQLITE_PRIVATE int sqlite3CorruptPgnoError(int lineno, Pgno pgno){ char zMsg[100]; sqlite3_snprintf(sizeof(zMsg), zMsg, "database corruption page %d", pgno); testcase( sqlite3GlobalConfig.xLog!=0 ); - return reportError(SQLITE_CORRUPT, lineno, zMsg); + return sqlite3ReportError(SQLITE_CORRUPT, lineno, zMsg); } SQLITE_PRIVATE int sqlite3NomemError(int lineno){ testcase( sqlite3GlobalConfig.xLog!=0 ); - return reportError(SQLITE_NOMEM, lineno, "OOM"); + return sqlite3ReportError(SQLITE_NOMEM, lineno, "OOM"); } SQLITE_PRIVATE int sqlite3IoerrnomemError(int lineno){ testcase( sqlite3GlobalConfig.xLog!=0 ); - return reportError(SQLITE_IOERR_NOMEM, lineno, "I/O OOM error"); + return sqlite3ReportError(SQLITE_IOERR_NOMEM, lineno, "I/O OOM error"); } #endif @@ -145545,10 +148694,8 @@ SQLITE_API int sqlite3_file_control(sqlite3 *db, const char *zDbName, int op, vo }else if( op==SQLITE_FCNTL_JOURNAL_POINTER ){ *(sqlite3_file**)pArg = sqlite3PagerJrnlFile(pPager); rc = SQLITE_OK; - }else if( fd->pMethods ){ - rc = sqlite3OsFileControl(fd, op, pArg); }else{ - rc = SQLITE_NOTFOUND; + rc = sqlite3OsFileControl(fd, op, pArg); } sqlite3BtreeLeave(pBtree); } @@ -145880,6 +149027,22 @@ SQLITE_API int sqlite3_test_control(int op, ...){ sqlite3_mutex_leave(db->mutex); break; } + +#if defined(YYCOVERAGE) + /* sqlite3_test_control(SQLITE_TESTCTRL_PARSER_COVERAGE, FILE *out) + ** + ** This test control (only available when SQLite is compiled with + ** -DYYCOVERAGE) writes a report onto "out" that shows all + ** state/lookahead combinations in the parser state machine + ** which are never exercised. If any state is missed, make the + ** return code SQLITE_ERROR. + */ + case SQLITE_TESTCTRL_PARSER_COVERAGE: { + FILE *out = va_arg(ap, FILE*); + if( sqlite3ParserCoverage(out) ) rc = SQLITE_ERROR; + break; + } +#endif /* defined(YYCOVERAGE) */ } va_end(ap); #endif /* SQLITE_UNTESTABLE */ @@ -159383,6 +162546,7 @@ static int fts3WriteSegment( sqlite3_bind_blob(pStmt, 2, z, n, SQLITE_STATIC); sqlite3_step(pStmt); rc = sqlite3_reset(pStmt); + sqlite3_bind_null(pStmt, 2); } return rc; } @@ -159439,6 +162603,7 @@ static int fts3WriteSegdir( sqlite3_bind_blob(pStmt, 6, zRoot, nRoot, SQLITE_STATIC); sqlite3_step(pStmt); rc = sqlite3_reset(pStmt); + sqlite3_bind_null(pStmt, 6); } return rc; } @@ -160918,6 +164083,7 @@ static void fts3UpdateDocTotals( sqlite3_bind_blob(pStmt, 2, pBlob, nBlob, SQLITE_STATIC); sqlite3_step(pStmt); *pRC = sqlite3_reset(pStmt); + sqlite3_bind_null(pStmt, 2); sqlite3_free(a); } @@ -162106,6 +165272,7 @@ static int fts3TruncateSegment( sqlite3_bind_int(pChomp, 4, iIdx); sqlite3_step(pChomp); rc = sqlite3_reset(pChomp); + sqlite3_bind_null(pChomp, 2); } } @@ -162185,6 +165352,7 @@ static int fts3IncrmergeHintStore(Fts3Table *p, Blob *pHint){ sqlite3_bind_blob(pReplace, 2, pHint->a, pHint->n, SQLITE_STATIC); sqlite3_step(pReplace); rc = sqlite3_reset(pReplace); + sqlite3_bind_null(pReplace, 2); } return rc; @@ -162999,7 +166167,6 @@ SQLITE_PRIVATE int sqlite3Fts3UpdateMethod( ){ Fts3Table *p = (Fts3Table *)pVtab; int rc = SQLITE_OK; /* Return Code */ - int isRemove = 0; /* True for an UPDATE or DELETE */ u32 *aSzIns = 0; /* Sizes of inserted documents */ u32 *aSzDel = 0; /* Sizes of deleted documents */ int nChng = 0; /* Net change in number of documents */ @@ -163097,7 +166264,6 @@ SQLITE_PRIVATE int sqlite3Fts3UpdateMethod( if( sqlite3_value_type(apVal[0])!=SQLITE_NULL ){ assert( sqlite3_value_type(apVal[0])==SQLITE_INTEGER ); rc = fts3DeleteByRowid(p, apVal[0], &nChng, aSzDel); - isRemove = 1; } /* If this is an INSERT or UPDATE operation, insert the new record. */ @@ -163109,7 +166275,7 @@ SQLITE_PRIVATE int sqlite3Fts3UpdateMethod( rc = FTS_CORRUPT_VTAB; } } - if( rc==SQLITE_OK && (!isRemove || *pRowid!=p->iPrevDocid ) ){ + if( rc==SQLITE_OK ){ rc = fts3PendingTermsDocid(p, 0, iLangid, *pRowid); } if( rc==SQLITE_OK ){ @@ -165684,7 +168850,8 @@ SQLITE_PRIVATE int sqlite3FtsUnicodeFold(int c, int bRemoveDiacritic){ ** child page. */ -#if !defined(SQLITE_CORE) || defined(SQLITE_ENABLE_RTREE) +#if !defined(SQLITE_CORE) \ + || (defined(SQLITE_ENABLE_RTREE) && !defined(SQLITE_OMIT_VIRTUALTABLE)) #ifndef SQLITE_CORE /* #include "sqlite3ext.h" */ @@ -165841,7 +169008,7 @@ struct RtreeSearchPoint { ** The smallest possible node-size is (512-64)==448 bytes. And the largest ** supported cell size is 48 bytes (8 byte rowid + ten 4 byte coordinates). ** Therefore all non-root nodes must contain at least 3 entries. Since -** 2^40 is greater than 2^64, an r-tree structure always has a depth of +** 3^40 is greater than 2^64, an r-tree structure always has a depth of ** 40 or less. */ #define RTREE_MAX_DEPTH 40 @@ -166416,6 +169583,7 @@ static int nodeWrite(Rtree *pRtree, RtreeNode *pNode){ sqlite3_step(p); pNode->isDirty = 0; rc = sqlite3_reset(p); + sqlite3_bind_null(p, 2); if( pNode->iNode==0 && rc==SQLITE_OK ){ pNode->iNode = sqlite3_last_insert_rowid(pRtree->db); nodeHashInsert(pRtree, pNode); @@ -167653,7 +170821,7 @@ static int ChooseLeaf( ){ int rc; int ii; - RtreeNode *pNode; + RtreeNode *pNode = 0; rc = nodeAcquire(pRtree, 1, 0, &pNode); for(ii=0; rc==SQLITE_OK && ii<(pRtree->iDepth-iHeight); ii++){ @@ -168528,7 +171696,7 @@ static int rtreeDeleteRowid(Rtree *pRtree, sqlite3_int64 iDelete){ */ if( rc==SQLITE_OK && pRtree->iDepth>0 && NCELL(pRoot)==1 ){ int rc2; - RtreeNode *pChild; + RtreeNode *pChild = 0; i64 iChild = nodeGetRowid(pRtree, pRoot, 0); rc = nodeAcquire(pRtree, iChild, pRoot, &pChild); if( rc==SQLITE_OK ){ @@ -169240,6 +172408,463 @@ static void rtreedepth(sqlite3_context *ctx, int nArg, sqlite3_value **apArg){ } } +/* +** Context object passed between the various routines that make up the +** implementation of integrity-check function rtreecheck(). +*/ +typedef struct RtreeCheck RtreeCheck; +struct RtreeCheck { + sqlite3 *db; /* Database handle */ + const char *zDb; /* Database containing rtree table */ + const char *zTab; /* Name of rtree table */ + int bInt; /* True for rtree_i32 table */ + int nDim; /* Number of dimensions for this rtree tbl */ + sqlite3_stmt *pGetNode; /* Statement used to retrieve nodes */ + sqlite3_stmt *aCheckMapping[2]; /* Statements to query %_parent/%_rowid */ + int nLeaf; /* Number of leaf cells in table */ + int nNonLeaf; /* Number of non-leaf cells in table */ + int rc; /* Return code */ + char *zReport; /* Message to report */ + int nErr; /* Number of lines in zReport */ +}; + +#define RTREE_CHECK_MAX_ERROR 100 + +/* +** Reset SQL statement pStmt. If the sqlite3_reset() call returns an error, +** and RtreeCheck.rc==SQLITE_OK, set RtreeCheck.rc to the error code. +*/ +static void rtreeCheckReset(RtreeCheck *pCheck, sqlite3_stmt *pStmt){ + int rc = sqlite3_reset(pStmt); + if( pCheck->rc==SQLITE_OK ) pCheck->rc = rc; +} + +/* +** The second and subsequent arguments to this function are a format string +** and printf style arguments. This function formats the string and attempts +** to compile it as an SQL statement. +** +** If successful, a pointer to the new SQL statement is returned. Otherwise, +** NULL is returned and an error code left in RtreeCheck.rc. +*/ +static sqlite3_stmt *rtreeCheckPrepare( + RtreeCheck *pCheck, /* RtreeCheck object */ + const char *zFmt, ... /* Format string and trailing args */ +){ + va_list ap; + char *z; + sqlite3_stmt *pRet = 0; + + va_start(ap, zFmt); + z = sqlite3_vmprintf(zFmt, ap); + + if( pCheck->rc==SQLITE_OK ){ + if( z==0 ){ + pCheck->rc = SQLITE_NOMEM; + }else{ + pCheck->rc = sqlite3_prepare_v2(pCheck->db, z, -1, &pRet, 0); + } + } + + sqlite3_free(z); + va_end(ap); + return pRet; +} + +/* +** The second and subsequent arguments to this function are a printf() +** style format string and arguments. This function formats the string and +** appends it to the report being accumuated in pCheck. +*/ +static void rtreeCheckAppendMsg(RtreeCheck *pCheck, const char *zFmt, ...){ + va_list ap; + va_start(ap, zFmt); + if( pCheck->rc==SQLITE_OK && pCheck->nErrrc = SQLITE_NOMEM; + }else{ + pCheck->zReport = sqlite3_mprintf("%z%s%z", + pCheck->zReport, (pCheck->zReport ? "\n" : ""), z + ); + if( pCheck->zReport==0 ){ + pCheck->rc = SQLITE_NOMEM; + } + } + pCheck->nErr++; + } + va_end(ap); +} + +/* +** This function is a no-op if there is already an error code stored +** in the RtreeCheck object indicated by the first argument. NULL is +** returned in this case. +** +** Otherwise, the contents of rtree table node iNode are loaded from +** the database and copied into a buffer obtained from sqlite3_malloc(). +** If no error occurs, a pointer to the buffer is returned and (*pnNode) +** is set to the size of the buffer in bytes. +** +** Or, if an error does occur, NULL is returned and an error code left +** in the RtreeCheck object. The final value of *pnNode is undefined in +** this case. +*/ +static u8 *rtreeCheckGetNode(RtreeCheck *pCheck, i64 iNode, int *pnNode){ + u8 *pRet = 0; /* Return value */ + + assert( pCheck->rc==SQLITE_OK ); + if( pCheck->pGetNode==0 ){ + pCheck->pGetNode = rtreeCheckPrepare(pCheck, + "SELECT data FROM %Q.'%q_node' WHERE nodeno=?", + pCheck->zDb, pCheck->zTab + ); + } + + if( pCheck->rc==SQLITE_OK ){ + sqlite3_bind_int64(pCheck->pGetNode, 1, iNode); + if( sqlite3_step(pCheck->pGetNode)==SQLITE_ROW ){ + int nNode = sqlite3_column_bytes(pCheck->pGetNode, 0); + const u8 *pNode = (const u8*)sqlite3_column_blob(pCheck->pGetNode, 0); + pRet = sqlite3_malloc(nNode); + if( pRet==0 ){ + pCheck->rc = SQLITE_NOMEM; + }else{ + memcpy(pRet, pNode, nNode); + *pnNode = nNode; + } + } + rtreeCheckReset(pCheck, pCheck->pGetNode); + if( pCheck->rc==SQLITE_OK && pRet==0 ){ + rtreeCheckAppendMsg(pCheck, "Node %lld missing from database", iNode); + } + } + + return pRet; +} + +/* +** This function is used to check that the %_parent (if bLeaf==0) or %_rowid +** (if bLeaf==1) table contains a specified entry. The schemas of the +** two tables are: +** +** CREATE TABLE %_parent(nodeno INTEGER PRIMARY KEY, parentnode INTEGER) +** CREATE TABLE %_rowid(rowid INTEGER PRIMARY KEY, nodeno INTEGER) +** +** In both cases, this function checks that there exists an entry with +** IPK value iKey and the second column set to iVal. +** +*/ +static void rtreeCheckMapping( + RtreeCheck *pCheck, /* RtreeCheck object */ + int bLeaf, /* True for a leaf cell, false for interior */ + i64 iKey, /* Key for mapping */ + i64 iVal /* Expected value for mapping */ +){ + int rc; + sqlite3_stmt *pStmt; + const char *azSql[2] = { + "SELECT parentnode FROM %Q.'%q_parent' WHERE nodeno=?", + "SELECT nodeno FROM %Q.'%q_rowid' WHERE rowid=?" + }; + + assert( bLeaf==0 || bLeaf==1 ); + if( pCheck->aCheckMapping[bLeaf]==0 ){ + pCheck->aCheckMapping[bLeaf] = rtreeCheckPrepare(pCheck, + azSql[bLeaf], pCheck->zDb, pCheck->zTab + ); + } + if( pCheck->rc!=SQLITE_OK ) return; + + pStmt = pCheck->aCheckMapping[bLeaf]; + sqlite3_bind_int64(pStmt, 1, iKey); + rc = sqlite3_step(pStmt); + if( rc==SQLITE_DONE ){ + rtreeCheckAppendMsg(pCheck, "Mapping (%lld -> %lld) missing from %s table", + iKey, iVal, (bLeaf ? "%_rowid" : "%_parent") + ); + }else if( rc==SQLITE_ROW ){ + i64 ii = sqlite3_column_int64(pStmt, 0); + if( ii!=iVal ){ + rtreeCheckAppendMsg(pCheck, + "Found (%lld -> %lld) in %s table, expected (%lld -> %lld)", + iKey, ii, (bLeaf ? "%_rowid" : "%_parent"), iKey, iVal + ); + } + } + rtreeCheckReset(pCheck, pStmt); +} + +/* +** Argument pCell points to an array of coordinates stored on an rtree page. +** This function checks that the coordinates are internally consistent (no +** x1>x2 conditions) and adds an error message to the RtreeCheck object +** if they are not. +** +** Additionally, if pParent is not NULL, then it is assumed to point to +** the array of coordinates on the parent page that bound the page +** containing pCell. In this case it is also verified that the two +** sets of coordinates are mutually consistent and an error message added +** to the RtreeCheck object if they are not. +*/ +static void rtreeCheckCellCoord( + RtreeCheck *pCheck, + i64 iNode, /* Node id to use in error messages */ + int iCell, /* Cell number to use in error messages */ + u8 *pCell, /* Pointer to cell coordinates */ + u8 *pParent /* Pointer to parent coordinates */ +){ + RtreeCoord c1, c2; + RtreeCoord p1, p2; + int i; + + for(i=0; inDim; i++){ + readCoord(&pCell[4*2*i], &c1); + readCoord(&pCell[4*(2*i + 1)], &c2); + + /* printf("%e, %e\n", c1.u.f, c2.u.f); */ + if( pCheck->bInt ? c1.i>c2.i : c1.f>c2.f ){ + rtreeCheckAppendMsg(pCheck, + "Dimension %d of cell %d on node %lld is corrupt", i, iCell, iNode + ); + } + + if( pParent ){ + readCoord(&pParent[4*2*i], &p1); + readCoord(&pParent[4*(2*i + 1)], &p2); + + if( (pCheck->bInt ? c1.ibInt ? c2.i>p2.i : c2.f>p2.f) + ){ + rtreeCheckAppendMsg(pCheck, + "Dimension %d of cell %d on node %lld is corrupt relative to parent" + , i, iCell, iNode + ); + } + } + } +} + +/* +** Run rtreecheck() checks on node iNode, which is at depth iDepth within +** the r-tree structure. Argument aParent points to the array of coordinates +** that bound node iNode on the parent node. +** +** If any problems are discovered, an error message is appended to the +** report accumulated in the RtreeCheck object. +*/ +static void rtreeCheckNode( + RtreeCheck *pCheck, + int iDepth, /* Depth of iNode (0==leaf) */ + u8 *aParent, /* Buffer containing parent coords */ + i64 iNode /* Node to check */ +){ + u8 *aNode = 0; + int nNode = 0; + + assert( iNode==1 || aParent!=0 ); + assert( pCheck->nDim>0 ); + + aNode = rtreeCheckGetNode(pCheck, iNode, &nNode); + if( aNode ){ + if( nNode<4 ){ + rtreeCheckAppendMsg(pCheck, + "Node %lld is too small (%d bytes)", iNode, nNode + ); + }else{ + int nCell; /* Number of cells on page */ + int i; /* Used to iterate through cells */ + if( aParent==0 ){ + iDepth = readInt16(aNode); + if( iDepth>RTREE_MAX_DEPTH ){ + rtreeCheckAppendMsg(pCheck, "Rtree depth out of range (%d)", iDepth); + sqlite3_free(aNode); + return; + } + } + nCell = readInt16(&aNode[2]); + if( (4 + nCell*(8 + pCheck->nDim*2*4))>nNode ){ + rtreeCheckAppendMsg(pCheck, + "Node %lld is too small for cell count of %d (%d bytes)", + iNode, nCell, nNode + ); + }else{ + for(i=0; inDim*2*4)]; + i64 iVal = readInt64(pCell); + rtreeCheckCellCoord(pCheck, iNode, i, &pCell[8], aParent); + + if( iDepth>0 ){ + rtreeCheckMapping(pCheck, 0, iVal, iNode); + rtreeCheckNode(pCheck, iDepth-1, &pCell[8], iVal); + pCheck->nNonLeaf++; + }else{ + rtreeCheckMapping(pCheck, 1, iVal, iNode); + pCheck->nLeaf++; + } + } + } + } + sqlite3_free(aNode); + } +} + +/* +** The second argument to this function must be either "_rowid" or +** "_parent". This function checks that the number of entries in the +** %_rowid or %_parent table is exactly nExpect. If not, it adds +** an error message to the report in the RtreeCheck object indicated +** by the first argument. +*/ +static void rtreeCheckCount(RtreeCheck *pCheck, const char *zTbl, i64 nExpect){ + if( pCheck->rc==SQLITE_OK ){ + sqlite3_stmt *pCount; + pCount = rtreeCheckPrepare(pCheck, "SELECT count(*) FROM %Q.'%q%s'", + pCheck->zDb, pCheck->zTab, zTbl + ); + if( pCount ){ + if( sqlite3_step(pCount)==SQLITE_ROW ){ + i64 nActual = sqlite3_column_int64(pCount, 0); + if( nActual!=nExpect ){ + rtreeCheckAppendMsg(pCheck, "Wrong number of entries in %%%s table" + " - expected %lld, actual %lld" , zTbl, nExpect, nActual + ); + } + } + pCheck->rc = sqlite3_finalize(pCount); + } + } +} + +/* +** This function does the bulk of the work for the rtree integrity-check. +** It is called by rtreecheck(), which is the SQL function implementation. +*/ +static int rtreeCheckTable( + sqlite3 *db, /* Database handle to access db through */ + const char *zDb, /* Name of db ("main", "temp" etc.) */ + const char *zTab, /* Name of rtree table to check */ + char **pzReport /* OUT: sqlite3_malloc'd report text */ +){ + RtreeCheck check; /* Common context for various routines */ + sqlite3_stmt *pStmt = 0; /* Used to find column count of rtree table */ + int bEnd = 0; /* True if transaction should be closed */ + + /* Initialize the context object */ + memset(&check, 0, sizeof(check)); + check.db = db; + check.zDb = zDb; + check.zTab = zTab; + + /* If there is not already an open transaction, open one now. This is + ** to ensure that the queries run as part of this integrity-check operate + ** on a consistent snapshot. */ + if( sqlite3_get_autocommit(db) ){ + check.rc = sqlite3_exec(db, "BEGIN", 0, 0, 0); + bEnd = 1; + } + + /* Find number of dimensions in the rtree table. */ + pStmt = rtreeCheckPrepare(&check, "SELECT * FROM %Q.%Q", zDb, zTab); + if( pStmt ){ + int rc; + check.nDim = (sqlite3_column_count(pStmt) - 1) / 2; + if( check.nDim<1 ){ + rtreeCheckAppendMsg(&check, "Schema corrupt or not an rtree"); + }else if( SQLITE_ROW==sqlite3_step(pStmt) ){ + check.bInt = (sqlite3_column_type(pStmt, 1)==SQLITE_INTEGER); + } + rc = sqlite3_finalize(pStmt); + if( rc!=SQLITE_CORRUPT ) check.rc = rc; + } + + /* Do the actual integrity-check */ + if( check.nDim>=1 ){ + if( check.rc==SQLITE_OK ){ + rtreeCheckNode(&check, 0, 0, 1); + } + rtreeCheckCount(&check, "_rowid", check.nLeaf); + rtreeCheckCount(&check, "_parent", check.nNonLeaf); + } + + /* Finalize SQL statements used by the integrity-check */ + sqlite3_finalize(check.pGetNode); + sqlite3_finalize(check.aCheckMapping[0]); + sqlite3_finalize(check.aCheckMapping[1]); + + /* If one was opened, close the transaction */ + if( bEnd ){ + int rc = sqlite3_exec(db, "END", 0, 0, 0); + if( check.rc==SQLITE_OK ) check.rc = rc; + } + *pzReport = check.zReport; + return check.rc; +} + +/* +** Usage: +** +** rtreecheck(); +** rtreecheck(, ); +** +** Invoking this SQL function runs an integrity-check on the named rtree +** table. The integrity-check verifies the following: +** +** 1. For each cell in the r-tree structure (%_node table), that: +** +** a) for each dimension, (coord1 <= coord2). +** +** b) unless the cell is on the root node, that the cell is bounded +** by the parent cell on the parent node. +** +** c) for leaf nodes, that there is an entry in the %_rowid +** table corresponding to the cell's rowid value that +** points to the correct node. +** +** d) for cells on non-leaf nodes, that there is an entry in the +** %_parent table mapping from the cell's child node to the +** node that it resides on. +** +** 2. That there are the same number of entries in the %_rowid table +** as there are leaf cells in the r-tree structure, and that there +** is a leaf cell that corresponds to each entry in the %_rowid table. +** +** 3. That there are the same number of entries in the %_parent table +** as there are non-leaf cells in the r-tree structure, and that +** there is a non-leaf cell that corresponds to each entry in the +** %_parent table. +*/ +static void rtreecheck( + sqlite3_context *ctx, + int nArg, + sqlite3_value **apArg +){ + if( nArg!=1 && nArg!=2 ){ + sqlite3_result_error(ctx, + "wrong number of arguments to function rtreecheck()", -1 + ); + }else{ + int rc; + char *zReport = 0; + const char *zDb = (const char*)sqlite3_value_text(apArg[0]); + const char *zTab; + if( nArg==1 ){ + zTab = zDb; + zDb = "main"; + }else{ + zTab = (const char*)sqlite3_value_text(apArg[1]); + } + rc = rtreeCheckTable(sqlite3_context_db_handle(ctx), zDb, zTab, &zReport); + if( rc==SQLITE_OK ){ + sqlite3_result_text(ctx, zReport ? zReport : "ok", -1, SQLITE_TRANSIENT); + }else{ + sqlite3_result_error_code(ctx, rc); + } + sqlite3_free(zReport); + } +} + + /* ** Register the r-tree module with database handle db. This creates the ** virtual table module "rtree" and the debugging/analysis scalar @@ -169253,6 +172878,9 @@ SQLITE_PRIVATE int sqlite3RtreeInit(sqlite3 *db){ if( rc==SQLITE_OK ){ rc = sqlite3_create_function(db, "rtreedepth", 1, utf8, 0,rtreedepth, 0, 0); } + if( rc==SQLITE_OK ){ + rc = sqlite3_create_function(db, "rtreecheck", -1, utf8, 0,rtreecheck, 0,0); + } if( rc==SQLITE_OK ){ #ifdef SQLITE_RTREE_INT_ONLY void *c = (void *)RTREE_COORD_INT32; @@ -169439,7 +173067,9 @@ SQLITE_API int sqlite3_rtree_init( ** provide case-independent matching. */ -#if !defined(SQLITE_CORE) || defined(SQLITE_ENABLE_ICU) +#if !defined(SQLITE_CORE) \ + || defined(SQLITE_ENABLE_ICU) \ + || defined(SQLITE_ENABLE_ICU_COLLATIONS) /* Include ICU headers */ #include @@ -169456,6 +173086,26 @@ SQLITE_API int sqlite3_rtree_init( /* #include "sqlite3.h" */ #endif +/* +** This function is called when an ICU function called from within +** the implementation of an SQL scalar function returns an error. +** +** The scalar function context passed as the first argument is +** loaded with an error message based on the following two args. +*/ +static void icuFunctionError( + sqlite3_context *pCtx, /* SQLite scalar function context */ + const char *zName, /* Name of ICU function that failed */ + UErrorCode e /* Error code returned by ICU function */ +){ + char zBuf[128]; + sqlite3_snprintf(128, zBuf, "ICU error: %s(): %s", zName, u_errorName(e)); + zBuf[127] = '\0'; + sqlite3_result_error(pCtx, zBuf, -1); +} + +#if !defined(SQLITE_CORE) || defined(SQLITE_ENABLE_ICU) + /* ** Maximum length (in bytes) of the pattern in a LIKE or GLOB ** operator. @@ -169635,24 +173285,6 @@ static void icuLikeFunc( } } -/* -** This function is called when an ICU function called from within -** the implementation of an SQL scalar function returns an error. -** -** The scalar function context passed as the first argument is -** loaded with an error message based on the following two args. -*/ -static void icuFunctionError( - sqlite3_context *pCtx, /* SQLite scalar function context */ - const char *zName, /* Name of ICU function that failed */ - UErrorCode e /* Error code returned by ICU function */ -){ - char zBuf[128]; - sqlite3_snprintf(128, zBuf, "ICU error: %s(): %s", zName, u_errorName(e)); - zBuf[127] = '\0'; - sqlite3_result_error(pCtx, zBuf, -1); -} - /* ** Function to delete compiled regexp objects. Registered as ** a destructor function with sqlite3_set_auxdata(). @@ -169818,6 +173450,8 @@ static void icuCaseFunc16(sqlite3_context *p, int nArg, sqlite3_value **apArg){ assert( 0 ); /* Unreachable */ } +#endif /* !defined(SQLITE_CORE) || defined(SQLITE_ENABLE_ICU) */ + /* ** Collation sequence destructor function. The pCtx argument points to ** a UCollator structure previously allocated using ucol_open(). @@ -169912,6 +173546,7 @@ SQLITE_PRIVATE int sqlite3IcuInit(sqlite3 *db){ void (*xFunc)(sqlite3_context*,int,sqlite3_value**); } scalars[] = { {"icu_load_collation", 2, SQLITE_UTF8, 1, icuLoadCollation}, +#if !defined(SQLITE_CORE) || defined(SQLITE_ENABLE_ICU) {"regexp", 2, SQLITE_ANY|SQLITE_DETERMINISTIC, 0, icuRegexpFunc}, {"lower", 1, SQLITE_UTF16|SQLITE_DETERMINISTIC, 0, icuCaseFunc16}, {"lower", 2, SQLITE_UTF16|SQLITE_DETERMINISTIC, 0, icuCaseFunc16}, @@ -169923,10 +173558,10 @@ SQLITE_PRIVATE int sqlite3IcuInit(sqlite3 *db){ {"upper", 2, SQLITE_UTF8|SQLITE_DETERMINISTIC, 1, icuCaseFunc16}, {"like", 2, SQLITE_UTF8|SQLITE_DETERMINISTIC, 0, icuLikeFunc}, {"like", 3, SQLITE_UTF8|SQLITE_DETERMINISTIC, 0, icuLikeFunc}, +#endif /* !defined(SQLITE_CORE) || defined(SQLITE_ENABLE_ICU) */ }; int rc = SQLITE_OK; int i; - for(i=0; rc==SQLITE_OK && i<(int)(sizeof(scalars)/sizeof(scalars[0])); i++){ const struct IcuScalar *p = &scalars[i]; @@ -172636,7 +176271,7 @@ static void rbuCreateImposterTable2(sqlite3rbu *p, RbuObjIter *pIter){ int iCid = sqlite3_column_int(pXInfo, 1); int bDesc = sqlite3_column_int(pXInfo, 3); const char *zCollate = (const char*)sqlite3_column_text(pXInfo, 4); - zCols = rbuMPrintf(p, "%z%sc%d %s COLLATE %s", zCols, zComma, + zCols = rbuMPrintf(p, "%z%sc%d %s COLLATE %Q", zCols, zComma, iCid, pIter->azTblType[iCid], zCollate ); zPk = rbuMPrintf(p, "%z%sc%d%s", zPk, zComma, iCid, bDesc?" DESC":""); @@ -172697,7 +176332,7 @@ static void rbuCreateImposterTable(sqlite3rbu *p, RbuObjIter *pIter){ ** "PRIMARY KEY" to the imposter table column declaration. */ zPk = "PRIMARY KEY "; } - zSql = rbuMPrintf(p, "%z%s\"%w\" %s %sCOLLATE %s%s", + zSql = rbuMPrintf(p, "%z%s\"%w\" %s %sCOLLATE %Q%s", zSql, zComma, zCol, pIter->azTblType[iCol], zPk, zColl, (pIter->abNotNull[iCol] ? " NOT NULL" : "") ); @@ -176131,7 +179766,7 @@ static void statSizeAndOffset(StatCursor *pCsr){ */ fd = sqlite3PagerFile(pPager); x[0] = pCsr->iPageno; - if( fd->pMethods!=0 && sqlite3OsFileControl(fd, 230440, &x)==SQLITE_OK ){ + if( sqlite3OsFileControl(fd, 230440, &x)==SQLITE_OK ){ pCsr->iOffset = x[0]; pCsr->szPage = (int)x[1]; } @@ -176457,17 +180092,24 @@ struct DbpageCursor { sqlite3_vtab_cursor base; /* Base class. Must be first */ int pgno; /* Current page number */ int mxPgno; /* Last page to visit on this scan */ + Pager *pPager; /* Pager being read/written */ + DbPage *pPage1; /* Page 1 of the database */ + int iDb; /* Index of database to analyze */ + int szPage; /* Size of each page in bytes */ }; struct DbpageTable { sqlite3_vtab base; /* Base class. Must be first */ sqlite3 *db; /* The database */ - Pager *pPager; /* Pager being read/written */ - int iDb; /* Index of database to analyze */ - int szPage; /* Size of each page in bytes */ - int nPage; /* Number of pages in the file */ }; +/* Columns */ +#define DBPAGE_COLUMN_PGNO 0 +#define DBPAGE_COLUMN_DATA 1 +#define DBPAGE_COLUMN_SCHEMA 2 + + + /* ** Connect to or create a dbpagevfs virtual table. */ @@ -176480,19 +180122,7 @@ static int dbpageConnect( ){ DbpageTable *pTab = 0; int rc = SQLITE_OK; - int iDb; - if( argc>=4 ){ - Token nm; - sqlite3TokenInit(&nm, (char*)argv[3]); - iDb = sqlite3FindDb(db, &nm); - if( iDb<0 ){ - *pzErr = sqlite3_mprintf("no such schema: %s", argv[3]); - return SQLITE_ERROR; - } - }else{ - iDb = 0; - } rc = sqlite3_declare_vtab(db, "CREATE TABLE x(pgno INTEGER PRIMARY KEY, data BLOB, schema HIDDEN)"); if( rc==SQLITE_OK ){ @@ -176502,11 +180132,8 @@ static int dbpageConnect( assert( rc==SQLITE_OK || pTab==0 ); if( rc==SQLITE_OK ){ - Btree *pBt = db->aDb[iDb].pBt; memset(pTab, 0, sizeof(DbpageTable)); pTab->db = db; - pTab->iDb = iDb; - pTab->pPager = pBt ? sqlite3BtreePager(pBt) : 0; } *ppVtab = (sqlite3_vtab*)pTab; @@ -176524,24 +180151,55 @@ static int dbpageDisconnect(sqlite3_vtab *pVtab){ /* ** idxNum: ** -** 0 full table scan -** 1 pgno=?1 +** 0 schema=main, full table scan +** 1 schema=main, pgno=?1 +** 2 schema=?1, full table scan +** 3 schema=?1, pgno=?2 */ static int dbpageBestIndex(sqlite3_vtab *tab, sqlite3_index_info *pIdxInfo){ int i; - pIdxInfo->estimatedCost = 1.0e6; /* Initial cost estimate */ + int iPlan = 0; + + /* If there is a schema= constraint, it must be honored. Report a + ** ridiculously large estimated cost if the schema= constraint is + ** unavailable + */ + for(i=0; inConstraint; i++){ + struct sqlite3_index_constraint *p = &pIdxInfo->aConstraint[i]; + if( p->iColumn!=DBPAGE_COLUMN_SCHEMA ) continue; + if( p->op!=SQLITE_INDEX_CONSTRAINT_EQ ) continue; + if( !p->usable ){ + /* No solution. Use the default SQLITE_BIG_DBL cost */ + pIdxInfo->estimatedRows = 0x7fffffff; + return SQLITE_OK; + } + iPlan = 2; + pIdxInfo->aConstraintUsage[i].argvIndex = 1; + pIdxInfo->aConstraintUsage[i].omit = 1; + break; + } + + /* If we reach this point, it means that either there is no schema= + ** constraint (in which case we use the "main" schema) or else the + ** schema constraint was accepted. Lower the estimated cost accordingly + */ + pIdxInfo->estimatedCost = 1.0e6; + + /* Check for constraints against pgno */ for(i=0; inConstraint; i++){ struct sqlite3_index_constraint *p = &pIdxInfo->aConstraint[i]; if( p->usable && p->iColumn<=0 && p->op==SQLITE_INDEX_CONSTRAINT_EQ ){ pIdxInfo->estimatedRows = 1; pIdxInfo->idxFlags = SQLITE_INDEX_SCAN_UNIQUE; pIdxInfo->estimatedCost = 1.0; - pIdxInfo->idxNum = 1; - pIdxInfo->aConstraintUsage[i].argvIndex = 1; + pIdxInfo->aConstraintUsage[i].argvIndex = iPlan ? 2 : 1; pIdxInfo->aConstraintUsage[i].omit = 1; + iPlan |= 1; break; } } + pIdxInfo->idxNum = iPlan; + if( pIdxInfo->nOrderBy>=1 && pIdxInfo->aOrderBy[0].iColumn<=0 && pIdxInfo->aOrderBy[0].desc==0 @@ -176575,6 +180233,7 @@ static int dbpageOpen(sqlite3_vtab *pVTab, sqlite3_vtab_cursor **ppCursor){ */ static int dbpageClose(sqlite3_vtab_cursor *pCursor){ DbpageCursor *pCsr = (DbpageCursor *)pCursor; + if( pCsr->pPage1 ) sqlite3PagerUnrefPageOne(pCsr->pPage1); sqlite3_free(pCsr); return SQLITE_OK; } @@ -176594,6 +180253,16 @@ static int dbpageEof(sqlite3_vtab_cursor *pCursor){ return pCsr->pgno > pCsr->mxPgno; } +/* +** idxNum: +** +** 0 schema=main, full table scan +** 1 schema=main, pgno=?1 +** 2 schema=?1, full table scan +** 3 schema=?1, pgno=?2 +** +** idxStr is not used +*/ static int dbpageFilter( sqlite3_vtab_cursor *pCursor, int idxNum, const char *idxStr, @@ -176601,23 +180270,42 @@ static int dbpageFilter( ){ DbpageCursor *pCsr = (DbpageCursor *)pCursor; DbpageTable *pTab = (DbpageTable *)pCursor->pVtab; - int rc = SQLITE_OK; - Btree *pBt = pTab->db->aDb[pTab->iDb].pBt; + int rc; + sqlite3 *db = pTab->db; + Btree *pBt; - pTab->szPage = sqlite3BtreeGetPageSize(pBt); - pTab->nPage = sqlite3BtreeLastPage(pBt); - if( idxNum==1 ){ - pCsr->pgno = sqlite3_value_int(argv[0]); - if( pCsr->pgno<1 || pCsr->pgno>pTab->nPage ){ + /* Default setting is no rows of result */ + pCsr->pgno = 1; + pCsr->mxPgno = 0; + + if( idxNum & 2 ){ + const char *zSchema; + assert( argc>=1 ); + zSchema = (const char*)sqlite3_value_text(argv[0]); + pCsr->iDb = sqlite3FindDbName(db, zSchema); + if( pCsr->iDb<0 ) return SQLITE_OK; + }else{ + pCsr->iDb = 0; + } + pBt = db->aDb[pCsr->iDb].pBt; + if( pBt==0 ) return SQLITE_OK; + pCsr->pPager = sqlite3BtreePager(pBt); + pCsr->szPage = sqlite3BtreeGetPageSize(pBt); + pCsr->mxPgno = sqlite3BtreeLastPage(pBt); + if( idxNum & 1 ){ + assert( argc>(idxNum>>1) ); + pCsr->pgno = sqlite3_value_int(argv[idxNum>>1]); + if( pCsr->pgno<1 || pCsr->pgno>pCsr->mxPgno ){ pCsr->pgno = 1; pCsr->mxPgno = 0; }else{ pCsr->mxPgno = pCsr->pgno; } }else{ - pCsr->pgno = 1; - pCsr->mxPgno = pTab->nPage; + assert( pCsr->pgno==1 ); } + if( pCsr->pPage1 ) sqlite3PagerUnrefPageOne(pCsr->pPage1); + rc = sqlite3PagerGet(pCsr->pPager, 1, &pCsr->pPage1, 0); return rc; } @@ -176627,7 +180315,6 @@ static int dbpageColumn( int i ){ DbpageCursor *pCsr = (DbpageCursor *)pCursor; - DbpageTable *pTab = (DbpageTable *)pCursor->pVtab; int rc = SQLITE_OK; switch( i ){ case 0: { /* pgno */ @@ -176636,9 +180323,9 @@ static int dbpageColumn( } case 1: { /* data */ DbPage *pDbPage = 0; - rc = sqlite3PagerGet(pTab->pPager, pCsr->pgno, (DbPage**)&pDbPage, 0); + rc = sqlite3PagerGet(pCsr->pPager, pCsr->pgno, (DbPage**)&pDbPage, 0); if( rc==SQLITE_OK ){ - sqlite3_result_blob(ctx, sqlite3PagerGetData(pDbPage), pTab->szPage, + sqlite3_result_blob(ctx, sqlite3PagerGetData(pDbPage), pCsr->szPage, SQLITE_TRANSIENT); } sqlite3PagerUnref(pDbPage); @@ -176646,7 +180333,7 @@ static int dbpageColumn( } default: { /* schema */ sqlite3 *db = sqlite3_context_db_handle(ctx); - sqlite3_result_text(ctx, db->aDb[pTab->iDb].zDbSName, -1, SQLITE_STATIC); + sqlite3_result_text(ctx, db->aDb[pCsr->iDb].zDbSName, -1, SQLITE_STATIC); break; } } @@ -176666,37 +180353,51 @@ static int dbpageUpdate( sqlite_int64 *pRowid ){ DbpageTable *pTab = (DbpageTable *)pVtab; - int pgno; + Pgno pgno; DbPage *pDbPage = 0; int rc = SQLITE_OK; char *zErr = 0; + const char *zSchema; + int iDb; + Btree *pBt; + Pager *pPager; + int szPage; if( argc==1 ){ zErr = "cannot delete"; goto update_fail; } pgno = sqlite3_value_int(argv[0]); - if( pgno<1 || pgno>pTab->nPage ){ - zErr = "bad page number"; - goto update_fail; - } - if( sqlite3_value_int(argv[1])!=pgno ){ + if( (Pgno)sqlite3_value_int(argv[1])!=pgno ){ zErr = "cannot insert"; goto update_fail; } + zSchema = (const char*)sqlite3_value_text(argv[4]); + iDb = zSchema ? sqlite3FindDbName(pTab->db, zSchema) : -1; + if( iDb<0 ){ + zErr = "no such schema"; + goto update_fail; + } + pBt = pTab->db->aDb[iDb].pBt; + if( pgno<1 || pBt==0 || pgno>(int)sqlite3BtreeLastPage(pBt) ){ + zErr = "bad page number"; + goto update_fail; + } + szPage = sqlite3BtreeGetPageSize(pBt); if( sqlite3_value_type(argv[3])!=SQLITE_BLOB - || sqlite3_value_bytes(argv[3])!=pTab->szPage + || sqlite3_value_bytes(argv[3])!=szPage ){ zErr = "bad page value"; goto update_fail; } - rc = sqlite3PagerGet(pTab->pPager, pgno, (DbPage**)&pDbPage, 0); + pPager = sqlite3BtreePager(pBt); + rc = sqlite3PagerGet(pPager, pgno, (DbPage**)&pDbPage, 0); if( rc==SQLITE_OK ){ rc = sqlite3PagerWrite(pDbPage); if( rc==SQLITE_OK ){ memcpy(sqlite3PagerGetData(pDbPage), sqlite3_value_blob(argv[3]), - pTab->szPage); + szPage); } } sqlite3PagerUnref(pDbPage); @@ -176708,6 +180409,22 @@ update_fail: return SQLITE_ERROR; } +/* Since we do not know in advance which database files will be +** written by the sqlite_dbpage virtual table, start a write transaction +** on them all. +*/ +static int dbpageBegin(sqlite3_vtab *pVtab){ + DbpageTable *pTab = (DbpageTable *)pVtab; + sqlite3 *db = pTab->db; + int i; + for(i=0; inDb; i++){ + Btree *pBt = db->aDb[i].pBt; + if( pBt ) sqlite3BtreeBeginTrans(pBt, 1); + } + return SQLITE_OK; +} + + /* ** Invoke this routine to register the "dbpage" virtual table module */ @@ -176727,7 +180444,7 @@ SQLITE_PRIVATE int sqlite3DbpageRegister(sqlite3 *db){ dbpageColumn, /* xColumn - read data */ dbpageRowid, /* xRowid - read data */ dbpageUpdate, /* xUpdate */ - 0, /* xBegin */ + dbpageBegin, /* xBegin */ 0, /* xSync */ 0, /* xCommit */ 0, /* xRollback */ @@ -176793,6 +180510,7 @@ struct sqlite3_session { int rc; /* Non-zero if an error has occurred */ void *pFilterCtx; /* First argument to pass to xTableFilter */ int (*xTableFilter)(void *pCtx, const char *zTab); + sqlite3_value *pZeroBlob; /* Value containing X'' */ sqlite3_session *pNext; /* Next session object on same db. */ SessionTable *pTable; /* List of attached tables */ SessionHook hook; /* APIs to grab new and old data with */ @@ -176814,7 +180532,7 @@ struct SessionBuffer { ** sqlite3changeset_start_strm()). */ struct SessionInput { - int bNoDiscard; /* If true, discard no data */ + int bNoDiscard; /* If true, do not discard in InputBuffer() */ int iCurrent; /* Offset in aData[] of current change */ int iNext; /* Offset in aData[] of next change */ u8 *aData; /* Pointer to buffer containing changeset */ @@ -176860,6 +180578,7 @@ struct SessionTable { SessionTable *pNext; char *zName; /* Local name of table */ int nCol; /* Number of columns in table zName */ + int bStat1; /* True if this is sqlite_stat1 */ const char **azCol; /* Column names */ u8 *abPK; /* Array of primary key flags */ int nEntry; /* Total number of entries in hash table */ @@ -176977,8 +180696,8 @@ struct SessionTable { ** statement. ** ** For a DELETE change, all fields within the record except those associated -** with PRIMARY KEY columns are set to "undefined". The PRIMARY KEY fields -** contain the values identifying the row to delete. +** with PRIMARY KEY columns are omitted. The PRIMARY KEY fields contain the +** values identifying the row to delete. ** ** For an UPDATE change, all fields except those associated with PRIMARY KEY ** columns and columns that are modified by the UPDATE are set to "undefined". @@ -177243,6 +180962,7 @@ static int sessionPreupdateHash( h = sessionHashAppendBlob(h, n, z); }else{ assert( eType==SQLITE_NULL ); + assert( pTab->bStat1==0 || i!=1 ); *pbNullPK = 1; } } @@ -177260,7 +180980,7 @@ static int sessionPreupdateHash( static int sessionSerialLen(u8 *a){ int e = *a; int n; - if( e==0 ) return 1; + if( e==0 || e==0xFF ) return 1; if( e==SQLITE_NULL ) return 1; if( e==SQLITE_INTEGER || e==SQLITE_FLOAT ) return 9; return sessionVarintGet(&a[1], &n) + 1 + n; @@ -177340,7 +181060,7 @@ static int sessionChangeEqual( int n1 = sessionSerialLen(a1); int n2 = sessionSerialLen(a2); - if( pTab->abPK[iCol] && (n1!=n2 || memcmp(a1, a2, n1)) ){ + if( n1!=n2 || memcmp(a1, a2, n1) ){ return 0; } a1 += n1; @@ -177583,9 +181303,8 @@ static int sessionPreupdateEqual( }else{ z = sqlite3_value_blob(pVal); } - if( memcmp(a, z, n) ) return 0; + if( n>0 && memcmp(a, z, n) ) return 0; a += n; - break; } } } @@ -177641,9 +181360,7 @@ static int sessionGrowHash(int bPatchset, SessionTable *pTab){ /* ** This function queries the database for the names of the columns of table -** zThis, in schema zDb. It is expected that the table has nCol columns. If -** not, SQLITE_SCHEMA is returned and none of the output variables are -** populated. +** zThis, in schema zDb. ** ** Otherwise, if they are not NULL, variable *pnCol is set to the number ** of columns in the database table and variable *pzTab is set to point to a @@ -177664,9 +181381,7 @@ static int sessionGrowHash(int bPatchset, SessionTable *pTab){ ** *pabPK = {1, 0, 0, 1} ** ** All returned buffers are part of the same single allocation, which must -** be freed using sqlite3_free() by the caller. If pazCol was not NULL, then -** pointer *pazCol should be freed to release all memory. Otherwise, pointer -** *pabPK. It is illegal for both pazCol and pabPK to be NULL. +** be freed using sqlite3_free() by the caller */ static int sessionTableInfo( sqlite3 *db, /* Database connection */ @@ -177691,7 +181406,23 @@ static int sessionTableInfo( assert( pazCol && pabPK ); nThis = sqlite3Strlen30(zThis); - zPragma = sqlite3_mprintf("PRAGMA '%q'.table_info('%q')", zDb, zThis); + if( nThis==12 && 0==sqlite3_stricmp("sqlite_stat1", zThis) ){ + rc = sqlite3_table_column_metadata(db, zDb, zThis, 0, 0, 0, 0, 0, 0); + if( rc==SQLITE_OK ){ + /* For sqlite_stat1, pretend that (tbl,idx) is the PRIMARY KEY. */ + zPragma = sqlite3_mprintf( + "SELECT 0, 'tbl', '', 0, '', 1 UNION ALL " + "SELECT 1, 'idx', '', 0, '', 2 UNION ALL " + "SELECT 2, 'stat', '', 0, '', 0" + ); + }else if( rc==SQLITE_ERROR ){ + zPragma = sqlite3_mprintf(""); + }else{ + return rc; + } + }else{ + zPragma = sqlite3_mprintf("PRAGMA '%q'.table_info('%q')", zDb, zThis); + } if( !zPragma ) return SQLITE_NOMEM; rc = sqlite3_prepare_v2(db, zPragma, -1, &pStmt, 0); @@ -177783,11 +181514,55 @@ static int sessionInitTable(sqlite3_session *pSession, SessionTable *pTab){ break; } } + if( 0==sqlite3_stricmp("sqlite_stat1", pTab->zName) ){ + pTab->bStat1 = 1; + } } } return (pSession->rc || pTab->abPK==0); } +/* +** Versions of the four methods in object SessionHook for use with the +** sqlite_stat1 table. The purpose of this is to substitute a zero-length +** blob each time a NULL value is read from the "idx" column of the +** sqlite_stat1 table. +*/ +typedef struct SessionStat1Ctx SessionStat1Ctx; +struct SessionStat1Ctx { + SessionHook hook; + sqlite3_session *pSession; +}; +static int sessionStat1Old(void *pCtx, int iCol, sqlite3_value **ppVal){ + SessionStat1Ctx *p = (SessionStat1Ctx*)pCtx; + sqlite3_value *pVal = 0; + int rc = p->hook.xOld(p->hook.pCtx, iCol, &pVal); + if( rc==SQLITE_OK && iCol==1 && sqlite3_value_type(pVal)==SQLITE_NULL ){ + pVal = p->pSession->pZeroBlob; + } + *ppVal = pVal; + return rc; +} +static int sessionStat1New(void *pCtx, int iCol, sqlite3_value **ppVal){ + SessionStat1Ctx *p = (SessionStat1Ctx*)pCtx; + sqlite3_value *pVal = 0; + int rc = p->hook.xNew(p->hook.pCtx, iCol, &pVal); + if( rc==SQLITE_OK && iCol==1 && sqlite3_value_type(pVal)==SQLITE_NULL ){ + pVal = p->pSession->pZeroBlob; + } + *ppVal = pVal; + return rc; +} +static int sessionStat1Count(void *pCtx){ + SessionStat1Ctx *p = (SessionStat1Ctx*)pCtx; + return p->hook.xCount(p->hook.pCtx); +} +static int sessionStat1Depth(void *pCtx){ + SessionStat1Ctx *p = (SessionStat1Ctx*)pCtx; + return p->hook.xDepth(p->hook.pCtx); +} + + /* ** This function is only called from with a pre-update-hook reporting a ** change on table pTab (attached to session pSession). The type of change @@ -177804,6 +181579,7 @@ static void sessionPreupdateOneChange( int iHash; int bNull = 0; int rc = SQLITE_OK; + SessionStat1Ctx stat1 = {0}; if( pSession->rc ) return; @@ -177823,6 +181599,25 @@ static void sessionPreupdateOneChange( return; } + if( pTab->bStat1 ){ + stat1.hook = pSession->hook; + stat1.pSession = pSession; + pSession->hook.pCtx = (void*)&stat1; + pSession->hook.xNew = sessionStat1New; + pSession->hook.xOld = sessionStat1Old; + pSession->hook.xCount = sessionStat1Count; + pSession->hook.xDepth = sessionStat1Depth; + if( pSession->pZeroBlob==0 ){ + sqlite3_value *p = sqlite3ValueNew(0); + if( p==0 ){ + rc = SQLITE_NOMEM; + goto error_out; + } + sqlite3ValueSetStr(p, 0, "", 0, SQLITE_STATIC); + pSession->pZeroBlob = p; + } + } + /* Calculate the hash-key for this change. If the primary key of the row ** includes a NULL value, exit early. Such changes are ignored by the ** session module. */ @@ -177912,6 +181707,9 @@ static void sessionPreupdateOneChange( /* If an error has occurred, mark the session object as failed. */ error_out: + if( pTab->bStat1 ){ + pSession->hook = stat1.hook; + } if( rc!=SQLITE_OK ){ pSession->rc = rc; } @@ -178248,7 +182046,6 @@ SQLITE_API int sqlite3session_diff( if( abPK[i] ) bHasPk = 1; } } - } sqlite3_free((char*)azCol); if( bMismatch ){ @@ -178374,6 +182171,7 @@ SQLITE_API void sqlite3session_delete(sqlite3_session *pSession){ } } sqlite3_mutex_leave(sqlite3_db_mutex(db)); + sqlite3ValueFree(pSession->pZeroBlob); /* Delete all attached table objects. And the contents of their ** associated hash-tables. */ @@ -178841,28 +182639,42 @@ static int sessionSelectStmt( sqlite3_stmt **ppStmt /* OUT: Prepared SELECT statement */ ){ int rc = SQLITE_OK; - int i; - const char *zSep = ""; - SessionBuffer buf = {0, 0, 0}; + char *zSql = 0; + int nSql = -1; - sessionAppendStr(&buf, "SELECT * FROM ", &rc); - sessionAppendIdent(&buf, zDb, &rc); - sessionAppendStr(&buf, ".", &rc); - sessionAppendIdent(&buf, zTab, &rc); - sessionAppendStr(&buf, " WHERE ", &rc); - for(i=0; ibEof && pIn->xInput && pIn->iNext>=SESSIONS_STRM_CHUNK_SIZE ){ + if( pIn->xInput && pIn->iNext>=SESSIONS_STRM_CHUNK_SIZE ){ int nMove = pIn->buf.nBuf - pIn->iNext; assert( nMove>=0 ); if( nMove>0 ){ @@ -179373,13 +183185,16 @@ static int sessionReadRecord( if( abPK && abPK[i]==0 ) continue; rc = sessionInputBuffer(pIn, 9); if( rc==SQLITE_OK ){ - eType = pIn->aData[pIn->iNext++]; - } - - assert( apOut[i]==0 ); - if( eType ){ - apOut[i] = sqlite3ValueNew(0); - if( !apOut[i] ) rc = SQLITE_NOMEM; + if( pIn->iNext>=pIn->nData ){ + rc = SQLITE_CORRUPT_BKPT; + }else{ + eType = pIn->aData[pIn->iNext++]; + assert( apOut[i]==0 ); + if( eType ){ + apOut[i] = sqlite3ValueNew(0); + if( !apOut[i] ) rc = SQLITE_NOMEM; + } + } } if( rc==SQLITE_OK ){ @@ -179389,10 +183204,14 @@ static int sessionReadRecord( pIn->iNext += sessionVarintGet(aVal, &nByte); rc = sessionInputBuffer(pIn, nByte); if( rc==SQLITE_OK ){ - u8 enc = (eType==SQLITE_TEXT ? SQLITE_UTF8 : 0); - rc = sessionValueSetStr(apOut[i],&pIn->aData[pIn->iNext],nByte,enc); + if( nByte<0 || nByte>pIn->nData-pIn->iNext ){ + rc = SQLITE_CORRUPT_BKPT; + }else{ + u8 enc = (eType==SQLITE_TEXT ? SQLITE_UTF8 : 0); + rc = sessionValueSetStr(apOut[i],&pIn->aData[pIn->iNext],nByte,enc); + pIn->iNext += nByte; + } } - pIn->iNext += nByte; } if( eType==SQLITE_INTEGER || eType==SQLITE_FLOAT ){ sqlite3_int64 v = sessionGetI64(aVal); @@ -179432,8 +183251,19 @@ static int sessionChangesetBufferTblhdr(SessionInput *pIn, int *pnByte){ rc = sessionInputBuffer(pIn, 9); if( rc==SQLITE_OK ){ nRead += sessionVarintGet(&pIn->aData[pIn->iNext + nRead], &nCol); - rc = sessionInputBuffer(pIn, nRead+nCol+100); - nRead += nCol; + /* The hard upper limit for the number of columns in an SQLite + ** database table is, according to sqliteLimit.h, 32676. So + ** consider any table-header that purports to have more than 65536 + ** columns to be corrupt. This is convenient because otherwise, + ** if the (nCol>65536) condition below were omitted, a sufficiently + ** large value for nCol may cause nRead to wrap around and become + ** negative. Leading to a crash. */ + if( nCol<0 || nCol>65536 ){ + rc = SQLITE_CORRUPT_BKPT; + }else{ + rc = sessionInputBuffer(pIn, nRead+nCol+100); + nRead += nCol; + } } while( rc==SQLITE_OK ){ @@ -179510,11 +183340,15 @@ static int sessionChangesetReadTblhdr(sqlite3_changeset_iter *p){ int nByte; int nVarint; nVarint = sessionVarintGet(&p->in.aData[p->in.iNext], &p->nCol); - nCopy -= nVarint; - p->in.iNext += nVarint; - nByte = p->nCol * sizeof(sqlite3_value*) * 2 + nCopy; - p->tblhdr.nBuf = 0; - sessionBufferGrow(&p->tblhdr, nByte, &rc); + if( p->nCol>0 ){ + nCopy -= nVarint; + p->in.iNext += nVarint; + nByte = p->nCol * sizeof(sqlite3_value*) * 2 + nCopy; + p->tblhdr.nBuf = 0; + sessionBufferGrow(&p->tblhdr, nByte, &rc); + }else{ + rc = SQLITE_CORRUPT_BKPT; + } } if( rc==SQLITE_OK ){ @@ -179549,7 +183383,8 @@ static int sessionChangesetReadTblhdr(sqlite3_changeset_iter *p){ static int sessionChangesetNext( sqlite3_changeset_iter *p, /* Changeset iterator */ u8 **paRec, /* If non-NULL, store record pointer here */ - int *pnRec /* If non-NULL, store size of record here */ + int *pnRec, /* If non-NULL, store size of record here */ + int *pbNew /* If non-NULL, true if new table */ ){ int i; u8 op; @@ -179584,6 +183419,7 @@ static int sessionChangesetNext( op = p->in.aData[p->in.iNext++]; while( op=='T' || op=='P' ){ + if( pbNew ) *pbNew = 1; p->bPatchset = (op=='P'); if( sessionChangesetReadTblhdr(p) ) return p->rc; if( (p->rc = sessionInputBuffer(&p->in, 2)) ) return p->rc; @@ -179592,6 +183428,13 @@ static int sessionChangesetNext( op = p->in.aData[p->in.iNext++]; } + if( p->zTab==0 ){ + /* The first record in the changeset is not a table header. Must be a + ** corrupt changeset. */ + assert( p->in.iNext==1 ); + return (p->rc = SQLITE_CORRUPT_BKPT); + } + p->op = op; p->bIndirect = p->in.aData[p->in.iNext++]; if( p->op!=SQLITE_UPDATE && p->op!=SQLITE_DELETE && p->op!=SQLITE_INSERT ){ @@ -179634,9 +183477,9 @@ static int sessionChangesetNext( ** new.* to old.*, to accommodate the code that reads these arrays. */ for(i=0; inCol; i++){ assert( p->apValue[i]==0 ); - assert( p->abPK[i]==0 || p->apValue[i+p->nCol] ); if( p->abPK[i] ){ p->apValue[i] = p->apValue[i+p->nCol]; + if( p->apValue[i]==0 ) return (p->rc = SQLITE_CORRUPT_BKPT); p->apValue[i+p->nCol] = 0; } } @@ -179655,7 +183498,7 @@ static int sessionChangesetNext( ** callback by changeset_apply(). */ SQLITE_API int sqlite3changeset_next(sqlite3_changeset_iter *p){ - return sessionChangesetNext(p, 0, 0); + return sessionChangesetNext(p, 0, 0, 0); } /* @@ -180031,9 +183874,11 @@ struct SessionApplyCtx { int nCol; /* Size of azCol[] and abPK[] arrays */ const char **azCol; /* Array of column names */ u8 *abPK; /* Boolean array - true if column is in PK */ - + int bStat1; /* True if table is sqlite_stat1 */ int bDeferConstraints; /* True to defer constraints */ SessionBuffer constraints; /* Deferred constraints are stored here */ + SessionBuffer rebase; /* Rebase information (if any) here */ + int bRebaseStarted; /* If table header is already in rebase */ }; /* @@ -180201,6 +184046,7 @@ static int sessionUpdateRow( return rc; } + /* ** Formulate and prepare an SQL statement to query table zTab by primary ** key. Assuming the following table structure: @@ -180262,6 +184108,46 @@ static int sessionInsertRow( return rc; } +static int sessionPrepare(sqlite3 *db, sqlite3_stmt **pp, const char *zSql){ + return sqlite3_prepare_v2(db, zSql, -1, pp, 0); +} + +/* +** Prepare statements for applying changes to the sqlite_stat1 table. +** These are similar to those created by sessionSelectRow(), +** sessionInsertRow(), sessionUpdateRow() and sessionDeleteRow() for +** other tables. +*/ +static int sessionStat1Sql(sqlite3 *db, SessionApplyCtx *p){ + int rc = sessionSelectRow(db, "sqlite_stat1", p); + if( rc==SQLITE_OK ){ + rc = sessionPrepare(db, &p->pInsert, + "INSERT INTO main.sqlite_stat1 VALUES(?1, " + "CASE WHEN length(?2)=0 AND typeof(?2)='blob' THEN NULL ELSE ?2 END, " + "?3)" + ); + } + if( rc==SQLITE_OK ){ + rc = sessionPrepare(db, &p->pUpdate, + "UPDATE main.sqlite_stat1 SET " + "tbl = CASE WHEN ?2 THEN ?3 ELSE tbl END, " + "idx = CASE WHEN ?5 THEN ?6 ELSE idx END, " + "stat = CASE WHEN ?8 THEN ?9 ELSE stat END " + "WHERE tbl=?1 AND idx IS " + "CASE WHEN length(?4)=0 AND typeof(?4)='blob' THEN NULL ELSE ?4 END " + "AND (?10 OR ?8=0 OR stat IS ?7)" + ); + } + if( rc==SQLITE_OK ){ + rc = sessionPrepare(db, &p->pDelete, + "DELETE FROM main.sqlite_stat1 WHERE tbl=?1 AND idx IS " + "CASE WHEN length(?2)=0 AND typeof(?2)='blob' THEN NULL ELSE ?2 END " + "AND (?4 OR stat IS ?3)" + ); + } + return rc; +} + /* ** A wrapper around sqlite3_bind_value() that detects an extra problem. ** See comments in the body of this function for details. @@ -180319,7 +184205,13 @@ static int sessionBindRow( if( !abPK || abPK[i] ){ sqlite3_value *pVal; (void)xValue(pIter, i, &pVal); - rc = sessionBindValue(pStmt, i+1, pVal); + if( pVal==0 ){ + /* The value in the changeset was "undefined". This indicates a + ** corrupt changeset blob. */ + rc = SQLITE_CORRUPT_BKPT; + }else{ + rc = sessionBindValue(pStmt, i+1, pVal); + } } } return rc; @@ -180367,6 +184259,54 @@ static int sessionSeekToRow( return rc; } +/* +** This function is called from within sqlite3changset_apply_v2() when +** a conflict is encountered and resolved using conflict resolution +** mode eType (either SQLITE_CHANGESET_OMIT or SQLITE_CHANGESET_REPLACE).. +** It adds a conflict resolution record to the buffer in +** SessionApplyCtx.rebase, which will eventually be returned to the caller +** of apply_v2() as the "rebase" buffer. +** +** Return SQLITE_OK if successful, or an SQLite error code otherwise. +*/ +static int sessionRebaseAdd( + SessionApplyCtx *p, /* Apply context */ + int eType, /* Conflict resolution (OMIT or REPLACE) */ + sqlite3_changeset_iter *pIter /* Iterator pointing at current change */ +){ + int rc = SQLITE_OK; + int i; + int eOp = pIter->op; + if( p->bRebaseStarted==0 ){ + /* Append a table-header to the rebase buffer */ + const char *zTab = pIter->zTab; + sessionAppendByte(&p->rebase, 'T', &rc); + sessionAppendVarint(&p->rebase, p->nCol, &rc); + sessionAppendBlob(&p->rebase, p->abPK, p->nCol, &rc); + sessionAppendBlob(&p->rebase, (u8*)zTab, (int)strlen(zTab)+1, &rc); + p->bRebaseStarted = 1; + } + + assert( eType==SQLITE_CHANGESET_REPLACE||eType==SQLITE_CHANGESET_OMIT ); + assert( eOp==SQLITE_DELETE || eOp==SQLITE_INSERT || eOp==SQLITE_UPDATE ); + + sessionAppendByte(&p->rebase, + (eOp==SQLITE_DELETE ? SQLITE_DELETE : SQLITE_INSERT), &rc + ); + sessionAppendByte(&p->rebase, (eType==SQLITE_CHANGESET_REPLACE), &rc); + for(i=0; inCol; i++){ + sqlite3_value *pVal = 0; + if( eOp==SQLITE_DELETE || (eOp==SQLITE_UPDATE && p->abPK[i]) ){ + sqlite3changeset_old(pIter, i, &pVal); + }else{ + sqlite3changeset_new(pIter, i, &pVal); + } + sessionAppendValue(&p->rebase, pVal, &rc); + } + + return rc; +} + /* ** Invoke the conflict handler for the change that the changeset iterator ** currently points to. @@ -180442,7 +184382,7 @@ static int sessionConflictHandler( u8 *aBlob = &pIter->in.aData[pIter->in.iCurrent]; int nBlob = pIter->in.iNext - pIter->in.iCurrent; sessionAppendBlob(&p->constraints, aBlob, nBlob, &rc); - res = SQLITE_CHANGESET_OMIT; + return SQLITE_OK; }else{ /* No other row with the new.* primary key. */ res = xConflict(pCtx, eType+1, pIter); @@ -180468,6 +184408,9 @@ static int sessionConflictHandler( rc = SQLITE_MISUSE; break; } + if( rc==SQLITE_OK ){ + rc = sessionRebaseAdd(p, res, pIter); + } } return rc; @@ -180592,11 +184535,25 @@ static int sessionApplyOneOp( }else{ assert( op==SQLITE_INSERT ); - rc = sessionBindRow(pIter, sqlite3changeset_new, nCol, 0, p->pInsert); - if( rc!=SQLITE_OK ) return rc; + if( p->bStat1 ){ + /* Check if there is a conflicting row. For sqlite_stat1, this needs + ** to be done using a SELECT, as there is no PRIMARY KEY in the + ** database schema to throw an exception if a duplicate is inserted. */ + rc = sessionSeekToRow(p->db, pIter, p->abPK, p->pSelect); + if( rc==SQLITE_ROW ){ + rc = SQLITE_CONSTRAINT; + sqlite3_reset(p->pSelect); + } + } + + if( rc==SQLITE_OK ){ + rc = sessionBindRow(pIter, sqlite3changeset_new, nCol, 0, p->pInsert); + if( rc!=SQLITE_OK ) return rc; + + sqlite3_step(p->pInsert); + rc = sqlite3_reset(p->pInsert); + } - sqlite3_step(p->pInsert); - rc = sqlite3_reset(p->pInsert); if( (rc&0xff)==SQLITE_CONSTRAINT ){ rc = sessionConflictHandler( SQLITE_CHANGESET_CONFLICT, p, pIter, xConflict, pCtx, pbReplace @@ -180629,42 +184586,42 @@ static int sessionApplyOneWithRetry( int rc; rc = sessionApplyOneOp(pIter, pApply, xConflict, pCtx, &bReplace, &bRetry); - assert( rc==SQLITE_OK || (bRetry==0 && bReplace==0) ); - - /* If the bRetry flag is set, the change has not been applied due to an - ** SQLITE_CHANGESET_DATA problem (i.e. this is an UPDATE or DELETE and - ** a row with the correct PK is present in the db, but one or more other - ** fields do not contain the expected values) and the conflict handler - ** returned SQLITE_CHANGESET_REPLACE. In this case retry the operation, - ** but pass NULL as the final argument so that sessionApplyOneOp() ignores - ** the SQLITE_CHANGESET_DATA problem. */ - if( bRetry ){ - assert( pIter->op==SQLITE_UPDATE || pIter->op==SQLITE_DELETE ); - rc = sessionApplyOneOp(pIter, pApply, xConflict, pCtx, 0, 0); - } - - /* If the bReplace flag is set, the change is an INSERT that has not - ** been performed because the database already contains a row with the - ** specified primary key and the conflict handler returned - ** SQLITE_CHANGESET_REPLACE. In this case remove the conflicting row - ** before reattempting the INSERT. */ - else if( bReplace ){ - assert( pIter->op==SQLITE_INSERT ); - rc = sqlite3_exec(db, "SAVEPOINT replace_op", 0, 0, 0); - if( rc==SQLITE_OK ){ - rc = sessionBindRow(pIter, - sqlite3changeset_new, pApply->nCol, pApply->abPK, pApply->pDelete); - sqlite3_bind_int(pApply->pDelete, pApply->nCol+1, 1); - } - if( rc==SQLITE_OK ){ - sqlite3_step(pApply->pDelete); - rc = sqlite3_reset(pApply->pDelete); - } - if( rc==SQLITE_OK ){ + if( rc==SQLITE_OK ){ + /* If the bRetry flag is set, the change has not been applied due to an + ** SQLITE_CHANGESET_DATA problem (i.e. this is an UPDATE or DELETE and + ** a row with the correct PK is present in the db, but one or more other + ** fields do not contain the expected values) and the conflict handler + ** returned SQLITE_CHANGESET_REPLACE. In this case retry the operation, + ** but pass NULL as the final argument so that sessionApplyOneOp() ignores + ** the SQLITE_CHANGESET_DATA problem. */ + if( bRetry ){ + assert( pIter->op==SQLITE_UPDATE || pIter->op==SQLITE_DELETE ); rc = sessionApplyOneOp(pIter, pApply, xConflict, pCtx, 0, 0); } - if( rc==SQLITE_OK ){ - rc = sqlite3_exec(db, "RELEASE replace_op", 0, 0, 0); + + /* If the bReplace flag is set, the change is an INSERT that has not + ** been performed because the database already contains a row with the + ** specified primary key and the conflict handler returned + ** SQLITE_CHANGESET_REPLACE. In this case remove the conflicting row + ** before reattempting the INSERT. */ + else if( bReplace ){ + assert( pIter->op==SQLITE_INSERT ); + rc = sqlite3_exec(db, "SAVEPOINT replace_op", 0, 0, 0); + if( rc==SQLITE_OK ){ + rc = sessionBindRow(pIter, + sqlite3changeset_new, pApply->nCol, pApply->abPK, pApply->pDelete); + sqlite3_bind_int(pApply->pDelete, pApply->nCol+1, 1); + } + if( rc==SQLITE_OK ){ + sqlite3_step(pApply->pDelete); + rc = sqlite3_reset(pApply->pDelete); + } + if( rc==SQLITE_OK ){ + rc = sessionApplyOneOp(pIter, pApply, xConflict, pCtx, 0, 0); + } + if( rc==SQLITE_OK ){ + rc = sqlite3_exec(db, "RELEASE replace_op", 0, 0, 0); + } } } @@ -180740,10 +184697,12 @@ static int sessionChangesetApply( int eConflict, /* DATA, MISSING, CONFLICT, CONSTRAINT */ sqlite3_changeset_iter *p /* Handle describing change and conflict */ ), - void *pCtx /* First argument passed to xConflict */ + void *pCtx, /* First argument passed to xConflict */ + void **ppRebase, int *pnRebase, /* OUT: Rebase information */ + int flags /* SESSION_APPLY_XXX flags */ ){ int schemaMismatch = 0; - int rc; /* Return code */ + int rc = SQLITE_OK; /* Return code */ const char *zTab = 0; /* Name of current table */ int nTab = 0; /* Result of sqlite3Strlen30(zTab) */ SessionApplyCtx sApply; /* changeset_apply() context object */ @@ -180754,7 +184713,9 @@ static int sessionChangesetApply( pIter->in.bNoDiscard = 1; memset(&sApply, 0, sizeof(sApply)); sqlite3_mutex_enter(sqlite3_db_mutex(db)); - rc = sqlite3_exec(db, "SAVEPOINT changeset_apply", 0, 0, 0); + if( (flags & SQLITE_CHANGESETAPPLY_NOSAVEPOINT)==0 ){ + rc = sqlite3_exec(db, "SAVEPOINT changeset_apply", 0, 0, 0); + } if( rc==SQLITE_OK ){ rc = sqlite3_exec(db, "PRAGMA defer_foreign_keys = 1", 0, 0, 0); } @@ -180778,9 +184739,18 @@ static int sessionChangesetApply( sqlite3_finalize(sApply.pUpdate); sqlite3_finalize(sApply.pInsert); sqlite3_finalize(sApply.pSelect); - memset(&sApply, 0, sizeof(sApply)); sApply.db = db; + sApply.pDelete = 0; + sApply.pUpdate = 0; + sApply.pInsert = 0; + sApply.pSelect = 0; + sApply.nCol = 0; + sApply.azCol = 0; + sApply.abPK = 0; + sApply.bStat1 = 0; sApply.bDeferConstraints = 1; + sApply.bRebaseStarted = 0; + memset(&sApply.constraints, 0, sizeof(SessionBuffer)); /* If an xFilter() callback was specified, invoke it now. If the ** xFilter callback returns zero, skip this table. If it returns @@ -180829,12 +184799,20 @@ static int sessionChangesetApply( } else{ sApply.nCol = nCol; - if((rc = sessionSelectRow(db, zTab, &sApply)) - || (rc = sessionUpdateRow(db, zTab, &sApply)) - || (rc = sessionDeleteRow(db, zTab, &sApply)) - || (rc = sessionInsertRow(db, zTab, &sApply)) - ){ - break; + if( 0==sqlite3_stricmp(zTab, "sqlite_stat1") ){ + if( (rc = sessionStat1Sql(db, &sApply) ) ){ + break; + } + sApply.bStat1 = 1; + }else{ + if((rc = sessionSelectRow(db, zTab, &sApply)) + || (rc = sessionUpdateRow(db, zTab, &sApply)) + || (rc = sessionDeleteRow(db, zTab, &sApply)) + || (rc = sessionInsertRow(db, zTab, &sApply)) + ){ + break; + } + sApply.bStat1 = 0; } } nTab = sqlite3Strlen30(zTab); @@ -180875,23 +184853,62 @@ static int sessionChangesetApply( } sqlite3_exec(db, "PRAGMA defer_foreign_keys = 0", 0, 0, 0); - if( rc==SQLITE_OK ){ - rc = sqlite3_exec(db, "RELEASE changeset_apply", 0, 0, 0); - }else{ - sqlite3_exec(db, "ROLLBACK TO changeset_apply", 0, 0, 0); - sqlite3_exec(db, "RELEASE changeset_apply", 0, 0, 0); + if( (flags & SQLITE_CHANGESETAPPLY_NOSAVEPOINT)==0 ){ + if( rc==SQLITE_OK ){ + rc = sqlite3_exec(db, "RELEASE changeset_apply", 0, 0, 0); + }else{ + sqlite3_exec(db, "ROLLBACK TO changeset_apply", 0, 0, 0); + sqlite3_exec(db, "RELEASE changeset_apply", 0, 0, 0); + } } + if( rc==SQLITE_OK && bPatchset==0 && ppRebase && pnRebase ){ + *ppRebase = (void*)sApply.rebase.aBuf; + *pnRebase = sApply.rebase.nBuf; + sApply.rebase.aBuf = 0; + } sqlite3_finalize(sApply.pInsert); sqlite3_finalize(sApply.pDelete); sqlite3_finalize(sApply.pUpdate); sqlite3_finalize(sApply.pSelect); sqlite3_free((char*)sApply.azCol); /* cast works around VC++ bug */ sqlite3_free((char*)sApply.constraints.aBuf); + sqlite3_free((char*)sApply.rebase.aBuf); sqlite3_mutex_leave(sqlite3_db_mutex(db)); return rc; } +/* +** Apply the changeset passed via pChangeset/nChangeset to the main +** database attached to handle "db". +*/ +SQLITE_API int sqlite3changeset_apply_v2( + sqlite3 *db, /* Apply change to "main" db of this handle */ + int nChangeset, /* Size of changeset in bytes */ + void *pChangeset, /* Changeset blob */ + int(*xFilter)( + void *pCtx, /* Copy of sixth arg to _apply() */ + const char *zTab /* Table name */ + ), + int(*xConflict)( + void *pCtx, /* Copy of sixth arg to _apply() */ + int eConflict, /* DATA, MISSING, CONFLICT, CONSTRAINT */ + sqlite3_changeset_iter *p /* Handle describing change and conflict */ + ), + void *pCtx, /* First argument passed to xConflict */ + void **ppRebase, int *pnRebase, + int flags +){ + sqlite3_changeset_iter *pIter; /* Iterator to skip through changeset */ + int rc = sqlite3changeset_start(&pIter, nChangeset, pChangeset); + if( rc==SQLITE_OK ){ + rc = sessionChangesetApply( + db, pIter, xFilter, xConflict, pCtx, ppRebase, pnRebase, flags + ); + } + return rc; +} + /* ** Apply the changeset passed via pChangeset/nChangeset to the main database ** attached to handle "db". Invoke the supplied conflict handler callback @@ -180912,12 +184929,9 @@ SQLITE_API int sqlite3changeset_apply( ), void *pCtx /* First argument passed to xConflict */ ){ - sqlite3_changeset_iter *pIter; /* Iterator to skip through changeset */ - int rc = sqlite3changeset_start(&pIter, nChangeset, pChangeset); - if( rc==SQLITE_OK ){ - rc = sessionChangesetApply(db, pIter, xFilter, xConflict, pCtx); - } - return rc; + return sqlite3changeset_apply_v2( + db, nChangeset, pChangeset, xFilter, xConflict, pCtx, 0, 0, 0 + ); } /* @@ -180925,6 +184939,32 @@ SQLITE_API int sqlite3changeset_apply( ** attached to handle "db". Invoke the supplied conflict handler callback ** to resolve any conflicts encountered while applying the change. */ +SQLITE_API int sqlite3changeset_apply_v2_strm( + sqlite3 *db, /* Apply change to "main" db of this handle */ + int (*xInput)(void *pIn, void *pData, int *pnData), /* Input function */ + void *pIn, /* First arg for xInput */ + int(*xFilter)( + void *pCtx, /* Copy of sixth arg to _apply() */ + const char *zTab /* Table name */ + ), + int(*xConflict)( + void *pCtx, /* Copy of sixth arg to _apply() */ + int eConflict, /* DATA, MISSING, CONFLICT, CONSTRAINT */ + sqlite3_changeset_iter *p /* Handle describing change and conflict */ + ), + void *pCtx, /* First argument passed to xConflict */ + void **ppRebase, int *pnRebase, + int flags +){ + sqlite3_changeset_iter *pIter; /* Iterator to skip through changeset */ + int rc = sqlite3changeset_start_strm(&pIter, xInput, pIn); + if( rc==SQLITE_OK ){ + rc = sessionChangesetApply( + db, pIter, xFilter, xConflict, pCtx, ppRebase, pnRebase, flags + ); + } + return rc; +} SQLITE_API int sqlite3changeset_apply_strm( sqlite3 *db, /* Apply change to "main" db of this handle */ int (*xInput)(void *pIn, void *pData, int *pnData), /* Input function */ @@ -180940,12 +184980,9 @@ SQLITE_API int sqlite3changeset_apply_strm( ), void *pCtx /* First argument passed to xConflict */ ){ - sqlite3_changeset_iter *pIter; /* Iterator to skip through changeset */ - int rc = sqlite3changeset_start_strm(&pIter, xInput, pIn); - if( rc==SQLITE_OK ){ - rc = sessionChangesetApply(db, pIter, xFilter, xConflict, pCtx); - } - return rc; + return sqlite3changeset_apply_v2_strm( + db, xInput, pIn, xFilter, xConflict, pCtx, 0, 0, 0 + ); } /* @@ -180964,6 +185001,7 @@ struct sqlite3_changegroup { */ static int sessionChangeMerge( SessionTable *pTab, /* Table structure */ + int bRebase, /* True for a rebase hash-table */ int bPatchset, /* True for patchsets */ SessionChange *pExist, /* Existing change */ int op2, /* Second change operation */ @@ -180973,6 +185011,7 @@ static int sessionChangeMerge( SessionChange **ppNew /* OUT: Merged change */ ){ SessionChange *pNew = 0; + int rc = SQLITE_OK; if( !pExist ){ pNew = (SessionChange *)sqlite3_malloc(sizeof(SessionChange) + nRec); @@ -180982,9 +185021,66 @@ static int sessionChangeMerge( memset(pNew, 0, sizeof(SessionChange)); pNew->op = op2; pNew->bIndirect = bIndirect; - pNew->nRecord = nRec; pNew->aRecord = (u8*)&pNew[1]; - memcpy(pNew->aRecord, aRec, nRec); + if( bIndirect==0 || bRebase==0 ){ + pNew->nRecord = nRec; + memcpy(pNew->aRecord, aRec, nRec); + }else{ + int i; + u8 *pIn = aRec; + u8 *pOut = pNew->aRecord; + for(i=0; inCol; i++){ + int nIn = sessionSerialLen(pIn); + if( *pIn==0 ){ + *pOut++ = 0; + }else if( pTab->abPK[i]==0 ){ + *pOut++ = 0xFF; + }else{ + memcpy(pOut, pIn, nIn); + pOut += nIn; + } + pIn += nIn; + } + pNew->nRecord = pOut - pNew->aRecord; + } + }else if( bRebase ){ + if( pExist->op==SQLITE_DELETE && pExist->bIndirect ){ + *ppNew = pExist; + }else{ + int nByte = nRec + pExist->nRecord + sizeof(SessionChange); + pNew = (SessionChange*)sqlite3_malloc(nByte); + if( pNew==0 ){ + rc = SQLITE_NOMEM; + }else{ + int i; + u8 *a1 = pExist->aRecord; + u8 *a2 = aRec; + u8 *pOut; + + memset(pNew, 0, nByte); + pNew->bIndirect = bIndirect || pExist->bIndirect; + pNew->op = op2; + pOut = pNew->aRecord = (u8*)&pNew[1]; + + for(i=0; inCol; i++){ + int n1 = sessionSerialLen(a1); + int n2 = sessionSerialLen(a2); + if( *a1==0xFF || (pTab->abPK[i]==0 && bIndirect) ){ + *pOut++ = 0xFF; + }else if( *a2==0 ){ + memcpy(pOut, a1, n1); + pOut += n1; + }else{ + memcpy(pOut, a2, n2); + pOut += n2; + } + a1 += n1; + a2 += n2; + } + pNew->nRecord = pOut - pNew->aRecord; + } + sqlite3_free(pExist); + } }else{ int op1 = pExist->op; @@ -181078,7 +185174,7 @@ static int sessionChangeMerge( } *ppNew = pNew; - return SQLITE_OK; + return rc; } /* @@ -181087,15 +185183,15 @@ static int sessionChangeMerge( */ static int sessionChangesetToHash( sqlite3_changeset_iter *pIter, /* Iterator to read from */ - sqlite3_changegroup *pGrp /* Changegroup object to add changeset to */ + sqlite3_changegroup *pGrp, /* Changegroup object to add changeset to */ + int bRebase /* True if hash table is for rebasing */ ){ u8 *aRec; int nRec; int rc = SQLITE_OK; SessionTable *pTab = 0; - - while( SQLITE_ROW==sessionChangesetNext(pIter, &aRec, &nRec) ){ + while( SQLITE_ROW==sessionChangesetNext(pIter, &aRec, &nRec, 0) ){ const char *zNew; int nCol; int op; @@ -181175,7 +185271,7 @@ static int sessionChangesetToHash( } } - rc = sessionChangeMerge(pTab, + rc = sessionChangeMerge(pTab, bRebase, pIter->bPatchset, pExist, op, bIndirect, aRec, nRec, &pChange ); if( rc ) break; @@ -181283,7 +185379,7 @@ SQLITE_API int sqlite3changegroup_add(sqlite3_changegroup *pGrp, int nData, void rc = sqlite3changeset_start(&pIter, nData, pData); if( rc==SQLITE_OK ){ - rc = sessionChangesetToHash(pIter, pGrp); + rc = sessionChangesetToHash(pIter, pGrp, 0); } sqlite3changeset_finalize(pIter); return rc; @@ -181314,7 +185410,7 @@ SQLITE_API int sqlite3changegroup_add_strm( rc = sqlite3changeset_start_strm(&pIter, xInput, pIn); if( rc==SQLITE_OK ){ - rc = sessionChangesetToHash(pIter, pGrp); + rc = sessionChangesetToHash(pIter, pGrp, 0); } sqlite3changeset_finalize(pIter); return rc; @@ -181399,6 +185495,349 @@ SQLITE_API int sqlite3changeset_concat_strm( return rc; } +/* +** Changeset rebaser handle. +*/ +struct sqlite3_rebaser { + sqlite3_changegroup grp; /* Hash table */ +}; + +/* +** Buffers a1 and a2 must both contain a sessions module record nCol +** fields in size. This function appends an nCol sessions module +** record to buffer pBuf that is a copy of a1, except that for +** each field that is undefined in a1[], swap in the field from a2[]. +*/ +static void sessionAppendRecordMerge( + SessionBuffer *pBuf, /* Buffer to append to */ + int nCol, /* Number of columns in each record */ + u8 *a1, int n1, /* Record 1 */ + u8 *a2, int n2, /* Record 2 */ + int *pRc /* IN/OUT: error code */ +){ + sessionBufferGrow(pBuf, n1+n2, pRc); + if( *pRc==SQLITE_OK ){ + int i; + u8 *pOut = &pBuf->aBuf[pBuf->nBuf]; + for(i=0; inBuf = pOut-pBuf->aBuf; + assert( pBuf->nBuf<=pBuf->nAlloc ); + } +} + +/* +** This function is called when rebasing a local UPDATE change against one +** or more remote UPDATE changes. The aRec/nRec buffer contains the current +** old.* and new.* records for the change. The rebase buffer (a single +** record) is in aChange/nChange. The rebased change is appended to buffer +** pBuf. +** +** Rebasing the UPDATE involves: +** +** * Removing any changes to fields for which the corresponding field +** in the rebase buffer is set to "replaced" (type 0xFF). If this +** means the UPDATE change updates no fields, nothing is appended +** to the output buffer. +** +** * For each field modified by the local change for which the +** corresponding field in the rebase buffer is not "undefined" (0x00) +** or "replaced" (0xFF), the old.* value is replaced by the value +** in the rebase buffer. +*/ +static void sessionAppendPartialUpdate( + SessionBuffer *pBuf, /* Append record here */ + sqlite3_changeset_iter *pIter, /* Iterator pointed at local change */ + u8 *aRec, int nRec, /* Local change */ + u8 *aChange, int nChange, /* Record to rebase against */ + int *pRc /* IN/OUT: Return Code */ +){ + sessionBufferGrow(pBuf, 2+nRec+nChange, pRc); + if( *pRc==SQLITE_OK ){ + int bData = 0; + u8 *pOut = &pBuf->aBuf[pBuf->nBuf]; + int i; + u8 *a1 = aRec; + u8 *a2 = aChange; + + *pOut++ = SQLITE_UPDATE; + *pOut++ = pIter->bIndirect; + for(i=0; inCol; i++){ + int n1 = sessionSerialLen(a1); + int n2 = sessionSerialLen(a2); + if( pIter->abPK[i] || a2[0]==0 ){ + if( !pIter->abPK[i] ) bData = 1; + memcpy(pOut, a1, n1); + pOut += n1; + }else if( a2[0]!=0xFF ){ + bData = 1; + memcpy(pOut, a2, n2); + pOut += n2; + }else{ + *pOut++ = '\0'; + } + a1 += n1; + a2 += n2; + } + if( bData ){ + a2 = aChange; + for(i=0; inCol; i++){ + int n1 = sessionSerialLen(a1); + int n2 = sessionSerialLen(a2); + if( pIter->abPK[i] || a2[0]!=0xFF ){ + memcpy(pOut, a1, n1); + pOut += n1; + }else{ + *pOut++ = '\0'; + } + a1 += n1; + a2 += n2; + } + pBuf->nBuf = (pOut - pBuf->aBuf); + } + } +} + +/* +** pIter is configured to iterate through a changeset. This function rebases +** that changeset according to the current configuration of the rebaser +** object passed as the first argument. If no error occurs and argument xOutput +** is not NULL, then the changeset is returned to the caller by invoking +** xOutput zero or more times and SQLITE_OK returned. Or, if xOutput is NULL, +** then (*ppOut) is set to point to a buffer containing the rebased changeset +** before this function returns. In this case (*pnOut) is set to the size of +** the buffer in bytes. It is the responsibility of the caller to eventually +** free the (*ppOut) buffer using sqlite3_free(). +** +** If an error occurs, an SQLite error code is returned. If ppOut and +** pnOut are not NULL, then the two output parameters are set to 0 before +** returning. +*/ +static int sessionRebase( + sqlite3_rebaser *p, /* Rebaser hash table */ + sqlite3_changeset_iter *pIter, /* Input data */ + int (*xOutput)(void *pOut, const void *pData, int nData), + void *pOut, /* Context for xOutput callback */ + int *pnOut, /* OUT: Number of bytes in output changeset */ + void **ppOut /* OUT: Inverse of pChangeset */ +){ + int rc = SQLITE_OK; + u8 *aRec = 0; + int nRec = 0; + int bNew = 0; + SessionTable *pTab = 0; + SessionBuffer sOut = {0,0,0}; + + while( SQLITE_ROW==sessionChangesetNext(pIter, &aRec, &nRec, &bNew) ){ + SessionChange *pChange = 0; + int bDone = 0; + + if( bNew ){ + const char *zTab = pIter->zTab; + for(pTab=p->grp.pList; pTab; pTab=pTab->pNext){ + if( 0==sqlite3_stricmp(pTab->zName, zTab) ) break; + } + bNew = 0; + + /* A patchset may not be rebased */ + if( pIter->bPatchset ){ + rc = SQLITE_ERROR; + } + + /* Append a table header to the output for this new table */ + sessionAppendByte(&sOut, pIter->bPatchset ? 'P' : 'T', &rc); + sessionAppendVarint(&sOut, pIter->nCol, &rc); + sessionAppendBlob(&sOut, pIter->abPK, pIter->nCol, &rc); + sessionAppendBlob(&sOut,(u8*)pIter->zTab,(int)strlen(pIter->zTab)+1,&rc); + } + + if( pTab && rc==SQLITE_OK ){ + int iHash = sessionChangeHash(pTab, 0, aRec, pTab->nChange); + + for(pChange=pTab->apChange[iHash]; pChange; pChange=pChange->pNext){ + if( sessionChangeEqual(pTab, 0, aRec, 0, pChange->aRecord) ){ + break; + } + } + } + + if( pChange ){ + assert( pChange->op==SQLITE_DELETE || pChange->op==SQLITE_INSERT ); + switch( pIter->op ){ + case SQLITE_INSERT: + if( pChange->op==SQLITE_INSERT ){ + bDone = 1; + if( pChange->bIndirect==0 ){ + sessionAppendByte(&sOut, SQLITE_UPDATE, &rc); + sessionAppendByte(&sOut, pIter->bIndirect, &rc); + sessionAppendBlob(&sOut, pChange->aRecord, pChange->nRecord, &rc); + sessionAppendBlob(&sOut, aRec, nRec, &rc); + } + } + break; + + case SQLITE_UPDATE: + bDone = 1; + if( pChange->op==SQLITE_DELETE ){ + if( pChange->bIndirect==0 ){ + u8 *pCsr = aRec; + sessionSkipRecord(&pCsr, pIter->nCol); + sessionAppendByte(&sOut, SQLITE_INSERT, &rc); + sessionAppendByte(&sOut, pIter->bIndirect, &rc); + sessionAppendRecordMerge(&sOut, pIter->nCol, + pCsr, nRec-(pCsr-aRec), + pChange->aRecord, pChange->nRecord, &rc + ); + } + }else{ + sessionAppendPartialUpdate(&sOut, pIter, + aRec, nRec, pChange->aRecord, pChange->nRecord, &rc + ); + } + break; + + default: + assert( pIter->op==SQLITE_DELETE ); + bDone = 1; + if( pChange->op==SQLITE_INSERT ){ + sessionAppendByte(&sOut, SQLITE_DELETE, &rc); + sessionAppendByte(&sOut, pIter->bIndirect, &rc); + sessionAppendRecordMerge(&sOut, pIter->nCol, + pChange->aRecord, pChange->nRecord, aRec, nRec, &rc + ); + } + break; + } + } + + if( bDone==0 ){ + sessionAppendByte(&sOut, pIter->op, &rc); + sessionAppendByte(&sOut, pIter->bIndirect, &rc); + sessionAppendBlob(&sOut, aRec, nRec, &rc); + } + if( rc==SQLITE_OK && xOutput && sOut.nBuf>SESSIONS_STRM_CHUNK_SIZE ){ + rc = xOutput(pOut, sOut.aBuf, sOut.nBuf); + sOut.nBuf = 0; + } + if( rc ) break; + } + + if( rc!=SQLITE_OK ){ + sqlite3_free(sOut.aBuf); + memset(&sOut, 0, sizeof(sOut)); + } + + if( rc==SQLITE_OK ){ + if( xOutput ){ + if( sOut.nBuf>0 ){ + rc = xOutput(pOut, sOut.aBuf, sOut.nBuf); + } + }else{ + *ppOut = (void*)sOut.aBuf; + *pnOut = sOut.nBuf; + sOut.aBuf = 0; + } + } + sqlite3_free(sOut.aBuf); + return rc; +} + +/* +** Create a new rebaser object. +*/ +SQLITE_API int sqlite3rebaser_create(sqlite3_rebaser **ppNew){ + int rc = SQLITE_OK; + sqlite3_rebaser *pNew; + + pNew = sqlite3_malloc(sizeof(sqlite3_rebaser)); + if( pNew==0 ){ + rc = SQLITE_NOMEM; + }else{ + memset(pNew, 0, sizeof(sqlite3_rebaser)); + } + *ppNew = pNew; + return rc; +} + +/* +** Call this one or more times to configure a rebaser. +*/ +SQLITE_API int sqlite3rebaser_configure( + sqlite3_rebaser *p, + int nRebase, const void *pRebase +){ + sqlite3_changeset_iter *pIter = 0; /* Iterator opened on pData/nData */ + int rc; /* Return code */ + rc = sqlite3changeset_start(&pIter, nRebase, (void*)pRebase); + if( rc==SQLITE_OK ){ + rc = sessionChangesetToHash(pIter, &p->grp, 1); + } + sqlite3changeset_finalize(pIter); + return rc; +} + +/* +** Rebase a changeset according to current rebaser configuration +*/ +SQLITE_API int sqlite3rebaser_rebase( + sqlite3_rebaser *p, + int nIn, const void *pIn, + int *pnOut, void **ppOut +){ + sqlite3_changeset_iter *pIter = 0; /* Iterator to skip through input */ + int rc = sqlite3changeset_start(&pIter, nIn, (void*)pIn); + + if( rc==SQLITE_OK ){ + rc = sessionRebase(p, pIter, 0, 0, pnOut, ppOut); + sqlite3changeset_finalize(pIter); + } + + return rc; +} + +/* +** Rebase a changeset according to current rebaser configuration +*/ +SQLITE_API int sqlite3rebaser_rebase_strm( + sqlite3_rebaser *p, + int (*xInput)(void *pIn, void *pData, int *pnData), + void *pIn, + int (*xOutput)(void *pOut, const void *pData, int nData), + void *pOut +){ + sqlite3_changeset_iter *pIter = 0; /* Iterator to skip through input */ + int rc = sqlite3changeset_start_strm(&pIter, xInput, pIn); + + if( rc==SQLITE_OK ){ + rc = sessionRebase(p, pIter, xOutput, pOut, 0, 0); + sqlite3changeset_finalize(pIter); + } + + return rc; +} + +/* +** Destroy a rebaser object +*/ +SQLITE_API void sqlite3rebaser_delete(sqlite3_rebaser *p){ + if( p ){ + sessionDeleteTable(p->grp.pList); + sqlite3_free(p); + } +} + #endif /* SQLITE_ENABLE_SESSION && SQLITE_ENABLE_PREUPDATE_HOOK */ /************** End of sqlite3session.c **************************************/ @@ -185148,6 +189587,8 @@ static Fts5ExprPhrase *sqlite3Fts5ParseTerm( int bPrefix ); +static void sqlite3Fts5ParseSetCaret(Fts5ExprPhrase*); + static Fts5ExprNearset *sqlite3Fts5ParseNearset( Fts5Parse*, Fts5ExprNearset*, @@ -185228,9 +189669,10 @@ static int sqlite3Fts5UnicodeFold(int c, int bRemoveDiacritic); #define FTS5_STRING 9 #define FTS5_LP 10 #define FTS5_RP 11 -#define FTS5_COMMA 12 -#define FTS5_PLUS 13 -#define FTS5_STAR 14 +#define FTS5_CARET 12 +#define FTS5_COMMA 13 +#define FTS5_PLUS 14 +#define FTS5_STAR 15 /* ** 2000-05-29 @@ -185331,31 +189773,32 @@ static int sqlite3Fts5UnicodeFold(int c, int bRemoveDiacritic); ** defined, then do no error processing. ** fts5YYNSTATE the combined number of states. ** fts5YYNRULE the number of rules in the grammar +** fts5YYNFTS5TOKEN Number of terminal symbols ** fts5YY_MAX_SHIFT Maximum value for shift actions ** fts5YY_MIN_SHIFTREDUCE Minimum value for shift-reduce actions ** fts5YY_MAX_SHIFTREDUCE Maximum value for shift-reduce actions -** fts5YY_MIN_REDUCE Minimum value for reduce actions -** fts5YY_MAX_REDUCE Maximum value for reduce actions ** fts5YY_ERROR_ACTION The fts5yy_action[] code for syntax error ** fts5YY_ACCEPT_ACTION The fts5yy_action[] code for accept ** fts5YY_NO_ACTION The fts5yy_action[] code for no-op +** fts5YY_MIN_REDUCE Minimum value for reduce actions +** fts5YY_MAX_REDUCE Maximum value for reduce actions */ #ifndef INTERFACE # define INTERFACE 1 #endif /************* Begin control #defines *****************************************/ #define fts5YYCODETYPE unsigned char -#define fts5YYNOCODE 28 +#define fts5YYNOCODE 29 #define fts5YYACTIONTYPE unsigned char #define sqlite3Fts5ParserFTS5TOKENTYPE Fts5Token typedef union { int fts5yyinit; sqlite3Fts5ParserFTS5TOKENTYPE fts5yy0; int fts5yy4; - Fts5Colset* fts5yy11; - Fts5ExprNode* fts5yy24; - Fts5ExprNearset* fts5yy46; - Fts5ExprPhrase* fts5yy53; + Fts5ExprPhrase* fts5yy11; + Fts5ExprNearset* fts5yy14; + Fts5Colset* fts5yy43; + Fts5ExprNode* fts5yy54; } fts5YYMINORTYPE; #ifndef fts5YYSTACKDEPTH #define fts5YYSTACKDEPTH 100 @@ -185364,16 +189807,17 @@ typedef union { #define sqlite3Fts5ParserARG_PDECL ,Fts5Parse *pParse #define sqlite3Fts5ParserARG_FETCH Fts5Parse *pParse = fts5yypParser->pParse #define sqlite3Fts5ParserARG_STORE fts5yypParser->pParse = pParse -#define fts5YYNSTATE 33 -#define fts5YYNRULE 27 -#define fts5YY_MAX_SHIFT 32 -#define fts5YY_MIN_SHIFTREDUCE 50 -#define fts5YY_MAX_SHIFTREDUCE 76 -#define fts5YY_MIN_REDUCE 77 -#define fts5YY_MAX_REDUCE 103 -#define fts5YY_ERROR_ACTION 104 -#define fts5YY_ACCEPT_ACTION 105 -#define fts5YY_NO_ACTION 106 +#define fts5YYNSTATE 35 +#define fts5YYNRULE 28 +#define fts5YYNFTS5TOKEN 16 +#define fts5YY_MAX_SHIFT 34 +#define fts5YY_MIN_SHIFTREDUCE 52 +#define fts5YY_MAX_SHIFTREDUCE 79 +#define fts5YY_ERROR_ACTION 80 +#define fts5YY_ACCEPT_ACTION 81 +#define fts5YY_NO_ACTION 82 +#define fts5YY_MIN_REDUCE 83 +#define fts5YY_MAX_REDUCE 110 /************* End control #defines *******************************************/ /* Define the fts5yytestcase() macro to be a no-op if is not already defined @@ -185403,9 +189847,6 @@ typedef union { ** N between fts5YY_MIN_SHIFTREDUCE Shift to an arbitrary state then ** and fts5YY_MAX_SHIFTREDUCE reduce by rule N-fts5YY_MIN_SHIFTREDUCE. ** -** N between fts5YY_MIN_REDUCE Reduce by rule N-fts5YY_MIN_REDUCE -** and fts5YY_MAX_REDUCE -** ** N == fts5YY_ERROR_ACTION A syntax error has occurred. ** ** N == fts5YY_ACCEPT_ACTION The parser accepts its input. @@ -185413,25 +189854,22 @@ typedef union { ** N == fts5YY_NO_ACTION No such action. Denotes unused ** slots in the fts5yy_action[] table. ** +** N between fts5YY_MIN_REDUCE Reduce by rule N-fts5YY_MIN_REDUCE +** and fts5YY_MAX_REDUCE +** ** The action table is constructed as a single large table named fts5yy_action[]. ** Given state S and lookahead X, the action is computed as either: ** ** (A) N = fts5yy_action[ fts5yy_shift_ofst[S] + X ] ** (B) N = fts5yy_default[S] ** -** The (A) formula is preferred. The B formula is used instead if: -** (1) The fts5yy_shift_ofst[S]+X value is out of range, or -** (2) fts5yy_lookahead[fts5yy_shift_ofst[S]+X] is not equal to X, or -** (3) fts5yy_shift_ofst[S] equal fts5YY_SHIFT_USE_DFLT. -** (Implementation note: fts5YY_SHIFT_USE_DFLT is chosen so that -** fts5YY_SHIFT_USE_DFLT+X will be out of range for all possible lookaheads X. -** Hence only tests (1) and (2) need to be evaluated.) +** The (A) formula is preferred. The B formula is used instead if +** fts5yy_lookahead[fts5yy_shift_ofst[S]+X] is not equal to X. ** ** The formulas above are for computing the action when the lookahead is ** a terminal symbol. If the lookahead is a non-terminal (as occurs after ** a reduce action) then the fts5yy_reduce_ofst[] array is used in place of -** the fts5yy_shift_ofst[] array and fts5YY_REDUCE_USE_DFLT is used in place of -** fts5YY_SHIFT_USE_DFLT. +** the fts5yy_shift_ofst[] array. ** ** The following are the tables generated in this section: ** @@ -185445,54 +189883,56 @@ typedef union { ** fts5yy_default[] Default action for each state. ** *********** Begin parsing tables **********************************************/ -#define fts5YY_ACTTAB_COUNT (98) +#define fts5YY_ACTTAB_COUNT (105) static const fts5YYACTIONTYPE fts5yy_action[] = { - /* 0 */ 105, 19, 90, 6, 26, 93, 92, 24, 24, 17, - /* 10 */ 90, 6, 26, 16, 92, 54, 24, 18, 90, 6, - /* 20 */ 26, 10, 92, 12, 24, 75, 86, 90, 6, 26, - /* 30 */ 13, 92, 75, 24, 20, 90, 6, 26, 101, 92, - /* 40 */ 56, 24, 27, 90, 6, 26, 100, 92, 21, 24, - /* 50 */ 23, 15, 30, 11, 1, 91, 22, 25, 9, 92, - /* 60 */ 7, 24, 3, 4, 5, 3, 4, 5, 3, 77, - /* 70 */ 4, 5, 3, 61, 23, 15, 60, 11, 80, 12, - /* 80 */ 2, 13, 68, 10, 29, 52, 55, 75, 31, 32, - /* 90 */ 8, 28, 5, 3, 51, 55, 72, 14, + /* 0 */ 81, 20, 96, 6, 28, 99, 98, 26, 26, 18, + /* 10 */ 96, 6, 28, 17, 98, 56, 26, 19, 96, 6, + /* 20 */ 28, 14, 98, 108, 26, 92, 96, 6, 28, 25, + /* 30 */ 98, 78, 26, 21, 96, 6, 28, 107, 98, 58, + /* 40 */ 26, 29, 96, 6, 28, 32, 98, 22, 26, 24, + /* 50 */ 16, 23, 11, 1, 14, 13, 24, 16, 31, 11, + /* 60 */ 3, 97, 13, 27, 8, 98, 82, 26, 7, 4, + /* 70 */ 5, 3, 4, 5, 3, 83, 4, 5, 3, 63, + /* 80 */ 33, 34, 62, 12, 2, 86, 13, 10, 12, 71, + /* 90 */ 10, 13, 78, 5, 3, 78, 9, 30, 75, 82, + /* 100 */ 54, 57, 53, 57, 15, }; static const fts5YYCODETYPE fts5yy_lookahead[] = { - /* 0 */ 16, 17, 18, 19, 20, 22, 22, 24, 24, 17, - /* 10 */ 18, 19, 20, 7, 22, 9, 24, 17, 18, 19, - /* 20 */ 20, 10, 22, 9, 24, 14, 17, 18, 19, 20, - /* 30 */ 9, 22, 14, 24, 17, 18, 19, 20, 26, 22, - /* 40 */ 9, 24, 17, 18, 19, 20, 26, 22, 21, 24, - /* 50 */ 6, 7, 13, 9, 10, 18, 21, 20, 5, 22, - /* 60 */ 5, 24, 3, 1, 2, 3, 1, 2, 3, 0, - /* 70 */ 1, 2, 3, 11, 6, 7, 11, 9, 5, 9, - /* 80 */ 10, 9, 11, 10, 12, 8, 9, 14, 24, 25, - /* 90 */ 23, 24, 2, 3, 8, 9, 9, 9, + /* 0 */ 17, 18, 19, 20, 21, 23, 23, 25, 25, 18, + /* 10 */ 19, 20, 21, 7, 23, 9, 25, 18, 19, 20, + /* 20 */ 21, 9, 23, 27, 25, 18, 19, 20, 21, 25, + /* 30 */ 23, 15, 25, 18, 19, 20, 21, 27, 23, 9, + /* 40 */ 25, 18, 19, 20, 21, 14, 23, 22, 25, 6, + /* 50 */ 7, 22, 9, 10, 9, 12, 6, 7, 13, 9, + /* 60 */ 3, 19, 12, 21, 5, 23, 28, 25, 5, 1, + /* 70 */ 2, 3, 1, 2, 3, 0, 1, 2, 3, 11, + /* 80 */ 25, 26, 11, 9, 10, 5, 12, 10, 9, 11, + /* 90 */ 10, 12, 15, 2, 3, 15, 24, 25, 9, 28, + /* 100 */ 8, 9, 8, 9, 9, 28, 28, 28, 28, 28, + /* 110 */ 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, + /* 120 */ 28, }; -#define fts5YY_SHIFT_USE_DFLT (98) -#define fts5YY_SHIFT_COUNT (32) +#define fts5YY_SHIFT_COUNT (34) #define fts5YY_SHIFT_MIN (0) -#define fts5YY_SHIFT_MAX (90) +#define fts5YY_SHIFT_MAX (95) static const unsigned char fts5yy_shift_ofst[] = { - /* 0 */ 44, 44, 44, 44, 44, 44, 68, 70, 72, 14, - /* 10 */ 21, 73, 11, 18, 18, 31, 31, 62, 65, 69, - /* 20 */ 90, 77, 86, 6, 39, 53, 55, 59, 39, 87, - /* 30 */ 88, 39, 71, + /* 0 */ 43, 43, 43, 43, 43, 43, 50, 74, 79, 45, + /* 10 */ 12, 80, 77, 12, 16, 16, 30, 30, 68, 71, + /* 20 */ 75, 91, 92, 94, 6, 31, 31, 59, 63, 57, + /* 30 */ 31, 89, 95, 31, 78, }; -#define fts5YY_REDUCE_USE_DFLT (-18) -#define fts5YY_REDUCE_COUNT (16) -#define fts5YY_REDUCE_MIN (-17) -#define fts5YY_REDUCE_MAX (67) +#define fts5YY_REDUCE_COUNT (17) +#define fts5YY_REDUCE_MIN (-18) +#define fts5YY_REDUCE_MAX (72) static const signed char fts5yy_reduce_ofst[] = { - /* 0 */ -16, -8, 0, 9, 17, 25, 37, -17, 64, -17, - /* 10 */ 67, 12, 12, 12, 20, 27, 35, + /* 0 */ -17, -9, -1, 7, 15, 23, 42, -18, -18, 55, + /* 10 */ 72, -4, -4, 4, -4, 10, 25, 29, }; static const fts5YYACTIONTYPE fts5yy_default[] = { - /* 0 */ 104, 104, 104, 104, 104, 104, 89, 104, 98, 104, - /* 10 */ 104, 103, 103, 103, 103, 104, 104, 104, 104, 104, - /* 20 */ 85, 104, 104, 104, 94, 104, 104, 84, 96, 104, - /* 30 */ 104, 97, 104, + /* 0 */ 80, 80, 80, 80, 80, 80, 95, 80, 80, 105, + /* 10 */ 80, 110, 110, 80, 110, 110, 80, 80, 80, 80, + /* 20 */ 80, 91, 80, 80, 80, 101, 100, 80, 80, 90, + /* 30 */ 103, 80, 80, 104, 80, }; /********** End of lemon-generated parsing tables *****************************/ @@ -185594,19 +190034,40 @@ static void sqlite3Fts5ParserTrace(FILE *TraceFILE, char *zTracePrompt){ } #endif /* NDEBUG */ -#ifndef NDEBUG +#if defined(fts5YYCOVERAGE) || !defined(NDEBUG) /* For tracing shifts, the names of all terminals and nonterminals ** are required. The following table supplies these names */ static const char *const fts5yyTokenName[] = { - "$", "OR", "AND", "NOT", - "TERM", "COLON", "MINUS", "LCP", - "RCP", "STRING", "LP", "RP", - "COMMA", "PLUS", "STAR", "error", - "input", "expr", "cnearset", "exprlist", - "colset", "colsetlist", "nearset", "nearphrases", - "phrase", "neardist_opt", "star_opt", + /* 0 */ "$", + /* 1 */ "OR", + /* 2 */ "AND", + /* 3 */ "NOT", + /* 4 */ "TERM", + /* 5 */ "COLON", + /* 6 */ "MINUS", + /* 7 */ "LCP", + /* 8 */ "RCP", + /* 9 */ "STRING", + /* 10 */ "LP", + /* 11 */ "RP", + /* 12 */ "CARET", + /* 13 */ "COMMA", + /* 14 */ "PLUS", + /* 15 */ "STAR", + /* 16 */ "error", + /* 17 */ "input", + /* 18 */ "expr", + /* 19 */ "cnearset", + /* 20 */ "exprlist", + /* 21 */ "colset", + /* 22 */ "colsetlist", + /* 23 */ "nearset", + /* 24 */ "nearphrases", + /* 25 */ "phrase", + /* 26 */ "neardist_opt", + /* 27 */ "star_opt", }; -#endif /* NDEBUG */ +#endif /* defined(fts5YYCOVERAGE) || !defined(NDEBUG) */ #ifndef NDEBUG /* For tracing reduce actions, the names of all rules are required. @@ -185630,15 +190091,16 @@ static const char *const fts5yyRuleName[] = { /* 15 */ "cnearset ::= nearset", /* 16 */ "cnearset ::= colset COLON nearset", /* 17 */ "nearset ::= phrase", - /* 18 */ "nearset ::= STRING LP nearphrases neardist_opt RP", - /* 19 */ "nearphrases ::= phrase", - /* 20 */ "nearphrases ::= nearphrases phrase", - /* 21 */ "neardist_opt ::=", - /* 22 */ "neardist_opt ::= COMMA STRING", - /* 23 */ "phrase ::= phrase PLUS STRING star_opt", - /* 24 */ "phrase ::= STRING star_opt", - /* 25 */ "star_opt ::= STAR", - /* 26 */ "star_opt ::=", + /* 18 */ "nearset ::= CARET phrase", + /* 19 */ "nearset ::= STRING LP nearphrases neardist_opt RP", + /* 20 */ "nearphrases ::= phrase", + /* 21 */ "nearphrases ::= nearphrases phrase", + /* 22 */ "neardist_opt ::=", + /* 23 */ "neardist_opt ::= COMMA STRING", + /* 24 */ "phrase ::= phrase PLUS STRING star_opt", + /* 25 */ "phrase ::= STRING star_opt", + /* 26 */ "star_opt ::= STAR", + /* 27 */ "star_opt ::=", }; #endif /* NDEBUG */ @@ -185759,33 +190221,33 @@ static void fts5yy_destructor( ** inside the C code. */ /********* Begin destructor definitions ***************************************/ - case 16: /* input */ + case 17: /* input */ { (void)pParse; } break; - case 17: /* expr */ - case 18: /* cnearset */ - case 19: /* exprlist */ + case 18: /* expr */ + case 19: /* cnearset */ + case 20: /* exprlist */ { - sqlite3Fts5ParseNodeFree((fts5yypminor->fts5yy24)); + sqlite3Fts5ParseNodeFree((fts5yypminor->fts5yy54)); } break; - case 20: /* colset */ - case 21: /* colsetlist */ + case 21: /* colset */ + case 22: /* colsetlist */ { - sqlite3_free((fts5yypminor->fts5yy11)); + sqlite3_free((fts5yypminor->fts5yy43)); } break; - case 22: /* nearset */ - case 23: /* nearphrases */ + case 23: /* nearset */ + case 24: /* nearphrases */ { - sqlite3Fts5ParseNearsetFree((fts5yypminor->fts5yy46)); + sqlite3Fts5ParseNearsetFree((fts5yypminor->fts5yy14)); } break; - case 24: /* phrase */ + case 25: /* phrase */ { - sqlite3Fts5ParsePhraseFree((fts5yypminor->fts5yy53)); + sqlite3Fts5ParsePhraseFree((fts5yypminor->fts5yy11)); } break; /********* End destructor definitions *****************************************/ @@ -185856,6 +190318,43 @@ static int sqlite3Fts5ParserStackPeak(void *p){ } #endif +/* This array of booleans keeps track of the parser statement +** coverage. The element fts5yycoverage[X][Y] is set when the parser +** is in state X and has a lookahead token Y. In a well-tested +** systems, every element of this matrix should end up being set. +*/ +#if defined(fts5YYCOVERAGE) +static unsigned char fts5yycoverage[fts5YYNSTATE][fts5YYNFTS5TOKEN]; +#endif + +/* +** Write into out a description of every state/lookahead combination that +** +** (1) has not been used by the parser, and +** (2) is not a syntax error. +** +** Return the number of missed state/lookahead combinations. +*/ +#if defined(fts5YYCOVERAGE) +static int sqlite3Fts5ParserCoverage(FILE *out){ + int stateno, iLookAhead, i; + int nMissed = 0; + for(stateno=0; statenofts5yytos->stateno; - if( stateno>=fts5YY_MIN_REDUCE ) return stateno; + if( stateno>fts5YY_MAX_SHIFT ) return stateno; assert( stateno <= fts5YY_SHIFT_COUNT ); +#if defined(fts5YYCOVERAGE) + fts5yycoverage[stateno][iLookAhead] = 1; +#endif do{ i = fts5yy_shift_ofst[stateno]; + assert( i>=0 ); + assert( i+fts5YYNFTS5TOKEN<=(int)sizeof(fts5yy_lookahead)/sizeof(fts5yy_lookahead[0]) ); assert( iLookAhead!=fts5YYNOCODE ); + assert( iLookAhead < fts5YYNFTS5TOKEN ); i += iLookAhead; - if( i<0 || i>=fts5YY_ACTTAB_COUNT || fts5yy_lookahead[i]!=iLookAhead ){ + if( fts5yy_lookahead[i]!=iLookAhead ){ #ifdef fts5YYFALLBACK fts5YYCODETYPE iFallback; /* Fallback token */ if( iLookAheadfts5yytos->major], + fprintf(fts5yyTraceFILE,"%s%s '%s', go to state %d\n", + fts5yyTracePrompt, zTag, fts5yyTokenName[fts5yypParser->fts5yytos->major], fts5yyNewState); }else{ - fprintf(fts5yyTraceFILE,"%sShift '%s'\n", - fts5yyTracePrompt,fts5yyTokenName[fts5yypParser->fts5yytos->major]); + fprintf(fts5yyTraceFILE,"%s%s '%s', pending reduce %d\n", + fts5yyTracePrompt, zTag, fts5yyTokenName[fts5yypParser->fts5yytos->major], + fts5yyNewState - fts5YY_MIN_REDUCE); } } } #else -# define fts5yyTraceShift(X,Y) +# define fts5yyTraceShift(X,Y,Z) #endif /* @@ -186029,7 +190534,7 @@ static void fts5yy_shift( fts5yytos->stateno = (fts5YYACTIONTYPE)fts5yyNewState; fts5yytos->major = (fts5YYCODETYPE)fts5yyMajor; fts5yytos->minor.fts5yy0 = fts5yyMinor; - fts5yyTraceShift(fts5yypParser, fts5yyNewState); + fts5yyTraceShift(fts5yypParser, fts5yyNewState, "Shift"); } /* The following table contains information about every rule that @@ -186039,33 +190544,34 @@ static const struct { fts5YYCODETYPE lhs; /* Symbol on the left-hand side of the rule */ signed char nrhs; /* Negative of the number of RHS symbols in the rule */ } fts5yyRuleInfo[] = { - { 16, -1 }, - { 20, -4 }, - { 20, -3 }, - { 20, -1 }, - { 20, -2 }, - { 21, -2 }, - { 21, -1 }, - { 17, -3 }, - { 17, -3 }, - { 17, -3 }, - { 17, -5 }, - { 17, -3 }, - { 17, -1 }, - { 19, -1 }, - { 19, -2 }, - { 18, -1 }, - { 18, -3 }, - { 22, -1 }, - { 22, -5 }, - { 23, -1 }, - { 23, -2 }, - { 25, 0 }, - { 25, -2 }, - { 24, -4 }, - { 24, -2 }, - { 26, -1 }, - { 26, 0 }, + { 17, -1 }, /* (0) input ::= expr */ + { 21, -4 }, /* (1) colset ::= MINUS LCP colsetlist RCP */ + { 21, -3 }, /* (2) colset ::= LCP colsetlist RCP */ + { 21, -1 }, /* (3) colset ::= STRING */ + { 21, -2 }, /* (4) colset ::= MINUS STRING */ + { 22, -2 }, /* (5) colsetlist ::= colsetlist STRING */ + { 22, -1 }, /* (6) colsetlist ::= STRING */ + { 18, -3 }, /* (7) expr ::= expr AND expr */ + { 18, -3 }, /* (8) expr ::= expr OR expr */ + { 18, -3 }, /* (9) expr ::= expr NOT expr */ + { 18, -5 }, /* (10) expr ::= colset COLON LP expr RP */ + { 18, -3 }, /* (11) expr ::= LP expr RP */ + { 18, -1 }, /* (12) expr ::= exprlist */ + { 20, -1 }, /* (13) exprlist ::= cnearset */ + { 20, -2 }, /* (14) exprlist ::= exprlist cnearset */ + { 19, -1 }, /* (15) cnearset ::= nearset */ + { 19, -3 }, /* (16) cnearset ::= colset COLON nearset */ + { 23, -1 }, /* (17) nearset ::= phrase */ + { 23, -2 }, /* (18) nearset ::= CARET phrase */ + { 23, -5 }, /* (19) nearset ::= STRING LP nearphrases neardist_opt RP */ + { 24, -1 }, /* (20) nearphrases ::= phrase */ + { 24, -2 }, /* (21) nearphrases ::= nearphrases phrase */ + { 26, 0 }, /* (22) neardist_opt ::= */ + { 26, -2 }, /* (23) neardist_opt ::= COMMA STRING */ + { 25, -4 }, /* (24) phrase ::= phrase PLUS STRING star_opt */ + { 25, -2 }, /* (25) phrase ::= STRING star_opt */ + { 27, -1 }, /* (26) star_opt ::= STAR */ + { 27, 0 }, /* (27) star_opt ::= */ }; static void fts5yy_accept(fts5yyParser*); /* Forward Declaration */ @@ -186073,22 +190579,38 @@ static void fts5yy_accept(fts5yyParser*); /* Forward Declaration */ /* ** Perform a reduce action and the shift that must immediately ** follow the reduce. +** +** The fts5yyLookahead and fts5yyLookaheadToken parameters provide reduce actions +** access to the lookahead token (if any). The fts5yyLookahead will be fts5YYNOCODE +** if the lookahead token has already been consumed. As this procedure is +** only called from one place, optimizing compilers will in-line it, which +** means that the extra parameters have no performance impact. */ static void fts5yy_reduce( fts5yyParser *fts5yypParser, /* The parser */ - unsigned int fts5yyruleno /* Number of the rule by which to reduce */ + unsigned int fts5yyruleno, /* Number of the rule by which to reduce */ + int fts5yyLookahead, /* Lookahead token, or fts5YYNOCODE if none */ + sqlite3Fts5ParserFTS5TOKENTYPE fts5yyLookaheadToken /* Value of the lookahead token */ ){ int fts5yygoto; /* The next state */ int fts5yyact; /* The next action */ fts5yyStackEntry *fts5yymsp; /* The top of the parser's stack */ int fts5yysize; /* Amount to pop the stack */ sqlite3Fts5ParserARG_FETCH; + (void)fts5yyLookahead; + (void)fts5yyLookaheadToken; fts5yymsp = fts5yypParser->fts5yytos; #ifndef NDEBUG if( fts5yyTraceFILE && fts5yyruleno<(int)(sizeof(fts5yyRuleName)/sizeof(fts5yyRuleName[0])) ){ fts5yysize = fts5yyRuleInfo[fts5yyruleno].nrhs; - fprintf(fts5yyTraceFILE, "%sReduce [%s], go to state %d.\n", fts5yyTracePrompt, - fts5yyRuleName[fts5yyruleno], fts5yymsp[fts5yysize].stateno); + if( fts5yysize ){ + fprintf(fts5yyTraceFILE, "%sReduce %d [%s], go to state %d.\n", + fts5yyTracePrompt, + fts5yyruleno, fts5yyRuleName[fts5yyruleno], fts5yymsp[fts5yysize].stateno); + }else{ + fprintf(fts5yyTraceFILE, "%sReduce %d [%s].\n", + fts5yyTracePrompt, fts5yyruleno, fts5yyRuleName[fts5yyruleno]); + } } #endif /* NDEBUG */ @@ -186130,137 +190652,143 @@ static void fts5yy_reduce( /********** Begin reduce actions **********************************************/ fts5YYMINORTYPE fts5yylhsminor; case 0: /* input ::= expr */ -{ sqlite3Fts5ParseFinished(pParse, fts5yymsp[0].minor.fts5yy24); } +{ sqlite3Fts5ParseFinished(pParse, fts5yymsp[0].minor.fts5yy54); } break; case 1: /* colset ::= MINUS LCP colsetlist RCP */ { - fts5yymsp[-3].minor.fts5yy11 = sqlite3Fts5ParseColsetInvert(pParse, fts5yymsp[-1].minor.fts5yy11); + fts5yymsp[-3].minor.fts5yy43 = sqlite3Fts5ParseColsetInvert(pParse, fts5yymsp[-1].minor.fts5yy43); } break; case 2: /* colset ::= LCP colsetlist RCP */ -{ fts5yymsp[-2].minor.fts5yy11 = fts5yymsp[-1].minor.fts5yy11; } +{ fts5yymsp[-2].minor.fts5yy43 = fts5yymsp[-1].minor.fts5yy43; } break; case 3: /* colset ::= STRING */ { - fts5yylhsminor.fts5yy11 = sqlite3Fts5ParseColset(pParse, 0, &fts5yymsp[0].minor.fts5yy0); + fts5yylhsminor.fts5yy43 = sqlite3Fts5ParseColset(pParse, 0, &fts5yymsp[0].minor.fts5yy0); } - fts5yymsp[0].minor.fts5yy11 = fts5yylhsminor.fts5yy11; + fts5yymsp[0].minor.fts5yy43 = fts5yylhsminor.fts5yy43; break; case 4: /* colset ::= MINUS STRING */ { - fts5yymsp[-1].minor.fts5yy11 = sqlite3Fts5ParseColset(pParse, 0, &fts5yymsp[0].minor.fts5yy0); - fts5yymsp[-1].minor.fts5yy11 = sqlite3Fts5ParseColsetInvert(pParse, fts5yymsp[-1].minor.fts5yy11); + fts5yymsp[-1].minor.fts5yy43 = sqlite3Fts5ParseColset(pParse, 0, &fts5yymsp[0].minor.fts5yy0); + fts5yymsp[-1].minor.fts5yy43 = sqlite3Fts5ParseColsetInvert(pParse, fts5yymsp[-1].minor.fts5yy43); } break; case 5: /* colsetlist ::= colsetlist STRING */ { - fts5yylhsminor.fts5yy11 = sqlite3Fts5ParseColset(pParse, fts5yymsp[-1].minor.fts5yy11, &fts5yymsp[0].minor.fts5yy0); } - fts5yymsp[-1].minor.fts5yy11 = fts5yylhsminor.fts5yy11; + fts5yylhsminor.fts5yy43 = sqlite3Fts5ParseColset(pParse, fts5yymsp[-1].minor.fts5yy43, &fts5yymsp[0].minor.fts5yy0); } + fts5yymsp[-1].minor.fts5yy43 = fts5yylhsminor.fts5yy43; break; case 6: /* colsetlist ::= STRING */ { - fts5yylhsminor.fts5yy11 = sqlite3Fts5ParseColset(pParse, 0, &fts5yymsp[0].minor.fts5yy0); + fts5yylhsminor.fts5yy43 = sqlite3Fts5ParseColset(pParse, 0, &fts5yymsp[0].minor.fts5yy0); } - fts5yymsp[0].minor.fts5yy11 = fts5yylhsminor.fts5yy11; + fts5yymsp[0].minor.fts5yy43 = fts5yylhsminor.fts5yy43; break; case 7: /* expr ::= expr AND expr */ { - fts5yylhsminor.fts5yy24 = sqlite3Fts5ParseNode(pParse, FTS5_AND, fts5yymsp[-2].minor.fts5yy24, fts5yymsp[0].minor.fts5yy24, 0); + fts5yylhsminor.fts5yy54 = sqlite3Fts5ParseNode(pParse, FTS5_AND, fts5yymsp[-2].minor.fts5yy54, fts5yymsp[0].minor.fts5yy54, 0); } - fts5yymsp[-2].minor.fts5yy24 = fts5yylhsminor.fts5yy24; + fts5yymsp[-2].minor.fts5yy54 = fts5yylhsminor.fts5yy54; break; case 8: /* expr ::= expr OR expr */ { - fts5yylhsminor.fts5yy24 = sqlite3Fts5ParseNode(pParse, FTS5_OR, fts5yymsp[-2].minor.fts5yy24, fts5yymsp[0].minor.fts5yy24, 0); + fts5yylhsminor.fts5yy54 = sqlite3Fts5ParseNode(pParse, FTS5_OR, fts5yymsp[-2].minor.fts5yy54, fts5yymsp[0].minor.fts5yy54, 0); } - fts5yymsp[-2].minor.fts5yy24 = fts5yylhsminor.fts5yy24; + fts5yymsp[-2].minor.fts5yy54 = fts5yylhsminor.fts5yy54; break; case 9: /* expr ::= expr NOT expr */ { - fts5yylhsminor.fts5yy24 = sqlite3Fts5ParseNode(pParse, FTS5_NOT, fts5yymsp[-2].minor.fts5yy24, fts5yymsp[0].minor.fts5yy24, 0); + fts5yylhsminor.fts5yy54 = sqlite3Fts5ParseNode(pParse, FTS5_NOT, fts5yymsp[-2].minor.fts5yy54, fts5yymsp[0].minor.fts5yy54, 0); } - fts5yymsp[-2].minor.fts5yy24 = fts5yylhsminor.fts5yy24; + fts5yymsp[-2].minor.fts5yy54 = fts5yylhsminor.fts5yy54; break; case 10: /* expr ::= colset COLON LP expr RP */ { - sqlite3Fts5ParseSetColset(pParse, fts5yymsp[-1].minor.fts5yy24, fts5yymsp[-4].minor.fts5yy11); - fts5yylhsminor.fts5yy24 = fts5yymsp[-1].minor.fts5yy24; + sqlite3Fts5ParseSetColset(pParse, fts5yymsp[-1].minor.fts5yy54, fts5yymsp[-4].minor.fts5yy43); + fts5yylhsminor.fts5yy54 = fts5yymsp[-1].minor.fts5yy54; } - fts5yymsp[-4].minor.fts5yy24 = fts5yylhsminor.fts5yy24; + fts5yymsp[-4].minor.fts5yy54 = fts5yylhsminor.fts5yy54; break; case 11: /* expr ::= LP expr RP */ -{fts5yymsp[-2].minor.fts5yy24 = fts5yymsp[-1].minor.fts5yy24;} +{fts5yymsp[-2].minor.fts5yy54 = fts5yymsp[-1].minor.fts5yy54;} break; case 12: /* expr ::= exprlist */ case 13: /* exprlist ::= cnearset */ fts5yytestcase(fts5yyruleno==13); -{fts5yylhsminor.fts5yy24 = fts5yymsp[0].minor.fts5yy24;} - fts5yymsp[0].minor.fts5yy24 = fts5yylhsminor.fts5yy24; +{fts5yylhsminor.fts5yy54 = fts5yymsp[0].minor.fts5yy54;} + fts5yymsp[0].minor.fts5yy54 = fts5yylhsminor.fts5yy54; break; case 14: /* exprlist ::= exprlist cnearset */ { - fts5yylhsminor.fts5yy24 = sqlite3Fts5ParseImplicitAnd(pParse, fts5yymsp[-1].minor.fts5yy24, fts5yymsp[0].minor.fts5yy24); + fts5yylhsminor.fts5yy54 = sqlite3Fts5ParseImplicitAnd(pParse, fts5yymsp[-1].minor.fts5yy54, fts5yymsp[0].minor.fts5yy54); } - fts5yymsp[-1].minor.fts5yy24 = fts5yylhsminor.fts5yy24; + fts5yymsp[-1].minor.fts5yy54 = fts5yylhsminor.fts5yy54; break; case 15: /* cnearset ::= nearset */ { - fts5yylhsminor.fts5yy24 = sqlite3Fts5ParseNode(pParse, FTS5_STRING, 0, 0, fts5yymsp[0].minor.fts5yy46); + fts5yylhsminor.fts5yy54 = sqlite3Fts5ParseNode(pParse, FTS5_STRING, 0, 0, fts5yymsp[0].minor.fts5yy14); } - fts5yymsp[0].minor.fts5yy24 = fts5yylhsminor.fts5yy24; + fts5yymsp[0].minor.fts5yy54 = fts5yylhsminor.fts5yy54; break; case 16: /* cnearset ::= colset COLON nearset */ { - fts5yylhsminor.fts5yy24 = sqlite3Fts5ParseNode(pParse, FTS5_STRING, 0, 0, fts5yymsp[0].minor.fts5yy46); - sqlite3Fts5ParseSetColset(pParse, fts5yylhsminor.fts5yy24, fts5yymsp[-2].minor.fts5yy11); + fts5yylhsminor.fts5yy54 = sqlite3Fts5ParseNode(pParse, FTS5_STRING, 0, 0, fts5yymsp[0].minor.fts5yy14); + sqlite3Fts5ParseSetColset(pParse, fts5yylhsminor.fts5yy54, fts5yymsp[-2].minor.fts5yy43); } - fts5yymsp[-2].minor.fts5yy24 = fts5yylhsminor.fts5yy24; + fts5yymsp[-2].minor.fts5yy54 = fts5yylhsminor.fts5yy54; break; case 17: /* nearset ::= phrase */ -{ fts5yylhsminor.fts5yy46 = sqlite3Fts5ParseNearset(pParse, 0, fts5yymsp[0].minor.fts5yy53); } - fts5yymsp[0].minor.fts5yy46 = fts5yylhsminor.fts5yy46; +{ fts5yylhsminor.fts5yy14 = sqlite3Fts5ParseNearset(pParse, 0, fts5yymsp[0].minor.fts5yy11); } + fts5yymsp[0].minor.fts5yy14 = fts5yylhsminor.fts5yy14; break; - case 18: /* nearset ::= STRING LP nearphrases neardist_opt RP */ + case 18: /* nearset ::= CARET phrase */ +{ + sqlite3Fts5ParseSetCaret(fts5yymsp[0].minor.fts5yy11); + fts5yymsp[-1].minor.fts5yy14 = sqlite3Fts5ParseNearset(pParse, 0, fts5yymsp[0].minor.fts5yy11); +} + break; + case 19: /* nearset ::= STRING LP nearphrases neardist_opt RP */ { sqlite3Fts5ParseNear(pParse, &fts5yymsp[-4].minor.fts5yy0); - sqlite3Fts5ParseSetDistance(pParse, fts5yymsp[-2].minor.fts5yy46, &fts5yymsp[-1].minor.fts5yy0); - fts5yylhsminor.fts5yy46 = fts5yymsp[-2].minor.fts5yy46; + sqlite3Fts5ParseSetDistance(pParse, fts5yymsp[-2].minor.fts5yy14, &fts5yymsp[-1].minor.fts5yy0); + fts5yylhsminor.fts5yy14 = fts5yymsp[-2].minor.fts5yy14; } - fts5yymsp[-4].minor.fts5yy46 = fts5yylhsminor.fts5yy46; + fts5yymsp[-4].minor.fts5yy14 = fts5yylhsminor.fts5yy14; break; - case 19: /* nearphrases ::= phrase */ + case 20: /* nearphrases ::= phrase */ { - fts5yylhsminor.fts5yy46 = sqlite3Fts5ParseNearset(pParse, 0, fts5yymsp[0].minor.fts5yy53); + fts5yylhsminor.fts5yy14 = sqlite3Fts5ParseNearset(pParse, 0, fts5yymsp[0].minor.fts5yy11); } - fts5yymsp[0].minor.fts5yy46 = fts5yylhsminor.fts5yy46; + fts5yymsp[0].minor.fts5yy14 = fts5yylhsminor.fts5yy14; break; - case 20: /* nearphrases ::= nearphrases phrase */ + case 21: /* nearphrases ::= nearphrases phrase */ { - fts5yylhsminor.fts5yy46 = sqlite3Fts5ParseNearset(pParse, fts5yymsp[-1].minor.fts5yy46, fts5yymsp[0].minor.fts5yy53); + fts5yylhsminor.fts5yy14 = sqlite3Fts5ParseNearset(pParse, fts5yymsp[-1].minor.fts5yy14, fts5yymsp[0].minor.fts5yy11); } - fts5yymsp[-1].minor.fts5yy46 = fts5yylhsminor.fts5yy46; + fts5yymsp[-1].minor.fts5yy14 = fts5yylhsminor.fts5yy14; break; - case 21: /* neardist_opt ::= */ + case 22: /* neardist_opt ::= */ { fts5yymsp[1].minor.fts5yy0.p = 0; fts5yymsp[1].minor.fts5yy0.n = 0; } break; - case 22: /* neardist_opt ::= COMMA STRING */ + case 23: /* neardist_opt ::= COMMA STRING */ { fts5yymsp[-1].minor.fts5yy0 = fts5yymsp[0].minor.fts5yy0; } break; - case 23: /* phrase ::= phrase PLUS STRING star_opt */ + case 24: /* phrase ::= phrase PLUS STRING star_opt */ { - fts5yylhsminor.fts5yy53 = sqlite3Fts5ParseTerm(pParse, fts5yymsp[-3].minor.fts5yy53, &fts5yymsp[-1].minor.fts5yy0, fts5yymsp[0].minor.fts5yy4); + fts5yylhsminor.fts5yy11 = sqlite3Fts5ParseTerm(pParse, fts5yymsp[-3].minor.fts5yy11, &fts5yymsp[-1].minor.fts5yy0, fts5yymsp[0].minor.fts5yy4); } - fts5yymsp[-3].minor.fts5yy53 = fts5yylhsminor.fts5yy53; + fts5yymsp[-3].minor.fts5yy11 = fts5yylhsminor.fts5yy11; break; - case 24: /* phrase ::= STRING star_opt */ + case 25: /* phrase ::= STRING star_opt */ { - fts5yylhsminor.fts5yy53 = sqlite3Fts5ParseTerm(pParse, 0, &fts5yymsp[-1].minor.fts5yy0, fts5yymsp[0].minor.fts5yy4); + fts5yylhsminor.fts5yy11 = sqlite3Fts5ParseTerm(pParse, 0, &fts5yymsp[-1].minor.fts5yy0, fts5yymsp[0].minor.fts5yy4); } - fts5yymsp[-1].minor.fts5yy53 = fts5yylhsminor.fts5yy53; + fts5yymsp[-1].minor.fts5yy11 = fts5yylhsminor.fts5yy11; break; - case 25: /* star_opt ::= STAR */ + case 26: /* star_opt ::= STAR */ { fts5yymsp[0].minor.fts5yy4 = 1; } break; - case 26: /* star_opt ::= */ + case 27: /* star_opt ::= */ { fts5yymsp[1].minor.fts5yy4 = 0; } break; default: @@ -186279,16 +190807,11 @@ static void fts5yy_reduce( /* It is not possible for a REDUCE to be followed by an error */ assert( fts5yyact!=fts5YY_ERROR_ACTION ); - if( fts5yyact==fts5YY_ACCEPT_ACTION ){ - fts5yypParser->fts5yytos += fts5yysize; - fts5yy_accept(fts5yypParser); - }else{ - fts5yymsp += fts5yysize+1; - fts5yypParser->fts5yytos = fts5yymsp; - fts5yymsp->stateno = (fts5YYACTIONTYPE)fts5yyact; - fts5yymsp->major = (fts5YYCODETYPE)fts5yygoto; - fts5yyTraceShift(fts5yypParser, fts5yyact); - } + fts5yymsp += fts5yysize+1; + fts5yypParser->fts5yytos = fts5yymsp; + fts5yymsp->stateno = (fts5YYACTIONTYPE)fts5yyact; + fts5yymsp->major = (fts5YYCODETYPE)fts5yygoto; + fts5yyTraceShift(fts5yypParser, fts5yyact, "... then shift"); } /* @@ -186400,20 +190923,31 @@ static void sqlite3Fts5Parser( #ifndef NDEBUG if( fts5yyTraceFILE ){ - fprintf(fts5yyTraceFILE,"%sInput '%s'\n",fts5yyTracePrompt,fts5yyTokenName[fts5yymajor]); + int stateno = fts5yypParser->fts5yytos->stateno; + if( stateno < fts5YY_MIN_REDUCE ){ + fprintf(fts5yyTraceFILE,"%sInput '%s' in state %d\n", + fts5yyTracePrompt,fts5yyTokenName[fts5yymajor],stateno); + }else{ + fprintf(fts5yyTraceFILE,"%sInput '%s' with pending reduce %d\n", + fts5yyTracePrompt,fts5yyTokenName[fts5yymajor],stateno-fts5YY_MIN_REDUCE); + } } #endif do{ fts5yyact = fts5yy_find_shift_action(fts5yypParser,(fts5YYCODETYPE)fts5yymajor); - if( fts5yyact <= fts5YY_MAX_SHIFTREDUCE ){ + if( fts5yyact >= fts5YY_MIN_REDUCE ){ + fts5yy_reduce(fts5yypParser,fts5yyact-fts5YY_MIN_REDUCE,fts5yymajor,fts5yyminor); + }else if( fts5yyact <= fts5YY_MAX_SHIFTREDUCE ){ fts5yy_shift(fts5yypParser,fts5yyact,fts5yymajor,fts5yyminor); #ifndef fts5YYNOERRORRECOVERY fts5yypParser->fts5yyerrcnt--; #endif fts5yymajor = fts5YYNOCODE; - }else if( fts5yyact <= fts5YY_MAX_REDUCE ){ - fts5yy_reduce(fts5yypParser,fts5yyact-fts5YY_MIN_REDUCE); + }else if( fts5yyact==fts5YY_ACCEPT_ACTION ){ + fts5yypParser->fts5yytos--; + fts5yy_accept(fts5yypParser); + return; }else{ assert( fts5yyact == fts5YY_ERROR_ACTION ); fts5yyminorunion.fts5yy0 = fts5yyminor; @@ -186892,6 +191426,16 @@ static int fts5SnippetScore( return rc; } +/* +** Return the value in pVal interpreted as utf-8 text. Except, if pVal +** contains a NULL value, return a pointer to a static string zero +** bytes in length instead of a NULL pointer. +*/ +static const char *fts5ValueToText(sqlite3_value *pVal){ + const char *zRet = (const char*)sqlite3_value_text(pVal); + return zRet ? zRet : ""; +} + /* ** Implementation of snippet() function. */ @@ -186927,9 +191471,9 @@ static void fts5SnippetFunction( nCol = pApi->xColumnCount(pFts); memset(&ctx, 0, sizeof(HighlightContext)); iCol = sqlite3_value_int(apVal[0]); - ctx.zOpen = (const char*)sqlite3_value_text(apVal[1]); - ctx.zClose = (const char*)sqlite3_value_text(apVal[2]); - zEllips = (const char*)sqlite3_value_text(apVal[3]); + ctx.zOpen = fts5ValueToText(apVal[1]); + ctx.zClose = fts5ValueToText(apVal[2]); + zEllips = fts5ValueToText(apVal[3]); nToken = sqlite3_value_int(apVal[4]); iBestCol = (iCol>=0 ? iCol : 0); @@ -188683,7 +193227,8 @@ struct Fts5ExprNode { ** or term prefix. */ struct Fts5ExprTerm { - int bPrefix; /* True for a prefix term */ + u8 bPrefix; /* True for a prefix term */ + u8 bFirst; /* True if token must be first in column */ char *zTerm; /* nul-terminated term */ Fts5IndexIter *pIter; /* Iterator for this term */ Fts5ExprTerm *pSynonym; /* Pointer to first in list of synonyms */ @@ -188764,6 +193309,7 @@ static int fts5ExprGetToken( case '+': tok = FTS5_PLUS; break; case '*': tok = FTS5_STAR; break; case '-': tok = FTS5_MINUS; break; + case '^': tok = FTS5_CARET; break; case '\0': tok = FTS5_EOF; break; case '"': { @@ -189023,6 +193569,7 @@ static int fts5ExprPhraseIsMatch( Fts5PoslistReader *aIter = aStatic; int i; int rc = SQLITE_OK; + int bFirst = pPhrase->aTerm[0].bFirst; fts5BufferZero(&pPhrase->poslist); @@ -189077,8 +193624,10 @@ static int fts5ExprPhraseIsMatch( }while( bMatch==0 ); /* Append position iPos to the output */ - rc = sqlite3Fts5PoslistWriterAppend(&pPhrase->poslist, &writer, iPos); - if( rc!=SQLITE_OK ) goto ismatch_out; + if( bFirst==0 || FTS5_POS2OFFSET(iPos)==0 ){ + rc = sqlite3Fts5PoslistWriterAppend(&pPhrase->poslist, &writer, iPos); + if( rc!=SQLITE_OK ) goto ismatch_out; + } for(i=0; inTerm; i++){ if( sqlite3Fts5PoslistReaderNext(&aIter[i]) ) goto ismatch_out; @@ -189332,7 +193881,9 @@ static int fts5ExprNearTest( ** phrase is not a match, break out of the loop early. */ for(i=0; rc==SQLITE_OK && inPhrase; i++){ Fts5ExprPhrase *pPhrase = pNear->apPhrase[i]; - if( pPhrase->nTerm>1 || pPhrase->aTerm[0].pSynonym || pNear->pColset ){ + if( pPhrase->nTerm>1 || pPhrase->aTerm[0].pSynonym + || pNear->pColset || pPhrase->aTerm[0].bFirst + ){ int bMatch = 0; rc = fts5ExprPhraseIsMatch(pNode, pPhrase, &bMatch); if( bMatch==0 ) break; @@ -189513,6 +194064,7 @@ static int fts5ExprNodeTest_STRING( assert( pNear->nPhrase>1 || pNear->apPhrase[0]->nTerm>1 || pNear->apPhrase[0]->aTerm[0].pSynonym + || pNear->apPhrase[0]->aTerm[0].bFirst ); /* Initialize iLast, the "lastest" rowid any iterator points to. If the @@ -190037,6 +194589,16 @@ static void fts5ExprPhraseFree(Fts5ExprPhrase *pPhrase){ } } +/* +** Set the "bFirst" flag on the first token of the phrase passed as the +** only argument. +*/ +static void sqlite3Fts5ParseSetCaret(Fts5ExprPhrase *pPhrase){ + if( pPhrase && pPhrase->nTerm ){ + pPhrase->aTerm[0].bFirst = 1; + } +} + /* ** If argument pNear is NULL, then a new Fts5ExprNearset object is allocated ** and populated with pPhrase. Or, if pNear is not NULL, phrase pPhrase is @@ -190254,7 +194816,7 @@ static Fts5ExprPhrase *sqlite3Fts5ParseTerm( ** no token characters at all. (e.g ... MATCH '""'). */ sCtx.pPhrase = sqlite3Fts5MallocZero(&pParse->rc, sizeof(Fts5ExprPhrase)); }else if( sCtx.pPhrase->nTerm ){ - sCtx.pPhrase->aTerm[sCtx.pPhrase->nTerm-1].bPrefix = bPrefix; + sCtx.pPhrase->aTerm[sCtx.pPhrase->nTerm-1].bPrefix = (u8)bPrefix; } pParse->apPhrase[pParse->nPhrase-1] = sCtx.pPhrase; } @@ -190315,6 +194877,7 @@ static int sqlite3Fts5ExprClonePhrase( } if( rc==SQLITE_OK ){ sCtx.pPhrase->aTerm[i].bPrefix = pOrig->aTerm[i].bPrefix; + sCtx.pPhrase->aTerm[i].bFirst = pOrig->aTerm[i].bFirst; } } }else{ @@ -190333,7 +194896,10 @@ static int sqlite3Fts5ExprClonePhrase( pNew->pRoot->pNear->nPhrase = 1; sCtx.pPhrase->pNode = pNew->pRoot; - if( pOrig->nTerm==1 && pOrig->aTerm[0].pSynonym==0 ){ + if( pOrig->nTerm==1 + && pOrig->aTerm[0].pSynonym==0 + && pOrig->aTerm[0].bFirst==0 + ){ pNew->pRoot->eType = FTS5_TERM; pNew->pRoot->xNext = fts5ExprNodeNext_TERM; }else{ @@ -190607,6 +195173,7 @@ static void fts5ExprAssignXNext(Fts5ExprNode *pNode){ Fts5ExprNearset *pNear = pNode->pNear; if( pNear->nPhrase==1 && pNear->apPhrase[0]->nTerm==1 && pNear->apPhrase[0]->aTerm[0].pSynonym==0 + && pNear->apPhrase[0]->aTerm[0].bFirst==0 ){ pNode->eType = FTS5_TERM; pNode->xNext = fts5ExprNodeNext_TERM; @@ -190693,20 +195260,23 @@ static Fts5ExprNode *sqlite3Fts5ParseNode( } } - if( pParse->pConfig->eDetail!=FTS5_DETAIL_FULL - && (pNear->nPhrase!=1 || pNear->apPhrase[0]->nTerm>1) - ){ - assert( pParse->rc==SQLITE_OK ); - pParse->rc = SQLITE_ERROR; - assert( pParse->zErr==0 ); - pParse->zErr = sqlite3_mprintf( - "fts5: %s queries are not supported (detail!=full)", - pNear->nPhrase==1 ? "phrase": "NEAR" - ); - sqlite3_free(pRet); - pRet = 0; + if( pParse->pConfig->eDetail!=FTS5_DETAIL_FULL ){ + Fts5ExprPhrase *pPhrase = pNear->apPhrase[0]; + if( pNear->nPhrase!=1 + || pPhrase->nTerm>1 + || (pPhrase->nTerm>0 && pPhrase->aTerm[0].bFirst) + ){ + assert( pParse->rc==SQLITE_OK ); + pParse->rc = SQLITE_ERROR; + assert( pParse->zErr==0 ); + pParse->zErr = sqlite3_mprintf( + "fts5: %s queries are not supported (detail!=full)", + pNear->nPhrase==1 ? "phrase": "NEAR" + ); + sqlite3_free(pRet); + pRet = 0; + } } - }else{ fts5ExprAddChildren(pRet, pLeft); fts5ExprAddChildren(pRet, pRight); @@ -192709,6 +197279,7 @@ static void fts5DataWrite(Fts5Index *p, i64 iRowid, const u8 *pData, int nData){ sqlite3_bind_blob(p->pWriter, 2, pData, nData, SQLITE_STATIC); sqlite3_step(p->pWriter); p->rc = sqlite3_reset(p->pWriter); + sqlite3_bind_null(p->pWriter, 2); } /* @@ -194337,6 +198908,7 @@ static void fts5SegIterSeekInit( bDlidx = (val & 0x0001); } p->rc = sqlite3_reset(pIdxSelect); + sqlite3_bind_null(pIdxSelect, 2); if( iPgpgnoFirst ){ iPg = pSeg->pgnoFirst; @@ -195549,6 +200121,7 @@ static int fts5AllocateSegid(Fts5Index *p, Fts5Structure *pStruct){ sqlite3_bind_blob(pIdxSelect, 2, aBlob, 2, SQLITE_STATIC); assert( sqlite3_step(pIdxSelect)!=SQLITE_ROW ); p->rc = sqlite3_reset(pIdxSelect); + sqlite3_bind_null(pIdxSelect, 2); } } #endif @@ -195675,6 +200248,7 @@ static void fts5WriteFlushBtree(Fts5Index *p, Fts5SegWriter *pWriter){ sqlite3_bind_int64(p->pIdxWriter, 3, bFlag + ((i64)pWriter->iBtPage<<1)); sqlite3_step(p->pIdxWriter); p->rc = sqlite3_reset(p->pIdxWriter); + sqlite3_bind_null(p->pIdxWriter, 2); } pWriter->iBtPage = 0; } @@ -196860,7 +201434,13 @@ static void fts5MergePrefixLists( Fts5Buffer out = {0, 0, 0}; Fts5Buffer tmp = {0, 0, 0}; - if( sqlite3Fts5BufferSize(&p->rc, &out, p1->n + p2->n) ) return; + /* The maximum size of the output is equal to the sum of the two + ** input sizes + 1 varint (9 bytes). The extra varint is because if the + ** first rowid in one input is a large negative number, and the first in + ** the other a non-negative number, the delta for the non-negative + ** number will be larger on disk than the literal integer value + ** was. */ + if( sqlite3Fts5BufferSize(&p->rc, &out, p1->n + p2->n + 9) ) return; fts5DoclistIterInit(p1, &i1); fts5DoclistIterInit(p2, &i2); @@ -196954,6 +201534,7 @@ static void fts5MergePrefixLists( fts5MergeAppendDocid(&out, iLastRowid, i2.iRowid); fts5BufferSafeAppendBlob(&out, i2.aPoslist, i2.aEof - i2.aPoslist); } + assert( out.n<=(p1->n+p2->n+9) ); fts5BufferSet(&p->rc, p1, out.n, out.p); fts5BufferFree(&tmp); @@ -198981,6 +203562,12 @@ static int fts5BestIndexMethod(sqlite3_vtab *pVTab, sqlite3_index_info *pInfo){ aColMap[1] = nCol; aColMap[2] = nCol+1; + assert( SQLITE_INDEX_CONSTRAINT_EQnConstraint; i++){ struct sqlite3_index_constraint *p = &pInfo->aConstraint[i]; @@ -198999,11 +203586,11 @@ static int fts5BestIndexMethod(sqlite3_vtab *pVTab, sqlite3_index_info *pInfo){ pInfo->estimatedCost = 1e50; return SQLITE_OK; } - }else{ + }else if( p->op<=SQLITE_INDEX_CONSTRAINT_MATCH ){ int j; for(j=1; jiCol] && p->op & pC->op && p->usable ){ + if( iCol==aColMap[pC->iCol] && (p->op & pC->op) && p->usable ){ pC->iConsIndex = i; idxFlags |= pC->fts5op; } @@ -201075,7 +205662,7 @@ static void fts5SourceIdFunc( ){ assert( nArg==0 ); UNUSED_PARAM2(nArg, apUnused); - sqlite3_result_text(pCtx, "fts5: 2017-10-24 18:55:49 1a584e499906b5c87ec7d43d4abce641fdf017c42125b083109bc77c4de48827", -1, SQLITE_TRANSIENT); + sqlite3_result_text(pCtx, "fts5: 2018-04-10 17:39:29 4bb2294022060e61de7da5c227a69ccd846ba330e31626ebcd59a94efd148b3b", -1, SQLITE_TRANSIENT); } static int fts5Init(sqlite3 *db){ @@ -201651,6 +206238,7 @@ static int fts5StorageInsertDocsize( sqlite3_bind_blob(pReplace, 2, pBuf->p, pBuf->n, SQLITE_STATIC); sqlite3_step(pReplace); rc = sqlite3_reset(pReplace); + sqlite3_bind_null(pReplace, 2); } } return rc; @@ -202311,6 +206899,7 @@ static int sqlite3Fts5StorageConfigValue( } sqlite3_step(pReplace); rc = sqlite3_reset(pReplace); + sqlite3_bind_null(pReplace, 1); } if( rc==SQLITE_OK && pVal ){ int iNew = p->pConfig->iCookie + 1; @@ -205343,9 +209932,9 @@ SQLITE_API int sqlite3_stmt_init( #endif /* !defined(SQLITE_CORE) || defined(SQLITE_ENABLE_STMTVTAB) */ /************** End of stmt.c ************************************************/ -#if __LINE__!=205346 +#if __LINE__!=209935 #undef SQLITE_SOURCE_ID -#define SQLITE_SOURCE_ID "2017-10-24 18:55:49 1a584e499906b5c87ec7d43d4abce641fdf017c42125b083109bc77c4de4alt2" +#define SQLITE_SOURCE_ID "2018-04-10 17:39:29 4bb2294022060e61de7da5c227a69ccd846ba330e31626ebcd59a94efd14alt2" #endif /* Return the source-id for this library */ SQLITE_API const char *sqlite3_sourceid(void){ return SQLITE_SOURCE_ID; } diff --git a/submodules/externals/sqlite3/sqlite3.h b/submodules/externals/sqlite3/sqlite3.h index 5f28e036b..0ba2852d7 100644 --- a/submodules/externals/sqlite3/sqlite3.h +++ b/submodules/externals/sqlite3/sqlite3.h @@ -123,9 +123,9 @@ extern "C" { ** [sqlite3_libversion_number()], [sqlite3_sourceid()], ** [sqlite_version()] and [sqlite_source_id()]. */ -#define SQLITE_VERSION "3.21.0" -#define SQLITE_VERSION_NUMBER 3021000 -#define SQLITE_SOURCE_ID "2017-10-24 18:55:49 1a584e499906b5c87ec7d43d4abce641fdf017c42125b083109bc77c4de48827" +#define SQLITE_VERSION "3.23.1" +#define SQLITE_VERSION_NUMBER 3023001 +#define SQLITE_SOURCE_ID "2018-04-10 17:39:29 4bb2294022060e61de7da5c227a69ccd846ba330e31626ebcd59a94efd148b3b" /* ** CAPI3REF: Run-Time Library Version Numbers @@ -470,6 +470,8 @@ SQLITE_API int sqlite3_exec( ** the most recent error can be obtained using ** [sqlite3_extended_errcode()]. */ +#define SQLITE_ERROR_MISSING_COLLSEQ (SQLITE_ERROR | (1<<8)) +#define SQLITE_ERROR_RETRY (SQLITE_ERROR | (2<<8)) #define SQLITE_IOERR_READ (SQLITE_IOERR | (1<<8)) #define SQLITE_IOERR_SHORT_READ (SQLITE_IOERR | (2<<8)) #define SQLITE_IOERR_WRITE (SQLITE_IOERR | (3<<8)) @@ -513,6 +515,8 @@ SQLITE_API int sqlite3_exec( #define SQLITE_READONLY_CANTLOCK (SQLITE_READONLY | (2<<8)) #define SQLITE_READONLY_ROLLBACK (SQLITE_READONLY | (3<<8)) #define SQLITE_READONLY_DBMOVED (SQLITE_READONLY | (4<<8)) +#define SQLITE_READONLY_CANTINIT (SQLITE_READONLY | (5<<8)) +#define SQLITE_READONLY_DIRECTORY (SQLITE_READONLY | (6<<8)) #define SQLITE_ABORT_ROLLBACK (SQLITE_ABORT | (2<<8)) #define SQLITE_CONSTRAINT_CHECK (SQLITE_CONSTRAINT | (1<<8)) #define SQLITE_CONSTRAINT_COMMITHOOK (SQLITE_CONSTRAINT | (2<<8)) @@ -1060,6 +1064,12 @@ struct sqlite3_io_methods { ** so that all subsequent write operations are independent. ** ^SQLite will never invoke SQLITE_FCNTL_ROLLBACK_ATOMIC_WRITE without ** a prior successful call to [SQLITE_FCNTL_BEGIN_ATOMIC_WRITE]. +** +**
  • [[SQLITE_FCNTL_LOCK_TIMEOUT]] +** The [SQLITE_FCNTL_LOCK_TIMEOUT] opcode causes attempts to obtain +** a file lock using the xLock or xShmLock methods of the VFS to wait +** for up to M milliseconds before failing, where M is the single +** unsigned integer parameter. ** */ #define SQLITE_FCNTL_LOCKSTATE 1 @@ -1094,6 +1104,7 @@ struct sqlite3_io_methods { #define SQLITE_FCNTL_BEGIN_ATOMIC_WRITE 31 #define SQLITE_FCNTL_COMMIT_ATOMIC_WRITE 32 #define SQLITE_FCNTL_ROLLBACK_ATOMIC_WRITE 33 +#define SQLITE_FCNTL_LOCK_TIMEOUT 34 /* deprecated names */ #define SQLITE_GET_LOCKPROXYFILE SQLITE_FCNTL_GET_LOCKPROXYFILE @@ -1131,12 +1142,18 @@ typedef struct sqlite3_api_routines sqlite3_api_routines; ** in the name of the object stands for "virtual file system". See ** the [VFS | VFS documentation] for further information. ** -** The value of the iVersion field is initially 1 but may be larger in -** future versions of SQLite. Additional fields may be appended to this -** object when the iVersion value is increased. Note that the structure -** of the sqlite3_vfs object changes in the transaction between -** SQLite version 3.5.9 and 3.6.0 and yet the iVersion field was not -** modified. +** The VFS interface is sometimes extended by adding new methods onto +** the end. Each time such an extension occurs, the iVersion field +** is incremented. The iVersion value started out as 1 in +** SQLite [version 3.5.0] on [dateof:3.5.0], then increased to 2 +** with SQLite [version 3.7.0] on [dateof:3.7.0], and then increased +** to 3 with SQLite [version 3.7.6] on [dateof:3.7.6]. Additional fields +** may be appended to the sqlite3_vfs object and the iVersion value +** may increase again in future versions of SQLite. +** Note that the structure +** of the sqlite3_vfs object changes in the transition from +** SQLite [version 3.5.9] to [version 3.6.0] on [dateof:3.6.0] +** and yet the iVersion field was not modified. ** ** The szOsFile field is the size of the subclassed [sqlite3_file] ** structure used by this VFS. mxPathname is the maximum length of @@ -2044,8 +2061,9 @@ struct sqlite3_mem_methods { ** connections at all to the database. If so, it performs a checkpoint ** operation before closing the connection. This option may be used to ** override this behaviour. The first parameter passed to this operation -** is an integer - non-zero to disable checkpoints-on-close, or zero (the -** default) to enable them. The second parameter is a pointer to an integer +** is an integer - positive to disable checkpoints-on-close, or zero (the +** default) to enable them, and negative to leave the setting unchanged. +** The second parameter is a pointer to an integer ** into which is written 0 or 1 to indicate whether checkpoints-on-close ** have been disabled - 0 if they are not disabled, 1 if they are. ** @@ -2059,8 +2077,24 @@ struct sqlite3_mem_methods { ** slower. But the QPSG has the advantage of more predictable behavior. With ** the QPSG active, SQLite will always use the same query plan in the field as ** was used during testing in the lab. +** The first argument to this setting is an integer which is 0 to disable +** the QPSG, positive to enable QPSG, or negative to leave the setting +** unchanged. The second parameter is a pointer to an integer into which +** is written 0 or 1 to indicate whether the QPSG is disabled or enabled +** following this call. ** ** +**
    SQLITE_DBCONFIG_TRIGGER_EQP
    +**
    By default, the output of EXPLAIN QUERY PLAN commands does not +** include output for any operations performed by trigger programs. This +** option is used to set or clear (the default) a flag that governs this +** behavior. The first parameter passed to this operation is an integer - +** positive to enable output for trigger programs, or zero to disable it, +** or negative to leave the setting unchanged. +** The second parameter is a pointer to an integer into which is written +** 0 or 1 to indicate whether output-for-triggers has been disabled - 0 if +** it is not disabled, 1 if it is. +**
    ** */ #define SQLITE_DBCONFIG_MAINDBNAME 1000 /* const char* */ @@ -2071,7 +2105,8 @@ struct sqlite3_mem_methods { #define SQLITE_DBCONFIG_ENABLE_LOAD_EXTENSION 1005 /* int int* */ #define SQLITE_DBCONFIG_NO_CKPT_ON_CLOSE 1006 /* int int* */ #define SQLITE_DBCONFIG_ENABLE_QPSG 1007 /* int int* */ - +#define SQLITE_DBCONFIG_TRIGGER_EQP 1008 /* int int* */ +#define SQLITE_DBCONFIG_MAX 1008 /* Largest DBCONFIG */ /* ** CAPI3REF: Enable Or Disable Extended Result Codes @@ -2477,16 +2512,16 @@ SQLITE_API void sqlite3_free_table(char **result); ** ** These routines are work-alikes of the "printf()" family of functions ** from the standard C library. -** These routines understand most of the common K&R formatting options, -** plus some additional non-standard formats, detailed below. -** Note that some of the more obscure formatting options from recent -** C-library standards are omitted from this implementation. +** These routines understand most of the common formatting options from +** the standard library printf() +** plus some additional non-standard formats ([%q], [%Q], [%w], and [%z]). +** See the [built-in printf()] documentation for details. ** ** ^The sqlite3_mprintf() and sqlite3_vmprintf() routines write their -** results into memory obtained from [sqlite3_malloc()]. +** results into memory obtained from [sqlite3_malloc64()]. ** The strings returned by these two routines should be ** released by [sqlite3_free()]. ^Both routines return a -** NULL pointer if [sqlite3_malloc()] is unable to allocate enough +** NULL pointer if [sqlite3_malloc64()] is unable to allocate enough ** memory to hold the resulting string. ** ** ^(The sqlite3_snprintf() routine is similar to "snprintf()" from @@ -2510,71 +2545,7 @@ SQLITE_API void sqlite3_free_table(char **result); ** ** ^The sqlite3_vsnprintf() routine is a varargs version of sqlite3_snprintf(). ** -** These routines all implement some additional formatting -** options that are useful for constructing SQL statements. -** All of the usual printf() formatting options apply. In addition, there -** is are "%q", "%Q", "%w" and "%z" options. -** -** ^(The %q option works like %s in that it substitutes a nul-terminated -** string from the argument list. But %q also doubles every '\'' character. -** %q is designed for use inside a string literal.)^ By doubling each '\'' -** character it escapes that character and allows it to be inserted into -** the string. -** -** For example, assume the string variable zText contains text as follows: -** -**
    -**  char *zText = "It's a happy day!";
    -** 
    -** -** One can use this text in an SQL statement as follows: -** -**
    -**  char *zSQL = sqlite3_mprintf("INSERT INTO table VALUES('%q')", zText);
    -**  sqlite3_exec(db, zSQL, 0, 0, 0);
    -**  sqlite3_free(zSQL);
    -** 
    -** -** Because the %q format string is used, the '\'' character in zText -** is escaped and the SQL generated is as follows: -** -**
    -**  INSERT INTO table1 VALUES('It''s a happy day!')
    -** 
    -** -** This is correct. Had we used %s instead of %q, the generated SQL -** would have looked like this: -** -**
    -**  INSERT INTO table1 VALUES('It's a happy day!');
    -** 
    -** -** This second example is an SQL syntax error. As a general rule you should -** always use %q instead of %s when inserting text into a string literal. -** -** ^(The %Q option works like %q except it also adds single quotes around -** the outside of the total string. Additionally, if the parameter in the -** argument list is a NULL pointer, %Q substitutes the text "NULL" (without -** single quotes).)^ So, for example, one could say: -** -**
    -**  char *zSQL = sqlite3_mprintf("INSERT INTO table VALUES(%Q)", zText);
    -**  sqlite3_exec(db, zSQL, 0, 0, 0);
    -**  sqlite3_free(zSQL);
    -** 
    -** -** The code above will render a correct SQL statement in the zSQL -** variable even if the zText variable is a NULL pointer. -** -** ^(The "%w" formatting option is like "%q" except that it expects to -** be contained within double-quotes instead of single quotes, and it -** escapes the double-quote character instead of the single-quote -** character.)^ The "%w" formatting option is intended for safely inserting -** table and column names into a constructed SQL statement. -** -** ^(The "%z" formatting option works like "%s" but with the -** addition that after the string has been read and copied into -** the result, [sqlite3_free()] is called on the input string.)^ +** See also: [built-in printf()], [printf() SQL function] */ SQLITE_API char *sqlite3_mprintf(const char*,...); SQLITE_API char *sqlite3_vmprintf(const char*, va_list); @@ -2932,8 +2903,8 @@ SQLITE_API SQLITE_DEPRECATED void *sqlite3_profile(sqlite3*, ** KEYWORDS: SQLITE_TRACE ** ** These constants identify classes of events that can be monitored -** using the [sqlite3_trace_v2()] tracing logic. The third argument -** to [sqlite3_trace_v2()] is an OR-ed combination of one or more of +** using the [sqlite3_trace_v2()] tracing logic. The M argument +** to [sqlite3_trace_v2(D,M,X,P)] is an OR-ed combination of one or more of ** the following constants. ^The first argument to the trace callback ** is one of the following constants. ** @@ -3640,13 +3611,13 @@ SQLITE_API int sqlite3_limit(sqlite3*, int id, int newVal); ** or [GLOB] operator or if the parameter is compared to an indexed column ** and the [SQLITE_ENABLE_STAT3] compile-time option is enabled. **
  • +** ** **

    ^sqlite3_prepare_v3() differs from sqlite3_prepare_v2() only in having ** the extra prepFlags parameter, which is a bit array consisting of zero or ** more of the [SQLITE_PREPARE_PERSISTENT|SQLITE_PREPARE_*] flags. ^The ** sqlite3_prepare_v2() interface works exactly the same as ** sqlite3_prepare_v3() with a zero prepFlags parameter. -** */ SQLITE_API int sqlite3_prepare( sqlite3 *db, /* Database handle */ @@ -4779,6 +4750,9 @@ SQLITE_API SQLITE_DEPRECATED int sqlite3_memory_alarm(void(*)(void*,sqlite3_int6 ** datatype of the value **

    sqlite3_value_numeric_type   ** →  Best numeric datatype of the value +**
    sqlite3_value_nochange   +** →  True if the column is unchanged in an UPDATE +** against a virtual table. **
    ** ** Details: @@ -4827,6 +4801,19 @@ SQLITE_API SQLITE_DEPRECATED int sqlite3_memory_alarm(void(*)(void*,sqlite3_int6 ** then the conversion is performed. Otherwise no conversion occurs. ** The [SQLITE_INTEGER | datatype] after conversion is returned.)^ ** +** ^Within the [xUpdate] method of a [virtual table], the +** sqlite3_value_nochange(X) interface returns true if and only if +** the column corresponding to X is unchanged by the UPDATE operation +** that the xUpdate method call was invoked to implement and if +** and the prior [xColumn] method call that was invoked to extracted +** the value for that column returned without setting a result (probably +** because it queried [sqlite3_vtab_nochange()] and found that the column +** was unchanging). ^Within an [xUpdate] method, any value for which +** sqlite3_value_nochange(X) is true will in all other respects appear +** to be a NULL value. If sqlite3_value_nochange(X) is invoked anywhere other +** than within an [xUpdate] method call for an UPDATE statement, then +** the return value is arbitrary and meaningless. +** ** Please pay particular attention to the fact that the pointer returned ** from [sqlite3_value_blob()], [sqlite3_value_text()], or ** [sqlite3_value_text16()] can be invalidated by a subsequent call to @@ -4849,6 +4836,7 @@ SQLITE_API int sqlite3_value_bytes(sqlite3_value*); SQLITE_API int sqlite3_value_bytes16(sqlite3_value*); SQLITE_API int sqlite3_value_type(sqlite3_value*); SQLITE_API int sqlite3_value_numeric_type(sqlite3_value*); +SQLITE_API int sqlite3_value_nochange(sqlite3_value*); /* ** CAPI3REF: Finding The Subtype Of SQL Values @@ -6951,9 +6939,9 @@ SQLITE_API sqlite3_mutex *sqlite3_db_mutex(sqlite3*); ** the xFileControl method. ^The return value of the xFileControl ** method becomes the return value of this routine. ** -** ^The SQLITE_FCNTL_FILE_POINTER value for the op parameter causes +** ^The [SQLITE_FCNTL_FILE_POINTER] value for the op parameter causes ** a pointer to the underlying [sqlite3_file] object to be written into -** the space pointed to by the 4th parameter. ^The SQLITE_FCNTL_FILE_POINTER +** the space pointed to by the 4th parameter. ^The [SQLITE_FCNTL_FILE_POINTER] ** case is a short-circuit path which does not actually invoke the ** underlying sqlite3_io_methods.xFileControl method. ** @@ -6965,7 +6953,7 @@ SQLITE_API sqlite3_mutex *sqlite3_db_mutex(sqlite3*); ** an incorrect zDbName and an SQLITE_ERROR return from the underlying ** xFileControl method. ** -** See also: [SQLITE_FCNTL_LOCKSTATE] +** See also: [file control opcodes] */ SQLITE_API int sqlite3_file_control(sqlite3*, const char *zDbName, int op, void*); @@ -7022,7 +7010,8 @@ SQLITE_API int sqlite3_test_control(int op, ...); #define SQLITE_TESTCTRL_ISINIT 23 #define SQLITE_TESTCTRL_SORTER_MMAP 24 #define SQLITE_TESTCTRL_IMPOSTER 25 -#define SQLITE_TESTCTRL_LAST 25 +#define SQLITE_TESTCTRL_PARSER_COVERAGE 26 +#define SQLITE_TESTCTRL_LAST 26 /* Largest TESTCTRL */ /* ** CAPI3REF: SQLite Runtime Status @@ -7257,6 +7246,15 @@ SQLITE_API int sqlite3_db_status(sqlite3*, int op, int *pCur, int *pHiwtr, int r ** highwater mark associated with SQLITE_DBSTATUS_CACHE_WRITE is always 0. **
    ** +** [[SQLITE_DBSTATUS_CACHE_SPILL]] ^(
    SQLITE_DBSTATUS_CACHE_SPILL
    +**
    This parameter returns the number of dirty cache entries that have +** been written to disk in the middle of a transaction due to the page +** cache overflowing. Transactions are more efficient if they are written +** to disk all at once. When pages spill mid-transaction, that introduces +** additional overhead. This parameter can be used help identify +** inefficiencies that can be resolve by increasing the cache size. +**
    +** ** [[SQLITE_DBSTATUS_DEFERRED_FKS]] ^(
    SQLITE_DBSTATUS_DEFERRED_FKS
    **
    This parameter returns zero for the current value if and only if ** all foreign key constraints (deferred or immediate) have been @@ -7276,7 +7274,8 @@ SQLITE_API int sqlite3_db_status(sqlite3*, int op, int *pCur, int *pHiwtr, int r #define SQLITE_DBSTATUS_CACHE_WRITE 9 #define SQLITE_DBSTATUS_DEFERRED_FKS 10 #define SQLITE_DBSTATUS_CACHE_USED_SHARED 11 -#define SQLITE_DBSTATUS_MAX 11 /* Largest defined DBSTATUS */ +#define SQLITE_DBSTATUS_CACHE_SPILL 12 +#define SQLITE_DBSTATUS_MAX 12 /* Largest defined DBSTATUS */ /* @@ -8276,6 +8275,40 @@ SQLITE_API int sqlite3_vtab_config(sqlite3*, int op, ...); */ SQLITE_API int sqlite3_vtab_on_conflict(sqlite3 *); +/* +** CAPI3REF: Determine If Virtual Table Column Access Is For UPDATE +** +** If the sqlite3_vtab_nochange(X) routine is called within the [xColumn] +** method of a [virtual table], then it returns true if and only if the +** column is being fetched as part of an UPDATE operation during which the +** column value will not change. Applications might use this to substitute +** a lighter-weight value to return that the corresponding [xUpdate] method +** understands as a "no-change" value. +** +** If the [xColumn] method calls sqlite3_vtab_nochange() and finds that +** the column is not changed by the UPDATE statement, they the xColumn +** method can optionally return without setting a result, without calling +** any of the [sqlite3_result_int|sqlite3_result_xxxxx() interfaces]. +** In that case, [sqlite3_value_nochange(X)] will return true for the +** same column in the [xUpdate] method. +*/ +SQLITE_API int sqlite3_vtab_nochange(sqlite3_context*); + +/* +** CAPI3REF: Determine The Collation For a Virtual Table Constraint +** +** This function may only be called from within a call to the [xBestIndex] +** method of a [virtual table]. +** +** The first argument must be the sqlite3_index_info object that is the +** first parameter to the xBestIndex() method. The second argument must be +** an index into the aConstraint[] array belonging to the sqlite3_index_info +** structure passed to xBestIndex. This function returns a pointer to a buffer +** containing the name of the collation sequence for the corresponding +** constraint. +*/ +SQLITE_API SQLITE_EXPERIMENTAL const char *sqlite3_vtab_collation(sqlite3_index_info*,int); + /* ** CAPI3REF: Conflict resolution modes ** KEYWORDS: {conflict resolution mode} @@ -8722,6 +8755,128 @@ SQLITE_API SQLITE_EXPERIMENTAL int sqlite3_snapshot_cmp( */ SQLITE_API SQLITE_EXPERIMENTAL int sqlite3_snapshot_recover(sqlite3 *db, const char *zDb); +/* +** CAPI3REF: Serialize a database +** +** The sqlite3_serialize(D,S,P,F) interface returns a pointer to memory +** that is a serialization of the S database on [database connection] D. +** If P is not a NULL pointer, then the size of the database in bytes +** is written into *P. +** +** For an ordinary on-disk database file, the serialization is just a +** copy of the disk file. For an in-memory database or a "TEMP" database, +** the serialization is the same sequence of bytes which would be written +** to disk if that database where backed up to disk. +** +** The usual case is that sqlite3_serialize() copies the serialization of +** the database into memory obtained from [sqlite3_malloc64()] and returns +** a pointer to that memory. The caller is responsible for freeing the +** returned value to avoid a memory leak. However, if the F argument +** contains the SQLITE_SERIALIZE_NOCOPY bit, then no memory allocations +** are made, and the sqlite3_serialize() function will return a pointer +** to the contiguous memory representation of the database that SQLite +** is currently using for that database, or NULL if the no such contiguous +** memory representation of the database exists. A contiguous memory +** representation of the database will usually only exist if there has +** been a prior call to [sqlite3_deserialize(D,S,...)] with the same +** values of D and S. +** The size of the database is written into *P even if the +** SQLITE_SERIALIZE_NOCOPY bit is set but no contigious copy +** of the database exists. +** +** A call to sqlite3_serialize(D,S,P,F) might return NULL even if the +** SQLITE_SERIALIZE_NOCOPY bit is omitted from argument F if a memory +** allocation error occurs. +** +** This interface is only available if SQLite is compiled with the +** [SQLITE_ENABLE_DESERIALIZE] option. +*/ +SQLITE_API unsigned char *sqlite3_serialize( + sqlite3 *db, /* The database connection */ + const char *zSchema, /* Which DB to serialize. ex: "main", "temp", ... */ + sqlite3_int64 *piSize, /* Write size of the DB here, if not NULL */ + unsigned int mFlags /* Zero or more SQLITE_SERIALIZE_* flags */ +); + +/* +** CAPI3REF: Flags for sqlite3_serialize +** +** Zero or more of the following constants can be OR-ed together for +** the F argument to [sqlite3_serialize(D,S,P,F)]. +** +** SQLITE_SERIALIZE_NOCOPY means that [sqlite3_serialize()] will return +** a pointer to contiguous in-memory database that it is currently using, +** without making a copy of the database. If SQLite is not currently using +** a contiguous in-memory database, then this option causes +** [sqlite3_serialize()] to return a NULL pointer. SQLite will only be +** using a contiguous in-memory database if it has been initialized by a +** prior call to [sqlite3_deserialize()]. +*/ +#define SQLITE_SERIALIZE_NOCOPY 0x001 /* Do no memory allocations */ + +/* +** CAPI3REF: Deserialize a database +** +** The sqlite3_deserialize(D,S,P,N,M,F) interface causes the +** [database connection] D to disconnect from database S and then +** reopen S as an in-memory database based on the serialization contained +** in P. The serialized database P is N bytes in size. M is the size of +** the buffer P, which might be larger than N. If M is larger than N, and +** the SQLITE_DESERIALIZE_READONLY bit is not set in F, then SQLite is +** permitted to add content to the in-memory database as long as the total +** size does not exceed M bytes. +** +** If the SQLITE_DESERIALIZE_FREEONCLOSE bit is set in F, then SQLite will +** invoke sqlite3_free() on the serialization buffer when the database +** connection closes. If the SQLITE_DESERIALIZE_RESIZEABLE bit is set, then +** SQLite will try to increase the buffer size using sqlite3_realloc64() +** if writes on the database cause it to grow larger than M bytes. +** +** The sqlite3_deserialize() interface will fail with SQLITE_BUSY if the +** database is currently in a read transaction or is involved in a backup +** operation. +** +** If sqlite3_deserialize(D,S,P,N,M,F) fails for any reason and if the +** SQLITE_DESERIALIZE_FREEONCLOSE bit is set in argument F, then +** [sqlite3_free()] is invoked on argument P prior to returning. +** +** This interface is only available if SQLite is compiled with the +** [SQLITE_ENABLE_DESERIALIZE] option. +*/ +SQLITE_API int sqlite3_deserialize( + sqlite3 *db, /* The database connection */ + const char *zSchema, /* Which DB to reopen with the deserialization */ + unsigned char *pData, /* The serialized database content */ + sqlite3_int64 szDb, /* Number bytes in the deserialization */ + sqlite3_int64 szBuf, /* Total size of buffer pData[] */ + unsigned mFlags /* Zero or more SQLITE_DESERIALIZE_* flags */ +); + +/* +** CAPI3REF: Flags for sqlite3_deserialize() +** +** The following are allowed values for 6th argument (the F argument) to +** the [sqlite3_deserialize(D,S,P,N,M,F)] interface. +** +** The SQLITE_DESERIALIZE_FREEONCLOSE means that the database serialization +** in the P argument is held in memory obtained from [sqlite3_malloc64()] +** and that SQLite should take ownership of this memory and automatically +** free it when it has finished using it. Without this flag, the caller +** is resposible for freeing any dynamically allocated memory. +** +** The SQLITE_DESERIALIZE_RESIZEABLE flag means that SQLite is allowed to +** grow the size of the database using calls to [sqlite3_realloc64()]. This +** flag should only be used if SQLITE_DESERIALIZE_FREEONCLOSE is also used. +** Without this flag, the deserialized database cannot increase in size beyond +** the number of bytes specified by the M parameter. +** +** The SQLITE_DESERIALIZE_READONLY flag means that the deserialized database +** should be treated as read-only. +*/ +#define SQLITE_DESERIALIZE_FREEONCLOSE 1 /* Call sqlite3_free() on close */ +#define SQLITE_DESERIALIZE_RESIZEABLE 2 /* Resize using sqlite3_realloc64() */ +#define SQLITE_DESERIALIZE_READONLY 4 /* Database is read-only */ + /* ** Undo the hack that converts floating point types to integer for ** builds on processors without floating point support. @@ -8869,16 +9024,23 @@ extern "C" { /* ** CAPI3REF: Session Object Handle +** +** An instance of this object is a [session] that can be used to +** record changes to a database. */ typedef struct sqlite3_session sqlite3_session; /* ** CAPI3REF: Changeset Iterator Handle +** +** An instance of this object acts as a cursor for iterating +** over the elements of a [changeset] or [patchset]. */ typedef struct sqlite3_changeset_iter sqlite3_changeset_iter; /* ** CAPI3REF: Create A New Session Object +** CONSTRUCTOR: sqlite3_session ** ** Create a new session object attached to database handle db. If successful, ** a pointer to the new object is written to *ppSession and SQLITE_OK is @@ -8915,6 +9077,7 @@ SQLITE_API int sqlite3session_create( /* ** CAPI3REF: Delete A Session Object +** DESTRUCTOR: sqlite3_session ** ** Delete a session object previously allocated using ** [sqlite3session_create()]. Once a session object has been deleted, the @@ -8930,6 +9093,7 @@ SQLITE_API void sqlite3session_delete(sqlite3_session *pSession); /* ** CAPI3REF: Enable Or Disable A Session Object +** METHOD: sqlite3_session ** ** Enable or disable the recording of changes by a session object. When ** enabled, a session object records changes made to the database. When @@ -8949,6 +9113,7 @@ SQLITE_API int sqlite3session_enable(sqlite3_session *pSession, int bEnable); /* ** CAPI3REF: Set Or Clear the Indirect Change Flag +** METHOD: sqlite3_session ** ** Each change recorded by a session object is marked as either direct or ** indirect. A change is marked as indirect if either: @@ -8978,6 +9143,7 @@ SQLITE_API int sqlite3session_indirect(sqlite3_session *pSession, int bIndirect) /* ** CAPI3REF: Attach A Table To A Session Object +** METHOD: sqlite3_session ** ** If argument zTab is not NULL, then it is the name of a table to attach ** to the session object passed as the first argument. All subsequent changes @@ -9003,6 +9169,35 @@ SQLITE_API int sqlite3session_indirect(sqlite3_session *pSession, int bIndirect) ** ** SQLITE_OK is returned if the call completes without error. Or, if an error ** occurs, an SQLite error code (e.g. SQLITE_NOMEM) is returned. +** +**

    Special sqlite_stat1 Handling

    +** +** As of SQLite version 3.22.0, the "sqlite_stat1" table is an exception to +** some of the rules above. In SQLite, the schema of sqlite_stat1 is: +**
    +**        CREATE TABLE sqlite_stat1(tbl,idx,stat)  
    +**  
    +** +** Even though sqlite_stat1 does not have a PRIMARY KEY, changes are +** recorded for it as if the PRIMARY KEY is (tbl,idx). Additionally, changes +** are recorded for rows for which (idx IS NULL) is true. However, for such +** rows a zero-length blob (SQL value X'') is stored in the changeset or +** patchset instead of a NULL value. This allows such changesets to be +** manipulated by legacy implementations of sqlite3changeset_invert(), +** concat() and similar. +** +** The sqlite3changeset_apply() function automatically converts the +** zero-length blob back to a NULL value when updating the sqlite_stat1 +** table. However, if the application calls sqlite3changeset_new(), +** sqlite3changeset_old() or sqlite3changeset_conflict on a changeset +** iterator directly (including on a changeset iterator passed to a +** conflict-handler callback) then the X'' value is returned. The application +** must translate X'' to NULL itself if required. +** +** Legacy (older than 3.22.0) versions of the sessions module cannot capture +** changes made to the sqlite_stat1 table. Legacy versions of the +** sqlite3changeset_apply() function silently ignore any modifications to the +** sqlite_stat1 table that are part of a changeset or patchset. */ SQLITE_API int sqlite3session_attach( sqlite3_session *pSession, /* Session object */ @@ -9011,6 +9206,7 @@ SQLITE_API int sqlite3session_attach( /* ** CAPI3REF: Set a table filter on a Session Object. +** METHOD: sqlite3_session ** ** The second argument (xFilter) is the "filter callback". For changes to rows ** in tables that are not attached to the Session object, the filter is called @@ -9029,6 +9225,7 @@ SQLITE_API void sqlite3session_table_filter( /* ** CAPI3REF: Generate A Changeset From A Session Object +** METHOD: sqlite3_session ** ** Obtain a changeset containing changes to the tables attached to the ** session object passed as the first argument. If successful, @@ -9138,7 +9335,8 @@ SQLITE_API int sqlite3session_changeset( ); /* -** CAPI3REF: Load The Difference Between Tables Into A Session +** CAPI3REF: Load The Difference Between Tables Into A Session +** METHOD: sqlite3_session ** ** If it is not already attached to the session object passed as the first ** argument, this function attaches table zTbl in the same manner as the @@ -9203,6 +9401,7 @@ SQLITE_API int sqlite3session_diff( /* ** CAPI3REF: Generate A Patchset From A Session Object +** METHOD: sqlite3_session ** ** The differences between a patchset and a changeset are that: ** @@ -9254,6 +9453,7 @@ SQLITE_API int sqlite3session_isempty(sqlite3_session *pSession); /* ** CAPI3REF: Create An Iterator To Traverse A Changeset +** CONSTRUCTOR: sqlite3_changeset_iter ** ** Create an iterator used to iterate through the contents of a changeset. ** If successful, *pp is set to point to the iterator handle and SQLITE_OK @@ -9294,6 +9494,7 @@ SQLITE_API int sqlite3changeset_start( /* ** CAPI3REF: Advance A Changeset Iterator +** METHOD: sqlite3_changeset_iter ** ** This function may only be used with iterators created by function ** [sqlite3changeset_start()]. If it is called on an iterator passed to @@ -9318,6 +9519,7 @@ SQLITE_API int sqlite3changeset_next(sqlite3_changeset_iter *pIter); /* ** CAPI3REF: Obtain The Current Operation From A Changeset Iterator +** METHOD: sqlite3_changeset_iter ** ** The pIter argument passed to this function may either be an iterator ** passed to a conflict-handler by [sqlite3changeset_apply()], or an iterator @@ -9352,6 +9554,7 @@ SQLITE_API int sqlite3changeset_op( /* ** CAPI3REF: Obtain The Primary Key Definition Of A Table +** METHOD: sqlite3_changeset_iter ** ** For each modified table, a changeset includes the following: ** @@ -9383,6 +9586,7 @@ SQLITE_API int sqlite3changeset_pk( /* ** CAPI3REF: Obtain old.* Values From A Changeset Iterator +** METHOD: sqlite3_changeset_iter ** ** The pIter argument passed to this function may either be an iterator ** passed to a conflict-handler by [sqlite3changeset_apply()], or an iterator @@ -9413,6 +9617,7 @@ SQLITE_API int sqlite3changeset_old( /* ** CAPI3REF: Obtain new.* Values From A Changeset Iterator +** METHOD: sqlite3_changeset_iter ** ** The pIter argument passed to this function may either be an iterator ** passed to a conflict-handler by [sqlite3changeset_apply()], or an iterator @@ -9446,6 +9651,7 @@ SQLITE_API int sqlite3changeset_new( /* ** CAPI3REF: Obtain Conflicting Row Values From A Changeset Iterator +** METHOD: sqlite3_changeset_iter ** ** This function should only be used with iterator objects passed to a ** conflict-handler callback by [sqlite3changeset_apply()] with either @@ -9473,6 +9679,7 @@ SQLITE_API int sqlite3changeset_conflict( /* ** CAPI3REF: Determine The Number Of Foreign Key Constraint Violations +** METHOD: sqlite3_changeset_iter ** ** This function may only be called with an iterator passed to an ** SQLITE_CHANGESET_FOREIGN_KEY conflict handler callback. In this case @@ -9489,6 +9696,7 @@ SQLITE_API int sqlite3changeset_fk_conflicts( /* ** CAPI3REF: Finalize A Changeset Iterator +** METHOD: sqlite3_changeset_iter ** ** This function is used to finalize an iterator allocated with ** [sqlite3changeset_start()]. @@ -9505,6 +9713,7 @@ SQLITE_API int sqlite3changeset_fk_conflicts( ** to that error is returned by this function. Otherwise, SQLITE_OK is ** returned. This is to allow the following pattern (pseudo-code): ** +**
     **   sqlite3changeset_start();
     **   while( SQLITE_ROW==sqlite3changeset_next() ){
     **     // Do something with change.
    @@ -9513,6 +9722,7 @@ SQLITE_API int sqlite3changeset_fk_conflicts(
     **   if( rc!=SQLITE_OK ){
     **     // An error has occurred 
     **   }
    +** 
    */ SQLITE_API int sqlite3changeset_finalize(sqlite3_changeset_iter *pIter); @@ -9560,6 +9770,7 @@ SQLITE_API int sqlite3changeset_invert( ** sqlite3_changegroup object. Calling it produces similar results as the ** following code fragment: ** +**
     **   sqlite3_changegroup *pGrp;
     **   rc = sqlite3_changegroup_new(&pGrp);
     **   if( rc==SQLITE_OK ) rc = sqlite3changegroup_add(pGrp, nA, pA);
    @@ -9570,6 +9781,7 @@ SQLITE_API int sqlite3changeset_invert(
     **     *ppOut = 0;
     **     *pnOut = 0;
     **   }
    +** 
    ** ** Refer to the sqlite3_changegroup documentation below for details. */ @@ -9585,11 +9797,15 @@ SQLITE_API int sqlite3changeset_concat( /* ** CAPI3REF: Changegroup Handle +** +** A changegroup is an object used to combine two or more +** [changesets] or [patchsets] */ typedef struct sqlite3_changegroup sqlite3_changegroup; /* ** CAPI3REF: Create A New Changegroup Object +** CONSTRUCTOR: sqlite3_changegroup ** ** An sqlite3_changegroup object is used to combine two or more changesets ** (or patchsets) into a single changeset (or patchset). A single changegroup @@ -9627,6 +9843,7 @@ SQLITE_API int sqlite3changegroup_new(sqlite3_changegroup **pp); /* ** CAPI3REF: Add A Changeset To A Changegroup +** METHOD: sqlite3_changegroup ** ** Add all changes within the changeset (or patchset) in buffer pData (size ** nData bytes) to the changegroup. @@ -9704,6 +9921,7 @@ SQLITE_API int sqlite3changegroup_add(sqlite3_changegroup*, int nData, void *pDa /* ** CAPI3REF: Obtain A Composite Changeset From A Changegroup +** METHOD: sqlite3_changegroup ** ** Obtain a buffer containing a changeset (or patchset) representing the ** current contents of the changegroup. If the inputs to the changegroup @@ -9734,25 +9952,25 @@ SQLITE_API int sqlite3changegroup_output( /* ** CAPI3REF: Delete A Changegroup Object +** DESTRUCTOR: sqlite3_changegroup */ SQLITE_API void sqlite3changegroup_delete(sqlite3_changegroup*); /* ** CAPI3REF: Apply A Changeset To A Database ** -** Apply a changeset to a database. This function attempts to update the -** "main" database attached to handle db with the changes found in the -** changeset passed via the second and third arguments. +** Apply a changeset or patchset to a database. These functions attempt to +** update the "main" database attached to handle db with the changes found in +** the changeset passed via the second and third arguments. ** -** The fourth argument (xFilter) passed to this function is the "filter +** The fourth argument (xFilter) passed to these functions is the "filter ** callback". If it is not NULL, then for each table affected by at least one ** change in the changeset, the filter callback is invoked with ** the table name as the second argument, and a copy of the context pointer -** passed as the sixth argument to this function as the first. If the "filter -** callback" returns zero, then no attempt is made to apply any changes to -** the table. Otherwise, if the return value is non-zero or the xFilter -** argument to this function is NULL, all changes related to the table are -** attempted. +** passed as the sixth argument as the first. If the "filter callback" +** returns zero, then no attempt is made to apply any changes to the table. +** Otherwise, if the return value is non-zero or the xFilter argument to +** is NULL, all changes related to the table are attempted. ** ** For each table that is not excluded by the filter callback, this function ** tests that the target database contains a compatible table. A table is @@ -9797,7 +10015,7 @@ SQLITE_API void sqlite3changegroup_delete(sqlite3_changegroup*); ** **
    **
    DELETE Changes
    -** For each DELETE change, this function checks if the target database +** For each DELETE change, the function checks if the target database ** contains a row with the same primary key value (or values) as the ** original row values stored in the changeset. If it does, and the values ** stored in all non-primary key columns also match the values stored in @@ -9842,7 +10060,7 @@ SQLITE_API void sqlite3changegroup_delete(sqlite3_changegroup*); ** [SQLITE_CHANGESET_REPLACE]. ** **
    UPDATE Changes
    -** For each UPDATE change, this function checks if the target database +** For each UPDATE change, the function checks if the target database ** contains a row with the same primary key value (or values) as the ** original row values stored in the changeset. If it does, and the values ** stored in all modified non-primary key columns also match the values @@ -9873,11 +10091,28 @@ SQLITE_API void sqlite3changegroup_delete(sqlite3_changegroup*); ** This can be used to further customize the applications conflict ** resolution strategy. ** -** All changes made by this function are enclosed in a savepoint transaction. +** All changes made by these functions are enclosed in a savepoint transaction. ** If any other error (aside from a constraint failure when attempting to ** write to the target database) occurs, then the savepoint transaction is ** rolled back, restoring the target database to its original state, and an ** SQLite error code returned. +** +** If the output parameters (ppRebase) and (pnRebase) are non-NULL and +** the input is a changeset (not a patchset), then sqlite3changeset_apply_v2() +** may set (*ppRebase) to point to a "rebase" that may be used with the +** sqlite3_rebaser APIs buffer before returning. In this case (*pnRebase) +** is set to the size of the buffer in bytes. It is the responsibility of the +** caller to eventually free any such buffer using sqlite3_free(). The buffer +** is only allocated and populated if one or more conflicts were encountered +** while applying the patchset. See comments surrounding the sqlite3_rebaser +** APIs for further details. +** +** The behavior of sqlite3changeset_apply_v2() and its streaming equivalent +** may be modified by passing a combination of +** [SQLITE_CHANGESETAPPLY_NOSAVEPOINT | supported flags] as the 9th parameter. +** +** Note that the sqlite3changeset_apply_v2() API is still experimental +** and therefore subject to change. */ SQLITE_API int sqlite3changeset_apply( sqlite3 *db, /* Apply change to "main" db of this handle */ @@ -9894,6 +10129,41 @@ SQLITE_API int sqlite3changeset_apply( ), void *pCtx /* First argument passed to xConflict */ ); +SQLITE_API int sqlite3changeset_apply_v2( + sqlite3 *db, /* Apply change to "main" db of this handle */ + int nChangeset, /* Size of changeset in bytes */ + void *pChangeset, /* Changeset blob */ + int(*xFilter)( + void *pCtx, /* Copy of sixth arg to _apply() */ + const char *zTab /* Table name */ + ), + int(*xConflict)( + void *pCtx, /* Copy of sixth arg to _apply() */ + int eConflict, /* DATA, MISSING, CONFLICT, CONSTRAINT */ + sqlite3_changeset_iter *p /* Handle describing change and conflict */ + ), + void *pCtx, /* First argument passed to xConflict */ + void **ppRebase, int *pnRebase, /* OUT: Rebase data */ + int flags /* Combination of SESSION_APPLY_* flags */ +); + +/* +** CAPI3REF: Flags for sqlite3changeset_apply_v2 +** +** The following flags may passed via the 9th parameter to +** [sqlite3changeset_apply_v2] and [sqlite3changeset_apply_v2_strm]: +** +**
    +**
    SQLITE_CHANGESETAPPLY_NOSAVEPOINT
    +** Usually, the sessions module encloses all operations performed by +** a single call to apply_v2() or apply_v2_strm() in a [SAVEPOINT]. The +** SAVEPOINT is committed if the changeset or patchset is successfully +** applied, or rolled back if an error occurs. Specifying this flag +** causes the sessions module to omit this savepoint. In this case, if the +** caller has an open transaction or savepoint when apply_v2() is called, +** it may revert the partially applied changeset by rolling it back. +*/ +#define SQLITE_CHANGESETAPPLY_NOSAVEPOINT 0x0001 /* ** CAPI3REF: Constants Passed To The Conflict Handler @@ -9991,6 +10261,161 @@ SQLITE_API int sqlite3changeset_apply( #define SQLITE_CHANGESET_REPLACE 1 #define SQLITE_CHANGESET_ABORT 2 +/* +** CAPI3REF: Rebasing changesets +** EXPERIMENTAL +** +** Suppose there is a site hosting a database in state S0. And that +** modifications are made that move that database to state S1 and a +** changeset recorded (the "local" changeset). Then, a changeset based +** on S0 is received from another site (the "remote" changeset) and +** applied to the database. The database is then in state +** (S1+"remote"), where the exact state depends on any conflict +** resolution decisions (OMIT or REPLACE) made while applying "remote". +** Rebasing a changeset is to update it to take those conflict +** resolution decisions into account, so that the same conflicts +** do not have to be resolved elsewhere in the network. +** +** For example, if both the local and remote changesets contain an +** INSERT of the same key on "CREATE TABLE t1(a PRIMARY KEY, b)": +** +** local: INSERT INTO t1 VALUES(1, 'v1'); +** remote: INSERT INTO t1 VALUES(1, 'v2'); +** +** and the conflict resolution is REPLACE, then the INSERT change is +** removed from the local changeset (it was overridden). Or, if the +** conflict resolution was "OMIT", then the local changeset is modified +** to instead contain: +** +** UPDATE t1 SET b = 'v2' WHERE a=1; +** +** Changes within the local changeset are rebased as follows: +** +**
    +**
    Local INSERT
    +** This may only conflict with a remote INSERT. If the conflict +** resolution was OMIT, then add an UPDATE change to the rebased +** changeset. Or, if the conflict resolution was REPLACE, add +** nothing to the rebased changeset. +** +**
    Local DELETE
    +** This may conflict with a remote UPDATE or DELETE. In both cases the +** only possible resolution is OMIT. If the remote operation was a +** DELETE, then add no change to the rebased changeset. If the remote +** operation was an UPDATE, then the old.* fields of change are updated +** to reflect the new.* values in the UPDATE. +** +**
    Local UPDATE
    +** This may conflict with a remote UPDATE or DELETE. If it conflicts +** with a DELETE, and the conflict resolution was OMIT, then the update +** is changed into an INSERT. Any undefined values in the new.* record +** from the update change are filled in using the old.* values from +** the conflicting DELETE. Or, if the conflict resolution was REPLACE, +** the UPDATE change is simply omitted from the rebased changeset. +** +** If conflict is with a remote UPDATE and the resolution is OMIT, then +** the old.* values are rebased using the new.* values in the remote +** change. Or, if the resolution is REPLACE, then the change is copied +** into the rebased changeset with updates to columns also updated by +** the conflicting remote UPDATE removed. If this means no columns would +** be updated, the change is omitted. +**
    +** +** A local change may be rebased against multiple remote changes +** simultaneously. If a single key is modified by multiple remote +** changesets, they are combined as follows before the local changeset +** is rebased: +** +**
      +**
    • If there has been one or more REPLACE resolutions on a +** key, it is rebased according to a REPLACE. +** +**
    • If there have been no REPLACE resolutions on a key, then +** the local changeset is rebased according to the most recent +** of the OMIT resolutions. +**
    +** +** Note that conflict resolutions from multiple remote changesets are +** combined on a per-field basis, not per-row. This means that in the +** case of multiple remote UPDATE operations, some fields of a single +** local change may be rebased for REPLACE while others are rebased for +** OMIT. +** +** In order to rebase a local changeset, the remote changeset must first +** be applied to the local database using sqlite3changeset_apply_v2() and +** the buffer of rebase information captured. Then: +** +**
      +**
    1. An sqlite3_rebaser object is created by calling +** sqlite3rebaser_create(). +**
    2. The new object is configured with the rebase buffer obtained from +** sqlite3changeset_apply_v2() by calling sqlite3rebaser_configure(). +** If the local changeset is to be rebased against multiple remote +** changesets, then sqlite3rebaser_configure() should be called +** multiple times, in the same order that the multiple +** sqlite3changeset_apply_v2() calls were made. +**
    3. Each local changeset is rebased by calling sqlite3rebaser_rebase(). +**
    4. The sqlite3_rebaser object is deleted by calling +** sqlite3rebaser_delete(). +**
    +*/ +typedef struct sqlite3_rebaser sqlite3_rebaser; + +/* +** CAPI3REF: Create a changeset rebaser object. +** EXPERIMENTAL +** +** Allocate a new changeset rebaser object. If successful, set (*ppNew) to +** point to the new object and return SQLITE_OK. Otherwise, if an error +** occurs, return an SQLite error code (e.g. SQLITE_NOMEM) and set (*ppNew) +** to NULL. +*/ +SQLITE_API int sqlite3rebaser_create(sqlite3_rebaser **ppNew); + +/* +** CAPI3REF: Configure a changeset rebaser object. +** EXPERIMENTAL +** +** Configure the changeset rebaser object to rebase changesets according +** to the conflict resolutions described by buffer pRebase (size nRebase +** bytes), which must have been obtained from a previous call to +** sqlite3changeset_apply_v2(). +*/ +SQLITE_API int sqlite3rebaser_configure( + sqlite3_rebaser*, + int nRebase, const void *pRebase +); + +/* +** CAPI3REF: Rebase a changeset +** EXPERIMENTAL +** +** Argument pIn must point to a buffer containing a changeset nIn bytes +** in size. This function allocates and populates a buffer with a copy +** of the changeset rebased rebased according to the configuration of the +** rebaser object passed as the first argument. If successful, (*ppOut) +** is set to point to the new buffer containing the rebased changset and +** (*pnOut) to its size in bytes and SQLITE_OK returned. It is the +** responsibility of the caller to eventually free the new buffer using +** sqlite3_free(). Otherwise, if an error occurs, (*ppOut) and (*pnOut) +** are set to zero and an SQLite error code returned. +*/ +SQLITE_API int sqlite3rebaser_rebase( + sqlite3_rebaser*, + int nIn, const void *pIn, + int *pnOut, void **ppOut +); + +/* +** CAPI3REF: Delete a changeset rebaser object. +** EXPERIMENTAL +** +** Delete the changeset rebaser object and all associated resources. There +** should be one call to this function for each successful invocation +** of sqlite3rebaser_create(). +*/ +SQLITE_API void sqlite3rebaser_delete(sqlite3_rebaser *p); + /* ** CAPI3REF: Streaming Versions of API functions. ** @@ -10000,6 +10425,7 @@ SQLITE_API int sqlite3changeset_apply( ** ** **
    Streaming functionNon-streaming equivalent
    sqlite3changeset_apply_strm[sqlite3changeset_apply] +**
    sqlite3changeset_apply_strm_v2[sqlite3changeset_apply_v2] **
    sqlite3changeset_concat_strm[sqlite3changeset_concat] **
    sqlite3changeset_invert_strm[sqlite3changeset_invert] **
    sqlite3changeset_start_strm[sqlite3changeset_start] @@ -10095,6 +10521,23 @@ SQLITE_API int sqlite3changeset_apply_strm( ), void *pCtx /* First argument passed to xConflict */ ); +SQLITE_API int sqlite3changeset_apply_v2_strm( + sqlite3 *db, /* Apply change to "main" db of this handle */ + int (*xInput)(void *pIn, void *pData, int *pnData), /* Input function */ + void *pIn, /* First arg for xInput */ + int(*xFilter)( + void *pCtx, /* Copy of sixth arg to _apply() */ + const char *zTab /* Table name */ + ), + int(*xConflict)( + void *pCtx, /* Copy of sixth arg to _apply() */ + int eConflict, /* DATA, MISSING, CONFLICT, CONSTRAINT */ + sqlite3_changeset_iter *p /* Handle describing change and conflict */ + ), + void *pCtx, /* First argument passed to xConflict */ + void **ppRebase, int *pnRebase, + int flags +); SQLITE_API int sqlite3changeset_concat_strm( int (*xInputA)(void *pIn, void *pData, int *pnData), void *pInA, @@ -10132,6 +10575,13 @@ SQLITE_API int sqlite3changegroup_output_strm(sqlite3_changegroup*, int (*xOutput)(void *pOut, const void *pData, int nData), void *pOut ); +SQLITE_API int sqlite3rebaser_rebase_strm( + sqlite3_rebaser *pRebaser, + int (*xInput)(void *pIn, void *pData, int *pnData), + void *pIn, + int (*xOutput)(void *pOut, const void *pData, int nData), + void *pOut +); /* diff --git a/submodules/externals/sqlite3/sqlite3ext.h b/submodules/externals/sqlite3/sqlite3ext.h index d1d2c574a..1409370a6 100644 --- a/submodules/externals/sqlite3/sqlite3ext.h +++ b/submodules/externals/sqlite3/sqlite3ext.h @@ -292,6 +292,9 @@ struct sqlite3_api_routines { int (*bind_pointer)(sqlite3_stmt*,int,void*,const char*,void(*)(void*)); void (*result_pointer)(sqlite3_context*,void*,const char*,void(*)(void*)); void *(*value_pointer)(sqlite3_value*,const char*); + int (*vtab_nochange)(sqlite3_context*); + int (*value_nochange)(sqlite3_value*); + const char *(*vtab_collation)(sqlite3_index_info*,int); }; /* @@ -558,6 +561,10 @@ typedef int (*sqlite3_loadext_entry)( #define sqlite3_bind_pointer sqlite3_api->bind_pointer #define sqlite3_result_pointer sqlite3_api->result_pointer #define sqlite3_value_pointer sqlite3_api->value_pointer +/* Version 3.22.0 and later */ +#define sqlite3_vtab_nochange sqlite3_api->vtab_nochange +#define sqlite3_value_nochange sqlite3_api->value_nochange +#define sqlite3_vtab_collation sqlite3_api->vtab_collation #endif /* !defined(SQLITE_CORE) && !defined(SQLITE_OMIT_LOAD_EXTENSION) */ #if !defined(SQLITE_CORE) && !defined(SQLITE_OMIT_LOAD_EXTENSION) From c0058e4a5d45ba3ef65f41b467bed6df776bee75 Mon Sep 17 00:00:00 2001 From: Erwan Croze Date: Thu, 24 May 2018 11:17:22 +0200 Subject: [PATCH 17/33] Fixing liblinphone tester makefile create the raw directory --- liblinphone_tester/Makefile | 1 + 1 file changed, 1 insertion(+) diff --git a/liblinphone_tester/Makefile b/liblinphone_tester/Makefile index 673f7afe0..90d0fb69f 100644 --- a/liblinphone_tester/Makefile +++ b/liblinphone_tester/Makefile @@ -57,6 +57,7 @@ copy-files: ../submodules/linphone/tester/tester_hosts cp -rf ../submodules/linphone/tester/rcfiles assets/config_files cp -rf ../submodules/linphone/tester/sounds assets/config_files cp -rf ../submodules/linphone/tester/vcards assets/config_files + mkdir -p res/raw if test -d "../liblinphone-sdk/android-arm/share/belr/grammars"; then \ cp ../liblinphone-sdk/android-arm/share/belr/grammars/*_grammar res/raw/; \ fi From b2b3365202b8206c21acdf00ad4a7df2c2a2a3f8 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Micka=C3=ABl=20Turnel?= Date: Thu, 24 May 2018 14:39:40 +0200 Subject: [PATCH 18/33] Fix file sharing from SEND intent --- .../linphone/activities/LinphoneActivity.java | 44 ++++++++++++++----- .../linphone/chat/ChatCreationFragment.java | 30 ++++++++++--- .../org/linphone/chat/ChatListFragment.java | 4 +- .../org/linphone/chat/ChatRoomsAdapter.java | 2 +- .../org/linphone/chat/GroupChatFragment.java | 21 ++++++++- .../org/linphone/chat/GroupInfoFragment.java | 27 +++++++++--- .../org/linphone/chat/ImdnFragment.java | 2 +- .../contacts/ContactDetailsFragment.java | 6 +-- .../fragments/HistoryDetailFragment.java | 6 +-- 9 files changed, 106 insertions(+), 36 deletions(-) diff --git a/src/android/org/linphone/activities/LinphoneActivity.java b/src/android/org/linphone/activities/LinphoneActivity.java index b51a9faa7..f56c41991 100644 --- a/src/android/org/linphone/activities/LinphoneActivity.java +++ b/src/android/org/linphone/activities/LinphoneActivity.java @@ -685,6 +685,7 @@ public class LinphoneActivity extends LinphoneGenericActivity implements OnClick private void displayChat(String sipUri, String message, String fileUri, String pictureUri, String thumbnailUri, String displayName, Address lAddress) { Bundle extras = new Bundle(); extras.putString("SipUri", sipUri); + if (message != null) extras.putString("messageDraft", message); if (fileUri != null) @@ -694,14 +695,11 @@ public class LinphoneActivity extends LinphoneGenericActivity implements OnClick extras.putString("PictureUri", pictureUri); extras.putString("ThumbnailUri", thumbnailUri); } - if (sipUri == null && message == null && fileUri == null) { - changeCurrentFragment(FragmentsAvailable.CREATE_CHAT, extras); - } else { - changeCurrentFragment(FragmentsAvailable.GROUP_CHAT, extras); - } + + changeCurrentFragment(FragmentsAvailable.CREATE_CHAT, extras); } - public void goToChatCreator(String address, ArrayList selectedContacts, String subject, boolean isGoBack) { + public void goToChatCreator(String address, ArrayList selectedContacts, String subject, boolean isGoBack, Bundle shareInfos) { if (currentFragment == FragmentsAvailable.INFO_GROUP_CHAT && isGoBack) { getFragmentManager().popBackStackImmediate(); getFragmentManager().popBackStackImmediate(); @@ -710,23 +708,37 @@ public class LinphoneActivity extends LinphoneGenericActivity implements OnClick extras.putSerializable("selectedContacts", selectedContacts); extras.putString("subject", subject); extras.putString("groupChatRoomAddress", address); + + if (shareInfos != null) { + if (shareInfos.getString("fileSharedUri") != null) + extras.putString("fileSharedUri", shareInfos.getString("fileSharedUri")); + if (shareInfos.getString("messageDraft") != null) + extras.putString("messageDraft", shareInfos.getString("messageDraft")); + } + changeCurrentFragment(FragmentsAvailable.CREATE_CHAT, extras); } - public void goToChat(String sipUri) { + public void goToChat(String sipUri, Bundle shareInfos) { + Bundle extras = new Bundle(); + extras.putString("SipUri", sipUri); + + if (shareInfos != null) { + if (shareInfos.getString("fileSharedUri") != null) + extras.putString("fileSharedUri", shareInfos.getString("fileSharedUri")); + if (shareInfos.getString("messageDraft") != null) + extras.putString("messageDraft", shareInfos.getString("messageDraft")); + } + if (isTablet()) { Fragment fragment2 = getFragmentManager().findFragmentById(R.id.fragmentContainer2); if (fragment2 != null && fragment2.isVisible() && currentFragment == FragmentsAvailable.GROUP_CHAT && !emptyFragment) { GroupChatFragment chatFragment = (GroupChatFragment) fragment2; chatFragment.changeDisplayedChat(sipUri); } else { - Bundle extras = new Bundle(); - extras.putString("SipUri", sipUri); changeCurrentFragment(FragmentsAvailable.GROUP_CHAT, extras); } } else { - Bundle extras = new Bundle(); - extras.putString("SipUri", sipUri); changeCurrentFragment(FragmentsAvailable.GROUP_CHAT, extras); } @@ -734,7 +746,7 @@ public class LinphoneActivity extends LinphoneGenericActivity implements OnClick displayMissedChats(LinphoneManager.getInstance().getUnreadMessageCount()); } - public void goToChatGroupInfos(String address, ArrayList contacts, String subject, boolean isEditionEnabled, boolean isGoBack) { + public void goToChatGroupInfos(String address, ArrayList contacts, String subject, boolean isEditionEnabled, boolean isGoBack, Bundle shareInfos) { if (currentFragment == FragmentsAvailable.CREATE_CHAT && isGoBack) { getFragmentManager().popBackStackImmediate(); getFragmentManager().popBackStackImmediate(); @@ -744,6 +756,14 @@ public class LinphoneActivity extends LinphoneGenericActivity implements OnClick extras.putBoolean("isEditionEnabled", isEditionEnabled); extras.putSerializable("ContactAddress", contacts); extras.putString("subject", subject); + + if (shareInfos != null) { + if (shareInfos.getString("fileSharedUri") != null) + extras.putString("fileSharedUri", shareInfos.getString("fileSharedUri")); + if (shareInfos.getString("messageDraft") != null) + extras.putString("messageDraft", shareInfos.getString("messageDraft")); + } + changeCurrentFragment(FragmentsAvailable.INFO_GROUP_CHAT, extras); } diff --git a/src/android/org/linphone/chat/ChatCreationFragment.java b/src/android/org/linphone/chat/ChatCreationFragment.java index fef50b4fe..a3f1c4bad 100644 --- a/src/android/org/linphone/chat/ChatCreationFragment.java +++ b/src/android/org/linphone/chat/ChatCreationFragment.java @@ -76,6 +76,7 @@ public class ChatCreationFragment extends Fragment implements View.OnClickListen private String mChatRoomSubject, mChatRoomAddress; private ChatRoom mChatRoom; private ChatRoomListenerStub mChatRoomCreationListener; + private Bundle mShareInfos; @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { @@ -177,7 +178,7 @@ public class ChatCreationFragment extends Fragment implements View.OnClickListen public void onStateChanged(ChatRoom cr, ChatRoom.State newState) { if (newState == ChatRoom.State.Created) { mWaitLayout.setVisibility(View.GONE); - LinphoneActivity.instance().goToChat(cr.getPeerAddress().asStringUriOnly()); + LinphoneActivity.instance().goToChat(cr.getPeerAddress().asStringUriOnly(), mShareInfos); } else if (newState == ChatRoom.State.CreationFailed) { mWaitLayout.setVisibility(View.GONE); LinphoneActivity.instance().displayChatRoomError(); @@ -186,6 +187,23 @@ public class ChatCreationFragment extends Fragment implements View.OnClickListen } }; + if (getArguments() != null) { + String fileSharedUri = getArguments().getString("fileSharedUri"); + String messageDraft = getArguments().getString("messageDraft"); + + if (fileSharedUri != null || messageDraft != null) + mShareInfos = new Bundle(); + + if (fileSharedUri != null) { + LinphoneActivity.instance().checkAndRequestPermissionsToSendImage(); + mShareInfos.putString("fileSharedUri", fileSharedUri); + } + + if (messageDraft != null) + mShareInfos.putString("messageDraft", messageDraft); + } + + return view; } @@ -367,17 +385,17 @@ public class ChatCreationFragment extends Fragment implements View.OnClickListen mChatRoom.addParticipant(participant); } else { chatRoom = lc.getChatRoom(participant); - LinphoneActivity.instance().goToChat(chatRoom.getPeerAddress().asStringUriOnly()); + LinphoneActivity.instance().goToChat(chatRoom.getPeerAddress().asStringUriOnly(), mShareInfos); } } else { - LinphoneActivity.instance().goToChat(chatRoom.getPeerAddress().asStringUriOnly()); + LinphoneActivity.instance().goToChat(chatRoom.getPeerAddress().asStringUriOnly(), mShareInfos); } } else { mContactsSelectedLayout.removeAllViews(); - LinphoneActivity.instance().goToChatGroupInfos(null, mContactsSelected, null, true, false); + LinphoneActivity.instance().goToChatGroupInfos(null, mContactsSelected, null, true, false, mShareInfos); } } else { - LinphoneActivity.instance().goToChatGroupInfos(mChatRoomAddress, mContactsSelected, mChatRoomSubject, true, true); + LinphoneActivity.instance().goToChatGroupInfos(mChatRoomAddress, mContactsSelected, mChatRoomSubject, true, true, mShareInfos); } } else if (id == R.id.clearSearchField) { mSearchField.setText(""); @@ -395,7 +413,7 @@ public class ChatCreationFragment extends Fragment implements View.OnClickListen ProxyConfig lpc = lc.getDefaultProxyConfig(); if (lpc == null || lpc.getConferenceFactoryUri() == null) { ChatRoom chatRoom = lc.getChatRoom(ca.getAddress()); - LinphoneActivity.instance().goToChat(chatRoom.getPeerAddress().asStringUriOnly()); + LinphoneActivity.instance().goToChat(chatRoom.getPeerAddress().asStringUriOnly(), mShareInfos); } else { removeContactFromSelection(ca); } diff --git a/src/android/org/linphone/chat/ChatListFragment.java b/src/android/org/linphone/chat/ChatListFragment.java index f7fb2ec16..b98669a42 100644 --- a/src/android/org/linphone/chat/ChatListFragment.java +++ b/src/android/org/linphone/chat/ChatListFragment.java @@ -85,7 +85,7 @@ public class ChatListFragment extends Fragment implements ContactsUpdatedListene mNewDiscussionButton.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { - LinphoneActivity.instance().goToChatCreator(null, null, null, false); + LinphoneActivity.instance().goToChatCreator(null, null, null, false, null); } }); @@ -142,7 +142,7 @@ public class ChatListFragment extends Fragment implements ContactsUpdatedListene ChatRoomsAdapter adapter = (ChatRoomsAdapter)mChatRoomsList.getAdapter(); if (adapter != null && adapter.getCount() > 0) { ChatRoom room = (ChatRoom) adapter.getItem(0); - LinphoneActivity.instance().goToChat(room.getPeerAddress().asStringUriOnly()); + LinphoneActivity.instance().goToChat(room.getPeerAddress().asStringUriOnly(), null); } else { LinphoneActivity.instance().displayEmptyFragment(); } diff --git a/src/android/org/linphone/chat/ChatRoomsAdapter.java b/src/android/org/linphone/chat/ChatRoomsAdapter.java index fe510fe95..c916ffdff 100644 --- a/src/android/org/linphone/chat/ChatRoomsAdapter.java +++ b/src/android/org/linphone/chat/ChatRoomsAdapter.java @@ -244,7 +244,7 @@ public class ChatRoomsAdapter extends ListSelectionAdapter { @Override public void onClick(View v) { ChatRoom chatRoom = mRooms.get(position); - LinphoneActivity.instance().goToChat(chatRoom.getPeerAddress().asString()); + LinphoneActivity.instance().goToChat(chatRoom.getPeerAddress().asString(), null); } }); holder.delete.setVisibility(isEditionEnabled() ? View.VISIBLE : View.GONE); diff --git a/src/android/org/linphone/chat/GroupChatFragment.java b/src/android/org/linphone/chat/GroupChatFragment.java index efd54fa38..b8792d393 100644 --- a/src/android/org/linphone/chat/GroupChatFragment.java +++ b/src/android/org/linphone/chat/GroupChatFragment.java @@ -162,7 +162,7 @@ public class GroupChatFragment extends Fragment implements ChatRoomListener, Con ContactAddress ca = new ContactAddress(c, a.asString(), "", c.isFriend(), p.isAdmin()); participants.add(ca); } - LinphoneActivity.instance().goToChatGroupInfos(mRemoteSipAddress.asString(), participants, mChatRoom.getSubject(), mChatRoom.getMe() != null ? mChatRoom.getMe().isAdmin() : false, false); + LinphoneActivity.instance().goToChatGroupInfos(mRemoteSipAddress.asString(), participants, mChatRoom.getSubject(), mChatRoom.getMe() != null ? mChatRoom.getMe().isAdmin() : false, false, null); } }); @@ -215,6 +215,25 @@ public class GroupChatFragment extends Fragment implements ChatRoomListener, Con mChatEventsList = view.findViewById(R.id.chat_message_list); registerForContextMenu(mChatEventsList); + if (getArguments() != null) { + String fileSharedUri = getArguments().getString("fileSharedUri"); + if (fileSharedUri != null) { + if (LinphoneUtils.isExtensionImage(fileSharedUri)) { + addImageToPendingList(fileSharedUri); + } else { + if (fileSharedUri.startsWith("content://") || fileSharedUri.startsWith("file://")) { + fileSharedUri = LinphoneUtils.getFilePath(this.getActivity().getApplicationContext(), Uri.parse(fileSharedUri)); + } else if (fileSharedUri.contains("com.android.contacts/contacts/")) { + fileSharedUri = LinphoneUtils.getCVSPathFromLookupUri(fileSharedUri).toString(); + } + addFileToPendingList(fileSharedUri); + } + } + + if (getArguments().getString("messageDraft") != null) + mMessageTextToSend.setText(getArguments().getString("messageDraft")); + } + return view; } diff --git a/src/android/org/linphone/chat/GroupInfoFragment.java b/src/android/org/linphone/chat/GroupInfoFragment.java index 6828c823e..d7906c08c 100644 --- a/src/android/org/linphone/chat/GroupInfoFragment.java +++ b/src/android/org/linphone/chat/GroupInfoFragment.java @@ -72,6 +72,7 @@ public class GroupInfoFragment extends Fragment implements ChatRoomListener { private ChatRoom mChatRoom, mTempChatRoom; private Dialog mAdminStateChangedDialog; private ChatRoomListenerStub mChatRoomCreationListener; + private Bundle mShareInfos; @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { @@ -118,18 +119,30 @@ public class GroupInfoFragment extends Fragment implements ChatRoomListener { mParticipantsList.setAdapter(mAdapter); mAdapter.setChatRoom(mChatRoom); + String fileSharedUri = getArguments().getString("fileSharedUri"); + String messageDraft = getArguments().getString("messageDraft"); + + if (fileSharedUri != null || messageDraft != null) + mShareInfos = new Bundle(); + + if (fileSharedUri != null) + mShareInfos.putString("fileSharedUri", fileSharedUri); + + if (messageDraft != null) + mShareInfos.putString("messageDraft", messageDraft); + mBackButton = view.findViewById(R.id.back); mBackButton.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { if (mIsAlreadyCreatedGroup) { if (LinphoneActivity.instance().isTablet()) { - LinphoneActivity.instance().goToChat(mGroupChatRoomAddress.asStringUriOnly()); + LinphoneActivity.instance().goToChat(mGroupChatRoomAddress.asStringUriOnly(), mShareInfos); } else { getFragmentManager().popBackStack(); } } else { - LinphoneActivity.instance().goToChatCreator(null, mParticipants, null, true); + LinphoneActivity.instance().goToChatCreator(null, mParticipants, null, true, mShareInfos); } } }); @@ -150,7 +163,7 @@ public class GroupInfoFragment extends Fragment implements ChatRoomListener { public void onClick(View view) { if (mChatRoom != null) { mChatRoom.leave(); - LinphoneActivity.instance().goToChat(mGroupChatRoomAddress.asString()); + LinphoneActivity.instance().goToChat(mGroupChatRoomAddress.asString(), null); } else { Log.e("Can't leave, chatRoom for address " + mGroupChatRoomAddress.asString() + " is null..."); } @@ -174,7 +187,7 @@ public class GroupInfoFragment extends Fragment implements ChatRoomListener { @Override public void onClick(View view) { if (mIsEditionEnabled) { - LinphoneActivity.instance().goToChatCreator(mGroupChatRoomAddress != null ? mGroupChatRoomAddress.asString() : null, mParticipants, mSubject, !mIsAlreadyCreatedGroup); + LinphoneActivity.instance().goToChatCreator(mGroupChatRoomAddress != null ? mGroupChatRoomAddress.asString() : null, mParticipants, mSubject, !mIsAlreadyCreatedGroup, null); } } }); @@ -182,7 +195,7 @@ public class GroupInfoFragment extends Fragment implements ChatRoomListener { mAddParticipantsButton.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { - LinphoneActivity.instance().goToChatCreator(mGroupChatRoomAddress != null ? mGroupChatRoomAddress.asString() : null, mParticipants, mSubject, !mIsAlreadyCreatedGroup); + LinphoneActivity.instance().goToChatCreator(mGroupChatRoomAddress != null ? mGroupChatRoomAddress.asString() : null, mParticipants, mSubject, !mIsAlreadyCreatedGroup, null); } }); @@ -213,7 +226,7 @@ public class GroupInfoFragment extends Fragment implements ChatRoomListener { // This will remove both the creation fragment and the group info fragment from the back stack getFragmentManager().popBackStack(); getFragmentManager().popBackStack(); - LinphoneActivity.instance().goToChat(cr.getPeerAddress().asStringUriOnly()); + LinphoneActivity.instance().goToChat(cr.getPeerAddress().asStringUriOnly(), mShareInfos); } else if (newState == ChatRoom.State.CreationFailed) { mWaitLayout.setVisibility(View.GONE); LinphoneActivity.instance().displayChatRoomError(); @@ -289,7 +302,7 @@ public class GroupInfoFragment extends Fragment implements ChatRoomListener { toAdd.toArray(participantsToAdd); mChatRoom.addParticipants(participantsToAdd); - LinphoneActivity.instance().goToChat(mGroupChatRoomAddress.asString()); + LinphoneActivity.instance().goToChat(mGroupChatRoomAddress.asString(), null); } } }); diff --git a/src/android/org/linphone/chat/ImdnFragment.java b/src/android/org/linphone/chat/ImdnFragment.java index 88bcafad7..d3ecd797a 100644 --- a/src/android/org/linphone/chat/ImdnFragment.java +++ b/src/android/org/linphone/chat/ImdnFragment.java @@ -88,7 +88,7 @@ public class ImdnFragment extends Fragment { @Override public void onClick(View view) { if (LinphoneActivity.instance().isTablet()) { - LinphoneActivity.instance().goToChat(mRoomUri); + LinphoneActivity.instance().goToChat(mRoomUri, null); } else { LinphoneActivity.instance().onBackPressed(); } diff --git a/src/android/org/linphone/contacts/ContactDetailsFragment.java b/src/android/org/linphone/contacts/ContactDetailsFragment.java index a4c92ac7a..d830dd381 100644 --- a/src/android/org/linphone/contacts/ContactDetailsFragment.java +++ b/src/android/org/linphone/contacts/ContactDetailsFragment.java @@ -77,7 +77,7 @@ public class ContactDetailsFragment extends Fragment implements OnClickListener Address participant = Factory.instance().createAddress(tag); ChatRoom room = lc.findOneToOneChatRoom(lc.getDefaultProxyConfig().getContact(), participant); if (room != null) { - LinphoneActivity.instance().goToChat(room.getPeerAddress().asStringUriOnly()); + LinphoneActivity.instance().goToChat(room.getPeerAddress().asStringUriOnly(), null); } else { ProxyConfig lpc = lc.getDefaultProxyConfig(); if (lpc != null && lpc.getConferenceFactoryUri() != null && !LinphonePreferences.instance().useBasicChatRoomFor1To1()) { @@ -87,7 +87,7 @@ public class ContactDetailsFragment extends Fragment implements OnClickListener mChatRoom.addParticipant(participant); } else { room = lc.getChatRoom(participant); - LinphoneActivity.instance().goToChat(room.getPeerAddress().asStringUriOnly()); + LinphoneActivity.instance().goToChat(room.getPeerAddress().asStringUriOnly(), null); } } } @@ -134,7 +134,7 @@ public class ContactDetailsFragment extends Fragment implements OnClickListener public void onStateChanged(ChatRoom cr, ChatRoom.State newState) { if (newState == ChatRoom.State.Created) { mWaitLayout.setVisibility(View.GONE); - LinphoneActivity.instance().goToChat(cr.getPeerAddress().asStringUriOnly()); + LinphoneActivity.instance().goToChat(cr.getPeerAddress().asStringUriOnly(), null); } else if (newState == ChatRoom.State.CreationFailed) { mWaitLayout.setVisibility(View.GONE); LinphoneActivity.instance().displayChatRoomError(); diff --git a/src/android/org/linphone/fragments/HistoryDetailFragment.java b/src/android/org/linphone/fragments/HistoryDetailFragment.java index e6754af9f..a1a62063a 100644 --- a/src/android/org/linphone/fragments/HistoryDetailFragment.java +++ b/src/android/org/linphone/fragments/HistoryDetailFragment.java @@ -109,7 +109,7 @@ public class HistoryDetailFragment extends Fragment implements OnClickListener { public void onStateChanged(ChatRoom cr, ChatRoom.State newState) { if (newState == ChatRoom.State.Created) { mWaitLayout.setVisibility(View.GONE); - LinphoneActivity.instance().goToChat(cr.getPeerAddress().asStringUriOnly()); + LinphoneActivity.instance().goToChat(cr.getPeerAddress().asStringUriOnly(), null); } else if (newState == ChatRoom.State.CreationFailed) { mWaitLayout.setVisibility(View.GONE); LinphoneActivity.instance().displayChatRoomError(); @@ -199,7 +199,7 @@ public class HistoryDetailFragment extends Fragment implements OnClickListener { Address participant = Factory.instance().createAddress(sipUri); ChatRoom room = lc.findOneToOneChatRoom(lc.getDefaultProxyConfig().getContact(), participant); if (room != null) { - LinphoneActivity.instance().goToChat(room.getPeerAddress().asStringUriOnly()); + LinphoneActivity.instance().goToChat(room.getPeerAddress().asStringUriOnly(), null); } else { ProxyConfig lpc = lc.getDefaultProxyConfig(); if (lpc != null && lpc.getConferenceFactoryUri() != null && !LinphonePreferences.instance().useBasicChatRoomFor1To1()) { @@ -209,7 +209,7 @@ public class HistoryDetailFragment extends Fragment implements OnClickListener { mChatRoom.addParticipant(participant); } else { room = lc.getChatRoom(participant); - LinphoneActivity.instance().goToChat(room.getPeerAddress().asStringUriOnly()); + LinphoneActivity.instance().goToChat(room.getPeerAddress().asStringUriOnly(), null); } } } else if (id == R.id.add_contact) { From e97429174f3f3123a5246b8b2b1da195d451e414 Mon Sep 17 00:00:00 2001 From: Erwan Croze Date: Thu, 24 May 2018 15:12:17 +0200 Subject: [PATCH 19/33] Fix the possibility to delete nothing in list --- src/android/org/linphone/ui/ListSelectionHelper.java | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/src/android/org/linphone/ui/ListSelectionHelper.java b/src/android/org/linphone/ui/ListSelectionHelper.java index 8a039f84b..490fc4ef8 100644 --- a/src/android/org/linphone/ui/ListSelectionHelper.java +++ b/src/android/org/linphone/ui/ListSelectionHelper.java @@ -64,9 +64,11 @@ public class ListSelectionHelper { mEditButton.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { - mAdapter.enableEdition(true); - mTopBar.setVisibility(View.GONE); - mEditTopBar.setVisibility(View.VISIBLE); + if (mAdapter.getCount() > 0) { + mAdapter.enableEdition(true); + mTopBar.setVisibility(View.GONE); + mEditTopBar.setVisibility(View.VISIBLE); + } } }); From facac17734779ce65683b4689669483d76e40ebc Mon Sep 17 00:00:00 2001 From: Erwan Croze Date: Thu, 24 May 2018 15:13:37 +0200 Subject: [PATCH 20/33] Fix username and displayname for none contact in chat group --- .../linphone/chat/ChatCreationFragment.java | 6 +++++- .../org/linphone/chat/GroupInfoAdapter.java | 3 ++- .../org/linphone/contacts/ContactAddress.java | 20 +++++++++++++++++++ .../contacts/SearchContactsListAdapter.java | 9 +++++---- 4 files changed, 32 insertions(+), 6 deletions(-) diff --git a/src/android/org/linphone/chat/ChatCreationFragment.java b/src/android/org/linphone/chat/ChatCreationFragment.java index a3f1c4bad..6645e8076 100644 --- a/src/android/org/linphone/chat/ChatCreationFragment.java +++ b/src/android/org/linphone/chat/ChatCreationFragment.java @@ -288,7 +288,11 @@ public class ChatCreationFragment extends Fragment implements View.OnClickListen private void addSelectedContactAddress(ContactAddress ca) { View viewContact = LayoutInflater.from(LinphoneActivity.instance()).inflate(R.layout.contact_selected, null); if (ca.getContact() != null) { - ((TextView) viewContact.findViewById(R.id.sipUri)).setText(ca.getContact().getFullName()); + String name = (ca.getContact().getFullName() != null && !ca.getContact().getFullName().isEmpty()) ? + ca.getContact().getFullName() : (ca.getDisplayName() != null) ? + ca.getDisplayName() : (ca.getUsername() != null) ? + ca.getUsername() : ""; + ((TextView) viewContact.findViewById(R.id.sipUri)).setText(name); } else { ((TextView) viewContact.findViewById(R.id.sipUri)).setText(ca.getAddressAsDisplayableString()); } diff --git a/src/android/org/linphone/chat/GroupInfoAdapter.java b/src/android/org/linphone/chat/GroupInfoAdapter.java index 4577b3625..9671b87c5 100644 --- a/src/android/org/linphone/chat/GroupInfoAdapter.java +++ b/src/android/org/linphone/chat/GroupInfoAdapter.java @@ -85,7 +85,8 @@ public class GroupInfoAdapter extends BaseAdapter { final LinearLayout isAdmin = view.findViewById(R.id.isAdminLayout); final LinearLayout isNotAdmin = view.findViewById(R.id.isNotAdminLayout); - name.setText(c.getFullName()); + name.setText((c.getFullName() != null) ? c.getFullName() : + (ca.getDisplayName() != null) ? ca.getDisplayName() : ca.getUsername()); if (c.hasPhoto()) { LinphoneUtils.setThumbnailPictureFromUri(LinphoneActivity.instance(), avatar, c.getThumbnailUri()); } diff --git a/src/android/org/linphone/contacts/ContactAddress.java b/src/android/org/linphone/contacts/ContactAddress.java index 8d1bfa4f8..812cd2536 100644 --- a/src/android/org/linphone/contacts/ContactAddress.java +++ b/src/android/org/linphone/contacts/ContactAddress.java @@ -85,6 +85,26 @@ public class ContactAddress implements Serializable { return addr; } + public String getDisplayName() { + if (address != null) { + Address addr = Factory.instance().createAddress(address); + if (addr != null) { + return addr.getDisplayName(); + } + } + return null; + } + + public String getUsername() { + if (address != null) { + Address addr = Factory.instance().createAddress(address); + if (addr != null) { + return addr.getUsername(); + } + } + return null; + } + public String getPhoneNumber() { return phoneNumber; } diff --git a/src/android/org/linphone/contacts/SearchContactsListAdapter.java b/src/android/org/linphone/contacts/SearchContactsListAdapter.java index fa454258f..af72390de 100644 --- a/src/android/org/linphone/contacts/SearchContactsListAdapter.java +++ b/src/android/org/linphone/contacts/SearchContactsListAdapter.java @@ -33,6 +33,7 @@ import org.linphone.LinphoneUtils; import org.linphone.R; import org.linphone.activities.LinphoneActivity; import org.linphone.core.Address; +import org.linphone.core.Factory; import org.linphone.core.ProxyConfig; import org.linphone.core.SearchResult; @@ -63,7 +64,6 @@ public class SearchContactsListAdapter extends BaseAdapter { private ProgressBar progressBar; private boolean mOnlySipContact = false; private View.OnClickListener listener; - private int oldSize; public List getContacts() { return contacts; @@ -82,7 +82,6 @@ public class SearchContactsListAdapter extends BaseAdapter { progressBar = pB; setContactsSelectedList(null); setContactsList(contactsList); - oldSize = 0; } private boolean contactIsSelected(ContactAddress ca) { @@ -172,7 +171,6 @@ public class SearchContactsListAdapter extends BaseAdapter { if (ContactsManager.getInstance() != null) { ContactsManager.getInstance().getMagicSearch().resetSearchCache(); } - oldSize = 0; return; } @@ -213,7 +211,6 @@ public class SearchContactsListAdapter extends BaseAdapter { } } - oldSize = search.length(); contacts = result; resultContactsSearch.setAdapter(this); this.notifyDataSetChanged(); @@ -256,6 +253,10 @@ public class SearchContactsListAdapter extends BaseAdapter { holder.name.setVisibility(View.VISIBLE); holder.name.setText(contact.getAddress().getDisplayName()); } + } else if (address != null) { + Address tmpAddr = Factory.instance().createAddress(address); + holder.name.setVisibility(View.VISIBLE); + holder.name.setText((tmpAddr.getDisplayName() != null) ? tmpAddr.getDisplayName() : tmpAddr.getUsername()) ; } else { holder.name.setVisibility(View.GONE); } From bb208448cbf56e3c1e593597480d6d9624a94c0f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Micka=C3=ABl=20Turnel?= Date: Fri, 25 May 2018 10:18:14 +0200 Subject: [PATCH 21/33] Fix video call and ZRTP popups not showed when the device is locked --- src/android/org/linphone/call/CallActivity.java | 3 +++ src/android/org/linphone/fragments/StatusFragment.java | 3 +++ 2 files changed, 6 insertions(+) diff --git a/src/android/org/linphone/call/CallActivity.java b/src/android/org/linphone/call/CallActivity.java index 41bbe4883..fba1bb537 100644 --- a/src/android/org/linphone/call/CallActivity.java +++ b/src/android/org/linphone/call/CallActivity.java @@ -1143,6 +1143,9 @@ public class CallActivity extends LinphoneGenericActivity implements OnClickList private void showAcceptCallUpdateDialog() { dialog = new Dialog(this); dialog.requestWindowFeature(Window.FEATURE_NO_TITLE); + dialog.getWindow().addFlags(WindowManager.LayoutParams.FLAG_TURN_SCREEN_ON); + dialog.getWindow().addFlags(WindowManager.LayoutParams.FLAG_SHOW_WHEN_LOCKED); + dialog.getWindow().addFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON); Drawable d = new ColorDrawable(ContextCompat.getColor(this, R.color.colorC)); d.setAlpha(200); dialog.setContentView(R.layout.dialog); diff --git a/src/android/org/linphone/fragments/StatusFragment.java b/src/android/org/linphone/fragments/StatusFragment.java index 0d08ef11f..60c3818b3 100644 --- a/src/android/org/linphone/fragments/StatusFragment.java +++ b/src/android/org/linphone/fragments/StatusFragment.java @@ -402,6 +402,9 @@ public class StatusFragment extends Fragment { ZRTPdialog = new Dialog(getActivity()); ZRTPdialog.requestWindowFeature(Window.FEATURE_NO_TITLE); + ZRTPdialog.getWindow().addFlags(WindowManager.LayoutParams.FLAG_TURN_SCREEN_ON); + ZRTPdialog.getWindow().addFlags(WindowManager.LayoutParams.FLAG_SHOW_WHEN_LOCKED); + ZRTPdialog.getWindow().addFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON); Drawable d = new ColorDrawable(ContextCompat.getColor(getActivity(), R.color.colorC)); d.setAlpha(200); ZRTPdialog.setContentView(R.layout.dialog); From a085e6424ee71aeeedded830f0d29ac9e17acf4d Mon Sep 17 00:00:00 2001 From: Erwan Croze Date: Fri, 25 May 2018 14:15:41 +0200 Subject: [PATCH 22/33] Fix back action in group chat + get friend in search conctacts --- .../linphone/activities/LinphoneActivity.java | 33 ++++++++++++------- .../contacts/SearchContactsListAdapter.java | 10 ------ 2 files changed, 21 insertions(+), 22 deletions(-) diff --git a/src/android/org/linphone/activities/LinphoneActivity.java b/src/android/org/linphone/activities/LinphoneActivity.java index f56c41991..1b92e1f15 100644 --- a/src/android/org/linphone/activities/LinphoneActivity.java +++ b/src/android/org/linphone/activities/LinphoneActivity.java @@ -240,7 +240,7 @@ public class LinphoneActivity extends LinphoneGenericActivity implements OnClick @Override public void onRegistrationStateChanged(Core lc, ProxyConfig proxy, RegistrationState state, String smessage) { AuthInfo authInfo = lc.findAuthInfo(proxy.getRealm(), proxy.getIdentityAddress().getUsername(), proxy.getDomain()); - + refreshAccounts(); if(getResources().getBoolean(R.bool.use_phone_number_validation) @@ -424,6 +424,7 @@ public class LinphoneActivity extends LinphoneGenericActivity implements OnClick fragment = new ChatListFragment(); break; case CREATE_CHAT: + checkAndRequestWriteContactsPermission(); fragment = new ChatCreationFragment(); break; case INFO_GROUP_CHAT: @@ -1275,7 +1276,8 @@ public class LinphoneActivity extends LinphoneGenericActivity implements OnClick int readContactsI = -1; for (int i = 0; i < permissions.length; i++) { Log.i("[Permission] " + permissions[i] + " is " + (grantResults[i] == PackageManager.PERMISSION_GRANTED ? "granted" : "denied")); - if (permissions[i].compareTo(Manifest.permission.READ_CONTACTS) == 0) + if (permissions[i].compareTo(Manifest.permission.READ_CONTACTS) == 0 || + permissions[i].compareTo(Manifest.permission.WRITE_CONTACTS) == 0) readContactsI = i; } @@ -1548,17 +1550,24 @@ public class LinphoneActivity extends LinphoneGenericActivity implements OnClick public boolean onKeyDown(int keyCode, KeyEvent event) { if (keyCode == KeyEvent.KEYCODE_BACK) { - if (currentFragment == FragmentsAvailable.DIALER - || currentFragment == FragmentsAvailable.CONTACTS_LIST - || currentFragment == FragmentsAvailable.HISTORY_LIST - || currentFragment == FragmentsAvailable.CHAT_LIST) { - boolean isBackgroundModeActive = LinphonePreferences.instance().isBackgroundModeEnabled(); - if (!isBackgroundModeActive) { - stopService(new Intent(Intent.ACTION_MAIN).setClass(this, LinphoneService.class)); - finish(); - } else if (LinphoneUtils.onKeyBackGoHome(this, keyCode, event)) { + switch(currentFragment) { + case DIALER : + case CONTACTS_LIST: + case HISTORY_LIST: + case CHAT_LIST: + boolean isBackgroundModeActive = LinphonePreferences.instance().isBackgroundModeEnabled(); + if (!isBackgroundModeActive) { + stopService(new Intent(Intent.ACTION_MAIN).setClass(this, LinphoneService.class)); + finish(); + } else if (LinphoneUtils.onKeyBackGoHome(this, keyCode, event)) { + return true; + } + break; + case GROUP_CHAT: + LinphoneActivity.instance().goToChatList(); return true; - } + default: + break; } } return super.onKeyDown(keyCode, event); diff --git a/src/android/org/linphone/contacts/SearchContactsListAdapter.java b/src/android/org/linphone/contacts/SearchContactsListAdapter.java index af72390de..e723294e1 100644 --- a/src/android/org/linphone/contacts/SearchContactsListAdapter.java +++ b/src/android/org/linphone/contacts/SearchContactsListAdapter.java @@ -165,16 +165,6 @@ public class SearchContactsListAdapter extends BaseAdapter { } public void searchContacts(String search, ListView resultContactsSearch) { - if (search == null || search.length() == 0 || search.trim().length() == 0) { - contacts = getContactsList(); - resultContactsSearch.setAdapter(this); - if (ContactsManager.getInstance() != null) { - ContactsManager.getInstance().getMagicSearch().resetSearchCache(); - } - return; - } - - search = search.trim(); List result = new ArrayList<>(); String domain = ""; From c026ae9c0c9b087e49958d7e2e72a6baa147c99f Mon Sep 17 00:00:00 2001 From: Erwan Croze Date: Fri, 25 May 2018 14:16:40 +0200 Subject: [PATCH 23/33] Add permission asking in chat creation --- src/android/org/linphone/chat/ChatCreationFragment.java | 6 ++++-- src/android/org/linphone/chat/ChatListFragment.java | 1 + 2 files changed, 5 insertions(+), 2 deletions(-) diff --git a/src/android/org/linphone/chat/ChatCreationFragment.java b/src/android/org/linphone/chat/ChatCreationFragment.java index 6645e8076..f558ccdb1 100644 --- a/src/android/org/linphone/chat/ChatCreationFragment.java +++ b/src/android/org/linphone/chat/ChatCreationFragment.java @@ -203,12 +203,12 @@ public class ChatCreationFragment extends Fragment implements View.OnClickListen mShareInfos.putString("messageDraft", messageDraft); } - return view; } @Override public void onResume() { + ContactsManager.addContactsListener(this); super.onResume(); InputMethodManager inputMethodManager = (InputMethodManager) getActivity().getSystemService(INPUT_METHOD_SERVICE); @@ -222,6 +222,7 @@ public class ChatCreationFragment extends Fragment implements View.OnClickListen if (mChatRoom != null) { mChatRoom.removeListener(mChatRoomCreationListener); } + ContactsManager.removeContactsListener(this); super.onPause(); } @@ -425,6 +426,7 @@ public class ChatCreationFragment extends Fragment implements View.OnClickListen @Override public void onContactsUpdated() { - mSearchAdapter.searchContacts(mSearchField.getText().toString(), mContactsList); + ContactsManager.getInstance().fetchContactsAsync(); + updateList(); } } diff --git a/src/android/org/linphone/chat/ChatListFragment.java b/src/android/org/linphone/chat/ChatListFragment.java index b98669a42..5aa8da0f1 100644 --- a/src/android/org/linphone/chat/ChatListFragment.java +++ b/src/android/org/linphone/chat/ChatListFragment.java @@ -208,6 +208,7 @@ public class ChatListFragment extends Fragment implements ContactsUpdatedListene if (mChatRoomDeletionPendingCount > 0) { mWaitLayout.setVisibility(View.VISIBLE); } + LinphoneActivity.instance().refreshMissedChatCountDisplay(); } @Override From 781f3a8da4ea297f5e4e4075dbf3cbcff5fa57fd Mon Sep 17 00:00:00 2001 From: Erwan Croze Date: Fri, 25 May 2018 15:07:14 +0200 Subject: [PATCH 24/33] Fix bug in creation chat --- src/android/org/linphone/chat/ChatCreationFragment.java | 1 - 1 file changed, 1 deletion(-) diff --git a/src/android/org/linphone/chat/ChatCreationFragment.java b/src/android/org/linphone/chat/ChatCreationFragment.java index f558ccdb1..13b9c75d2 100644 --- a/src/android/org/linphone/chat/ChatCreationFragment.java +++ b/src/android/org/linphone/chat/ChatCreationFragment.java @@ -426,7 +426,6 @@ public class ChatCreationFragment extends Fragment implements View.OnClickListen @Override public void onContactsUpdated() { - ContactsManager.getInstance().fetchContactsAsync(); updateList(); } } From 3a15500f1cdbb9ae930f50a9855462f56856fad5 Mon Sep 17 00:00:00 2001 From: Erwan Croze Date: Fri, 25 May 2018 15:24:08 +0200 Subject: [PATCH 25/33] Fix message notification action --- src/android/org/linphone/activities/LinphoneActivity.java | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/src/android/org/linphone/activities/LinphoneActivity.java b/src/android/org/linphone/activities/LinphoneActivity.java index 1b92e1f15..5ddcf8380 100644 --- a/src/android/org/linphone/activities/LinphoneActivity.java +++ b/src/android/org/linphone/activities/LinphoneActivity.java @@ -697,7 +697,11 @@ public class LinphoneActivity extends LinphoneGenericActivity implements OnClick extras.putString("ThumbnailUri", thumbnailUri); } - changeCurrentFragment(FragmentsAvailable.CREATE_CHAT, extras); + if (sipUri == null) { + changeCurrentFragment(FragmentsAvailable.CREATE_CHAT, extras); + } else { + changeCurrentFragment(FragmentsAvailable.GROUP_CHAT, extras); + } } public void goToChatCreator(String address, ArrayList selectedContacts, String subject, boolean isGoBack, Bundle shareInfos) { From c7c7148029ff697d9c20fa1c4589733b74b789de Mon Sep 17 00:00:00 2001 From: Simon Morlat Date: Fri, 25 May 2018 15:25:38 +0200 Subject: [PATCH 26/33] upgrade linphone and belle-sip --- submodules/belle-sip | 2 +- submodules/linphone | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/submodules/belle-sip b/submodules/belle-sip index 5e518b0a9..411e1c3ea 160000 --- a/submodules/belle-sip +++ b/submodules/belle-sip @@ -1 +1 @@ -Subproject commit 5e518b0a9447dd0ddb49a56c5ba78888810bf401 +Subproject commit 411e1c3ea8752927cff2ebb2c0170351f3879bab diff --git a/submodules/linphone b/submodules/linphone index 3cf801a63..a6db4780b 160000 --- a/submodules/linphone +++ b/submodules/linphone @@ -1 +1 @@ -Subproject commit 3cf801a6320522bc022e7b2b790b2400707d17fc +Subproject commit a6db4780bc42c5de0f88bace988fe69bd55e694b From 986a45b88a0cb8a34644204b91d8e68de16b96d3 Mon Sep 17 00:00:00 2001 From: Erwan Croze Date: Fri, 25 May 2018 16:03:40 +0200 Subject: [PATCH 27/33] Update transifex --- res/values-ar/strings.xml | 8 +++++++ res/values-fr/strings.xml | 29 ++++++++++++------------ res/values-ja/strings.xml | 12 ++++++++++ res/values-ru/strings.xml | 47 ++++++++++++++++++++++++++++++++------- res/values-sv/strings.xml | 7 ++++-- res/values-tr/strings.xml | 24 ++++++++++++++++++++ res/values/strings.xml | 16 ++++++------- 7 files changed, 111 insertions(+), 32 deletions(-) diff --git a/res/values-ar/strings.xml b/res/values-ar/strings.xml index 42b421acb..f6988a09b 100644 --- a/res/values-ar/strings.xml +++ b/res/values-ar/strings.xml @@ -16,6 +16,7 @@ جهات اتصال لِنْفُونْ اسم المستخدم + معرِّف المستخدم (اختياري) رقم الهاتف الاسم المعروض كلمة السر @@ -110,6 +111,7 @@ استخدم عنوان البريد الإلكتروني لتأكيد الحساب استعمل اسم المستخدم وكلمة السر عوضا عن رقم هاتفك لأي غرض سيجري استخدام رقم هاتفي ؟ + \nبفضل رقم هاتفك، يستطيع أصدقاؤك العثور عليك بسهولة.\n\nسوف ترى في دفتر عناوينك من يستخدم لِنْفُونْ كما سيتمكن أصدقاؤك كذلك من الوصول إليك عبر لِنْفُونْ.\n \nسيجدك أصدقاؤك بسهولة إن ربطت حسابك برقم هاتفك\\n\nسوف تجد في دفتر عناوينك من يستخدم لِنْفُونْ وسيتمكن أصدقاؤك من الوصول إليك بواسطة لِنْفُونْ كذلك.لِنْفُونْ.\n يمكنك استخدام رقم هاتفي واحد مع حساب لنفون واحد.\n\nإن ربطت رقم هاتفك مع حساب آخر لكنك تود استخدام هذا الحساب، يمكنك ببساطة ربطه مع رقم هاتفك تلقائيا وسيُنقَل هذا الأخير إلى هذا الحساب. @@ -178,6 +180,7 @@ قُرِأ سُلِّم أعد اﻹرسال + حدث خطأ خلال فتح هذا الملف. مُسجَّل غير مُسجَّل @@ -207,9 +210,12 @@ صنف IP : صبيب الرفع : صبيب التنزيل : + تقدير صبيب التنزيل : توصيل ICE : دقة الفيديو المُرسَل : دقة الفيديو المُستلَم : + معدل عرض الفيديو المُرسَل : + معدل عرض الفيديو المُستلَم : معدل ضياع المُرسِل : معدل ضياع المتلقي : صِوان الارتعاش : @@ -330,7 +336,9 @@ مهلة التشغيل التلقائي (بالميلي-ثواني) أرسل DTMF مع التدفق (RFC2833) أرسل DTMF خارج التدفق (SIP INFO) + مهلة المكالمة (بالثواني) عنوان العلبة الصوتية + استخدمْ لِنْفُونْ كتطبيق هاتفك الافتراضي المحادثة خادم المشاركة diff --git a/res/values-fr/strings.xml b/res/values-fr/strings.xml index fc9dc5c8c..d252e8878 100644 --- a/res/values-fr/strings.xml +++ b/res/values-fr/strings.xml @@ -158,6 +158,8 @@ Vos amis pourront vous joindre plus facilement si vous associez votre compte à Voulez-vous supprimer la discussion sélectionnée ? Voulez-vous supprimer le message sélectionné ? Votre correspondant est en train de taper... + %s écrit + %s écrivent Petite Moyenne Grande @@ -176,30 +178,29 @@ Vos amis pourront vous joindre plus facilement si vous associez votre compte à Traitement de l\'image, cela peut prendre quelques secondes selon sa taille Lu Reçu + Reçu Envoyé Renvoyer - Une erreur est survenue en tentant d\'ouvrir ce fichier. Infos Admin - Nommez ce groupe + Nommer le groupe Infos Admin Participants Quitter le groupe - Filtrer les contacts - groupe créé - groupe détruit - %s a été ajouté - %s a quitté - nouvel appareil pour %s - appareil de %s retiré - nouveau sujet : %s - %s est admin + Rechercher un contact + Vous avez rejoint le groupe + Vous avez quitté le groupe + %s a rejoint le groupe + %s a quitté le groupe + Nouveau sujet : %s + %s est devenu(e) admin %s n\'est plus admin - Souhaitez-vous vraiment quitter ce groupe ? + Vous êtes maintenant admin + Voulez vous vraiment quitter cette conversation ? Quitter - Voulez-vous supprimer et quitter les discussions sélectionnées ? -  :  + Voulez vous vraiment quitter et supprimer les conversations selectionnées ? + Etat du message Enregistré Non enregistré diff --git a/res/values-ja/strings.xml b/res/values-ja/strings.xml index 05219bf0e..a70ccac4f 100644 --- a/res/values-ja/strings.xml +++ b/res/values-ja/strings.xml @@ -11,10 +11,12 @@ Linphone Android %s Linphone Core %s + GNU General Public License V2\n © 2010-2017 Belledonne Communications www.linphone.org linphoneに問い合わせる ユーザー名 + ユーザID(オプション) 電話番号 表示名 パスワード @@ -44,6 +46,7 @@ また今度 そのうち いいえ + OK はい アカウントをリンクする @@ -85,6 +88,8 @@ ユーザー名かパスワードが異なります Cisco Systems,Incが提供するOpenH264ビデオコーデックをダウンロードしますか? Cisco Systems,Incが提供するOpenH264ビデオコーデックをダウンロードします。 + OpenH264をダウンロードしています。 + OpenH264コーデックを使うためには再起動する必要があります%s Cisco Systems,Incが提供するOpenH264ビデオコーデックがダウンロードされました。 エラーが発生しました。のちほど再試行してください。 ネットワーク接続を確認してください。 @@ -164,7 +169,10 @@ 保存した画像 エラー、画像が保存できません。 お待ちください... + このメッセージは暗号化されていません。 + このメッセージを復号化することが出来ませんでした。 画像の処理は、ファイルサイズによっては数秒かかることがあります + 再送信 登録済 登録なし @@ -191,6 +199,8 @@ ICE 接続: 送信ビデオ解像度: 受信ビデオ解像度: + 送信ビデオfps: + 受信ビデオfps: 送信ロス: 受信ロス: エンコーダー: @@ -216,6 +226,7 @@ ビジーです ユーザーがおりません 互換性のないメディアパラメーター + あなたの相手の通信幅が狭いのでビデオが使えません ネットワークに到達できません 不正な証明書です 無断 @@ -309,6 +320,7 @@ DTMFをインバンド(RFC2833)で送信する DTMFをSIP(情報)で送信する 音声メールのURI + Linphoneを標準の電話アプリとして使う チャット 共有サーバー diff --git a/res/values-ru/strings.xml b/res/values-ru/strings.xml index 718af1e54..37872fbc9 100644 --- a/res/values-ru/strings.xml +++ b/res/values-ru/strings.xml @@ -29,6 +29,7 @@ Повторить Отменить Принять + Открыть Продолжить О программе Отклонить @@ -67,19 +68,19 @@ Укажите URL-адрес конфигурации Транспорт Ваш SIP-адрес - Использовать учетную запись Linphone - Использовать учетную запись SIP - Выбор удаленной конфигурации + Использовать аккаунт Linphone + Использовать SIP-аккаунт + Удаленная конфигурация Подтвердите код страны и введите свой номер телефона Мы отправили SMS-сообщение с кодом подтверждения на ваш номер телефона: Чтобы завершить проверку номера телефона, введите 4-значный код ниже:\n Введите имя пользователя, адрес электронной почты и пароль для вашей учетной записи Linphone Отображаемое имя (необязательно) - Использовать учетную запись Linphone - Использовать учетную запись SIP - Выбор удаленной конфигурации + Использовать аккаунт Linphone + Использовать SIP-аккаунт + Удаленная конфигурация Получить и применить - Имя пользователя + Авторизация Выполняется калибровка эхоподавления Введите имя пользователя Ваша учетная запись еще не проверена. @@ -111,6 +112,7 @@ Использовать адрес электронной почты для проверки учетной записи Вместо номера телефона использовать имя пользователя и пароль Для чего будет использоваться мой номер телефона? + \nВашим друзьям будет проще связаться с вами, если вы свяжете свою учетную запись со своим номером телефона.\n\n В вашей адресной книге вы увидите, кто использует Linphone, а ваши друзья смогут узнать, что вы также зарегистрированы в Linphone.\n \nВашим друзьям будет проще связаться с вами, если вы свяжете свою учетную запись со своим номером телефона.\n\nВ вашей адресной книге вы увидите, кто использует Linphone, а ваши друзья смогут узнать, что вы также зарегистрированы в Linphone.\n Номер телефона можно использовать только с одной учетной записью Linphone.\n\nЕсли ваш номер уже был связан с другой учетной записью, но вы предпочитаете использовать его, просто свяжите его сейчас, и ваш номер будет автоматически перенесен в эту учетную запись. @@ -159,6 +161,8 @@ Вы действительно хотите удалить выбранный разговор? Вы действительно хотите удалить выбранное сообщение? Собеседник пишет... + %s печатает... + %s печатают... Маленький Средний Большой @@ -177,7 +181,28 @@ Обработка изображения может занять несколько секунд в зависимости от размера файла Прочитано Доставлено + Не доставлено + Отправлено Переслать + При открытии этого файла возникает ошибка. + Информация + Администратор + Информация + Администратор + Участники + Покинуть группу + новое устройство для %s + устройство для %s удалено + новая тема: %s + %s это администратор + %s больше не администратор + %1: %2 + Теперь вы администратор + Вы больше не администратор + Не удалось создать чат-комнату + Покинуть + + Статус доставки Зарегистрирован Не зарегистрирован @@ -233,6 +258,7 @@ Предупреждение: служба не готова Ошибка + Ошибка передачи файла Невозможно создать адрес назначения из %s Неизвестная ошибка Вызов отклонен @@ -245,7 +271,7 @@ Неавторизован Ошибка сети Загрузка не удалась. Проверьте сетевое подключение или повторите попытку позже. - Не удалось загрузить или применить профиль удаленного конфигурирования... + Не удалось загрузить или применить профиль удаленной конфигурации... Удаленное конфигурирование Вы хотите изменить URI конфигурирования? @@ -280,6 +306,7 @@ Изменить пароль Использовать по умолчанию Пароль изменен + Разрешить push-уведомление Учетные записи SIP Учетная запись по умолчанию @@ -335,6 +362,7 @@ Отправить вне потока DTMFs(SIP INFO) Таймаут вызова(в секундах) URI голосовой почты + Использовать Linphone в качестве приложения для звонков по умолчанию. Чат Сервер обмена @@ -367,6 +395,7 @@ Дополнительно Отладка Отладка + Использовать Java-регистратор Подписка Фоновый режим Включить анимацию @@ -458,4 +487,6 @@ Выйти из конференции Служба Linphone Уведомление Linphone + Тема группового чата + Информация о групповом чате diff --git a/res/values-sv/strings.xml b/res/values-sv/strings.xml index f0440abc6..c1db2445c 100644 --- a/res/values-sv/strings.xml +++ b/res/values-sv/strings.xml @@ -111,6 +111,7 @@ Använd e-postadress för kontovalidering Använd ditt användarnamn och lösenord istället för ditt telefonnummer Vad ska mitt telefonnummer användas för? + \nTack vare ditt telefonnummer kommer dina vänner att hitta dig lättare.\n\n Du kommer att se i din adressbok vem som använder Linphone och dina vänner kommer veta att de kan nå dig på Linphone också.\n \nDina vänner hittar dig lättare om du kopplar ditt konto till ditt telefonnummer\n\nDu ser i din adressbok vilka som använder Linphone och dina vänner vet att de når dig på Linphone också.\n Du kan bara använda ditt telefonnummer med ett Linphone-konto.\n\nOm du redan har länkat ditt nummer till ett annat konto, men du föredrar att använda det här, kopplar du bara det nu och ditt nummer flyttas automatiskt till det här kontot. @@ -140,8 +141,8 @@ Ange ett nummer eller en adress - Inget samtal i din historia - Inget missat samtal i din historia + Inga samtal i din historik + Inga missade samtal i din historik Vill du ta bort vald samtalslog? Idag Igår @@ -178,6 +179,7 @@ Läs Levererades Skicka igen + Ett fel uppstår när filen öppnas. Registrerad Inte registrerad @@ -334,6 +336,7 @@ Skicka in-band DTMF (RFC2833) Skicka ut-band DTMF (SIP INFO) Röstbrevlåda URI + Använd Linphone som standard telefonapp Chatt Delar server diff --git a/res/values-tr/strings.xml b/res/values-tr/strings.xml index 084bc32f4..5a348647e 100644 --- a/res/values-tr/strings.xml +++ b/res/values-tr/strings.xml @@ -29,6 +29,7 @@ Yeniden dene İptal Kabul et + Sürdür Hakkında Yoksay @@ -111,6 +112,7 @@ Hesap doğrulama için e-posta adresi kullan Telefon numaranız yerine kullanıcı adınızı ve parolanızı kullanın Telefon numaram ne için kullanılacak? + \nTelefon numaranız sayesinde arkadaşlarınız sizi daha kolay bulacak.\n\n Adres defterinizde kimlerin Linphone kullandığını göreceksiniz ve arkadaşlarınız da size Linphone\'dan ulaşabileceklerini bilecek.\n \nEğer hesabını telefon numarana bağlarsan arkadaşların seni daha kolay bulacak\n\nAdres listende kimlerin Linphone kullandığını göreceksin ve arkadaşların da sana Linphone üzerinden ulaşabileceğini bilecek.\n Telefon numaranı yalnızca tek Linphone hesabıyla kullanabilirsin.\n\nEğer hesabını zaten başka bir hesaba bağladıysan ama bunu kullanmak istiyorsan, şimdi bağla ve numaran kendiliğinden bu hesaba taşınsın. @@ -159,6 +161,8 @@ Seçilen görüşmeyi silmek ister misiniz? Seçilen iletiyi silmek ister misiniz? Karşıdan yazılıyor... + %s yazıyor... + %s yazıyor... Küçük Orta Büyük @@ -177,7 +181,24 @@ Görüntü işleniyor, dosyanın boyutuna bağlı olarak bir kaç saniye sürebilir Okundu Ulaştırıldı + Gönderildi Yeniden gönder + Bu dosya açılırken bir hata oluştu. + Yönetici + Yönetici + Katılımcılar + Kümeden ayrıl + %s için yeni aygıt + %s için aygıt kaldırıldı + yeni konu: %s + %s yöneticidir + %s artık yönetici değildir + %1: %2 + Şimdi yöneticisiniz + Artık yönetici değilsiniz + Konuşma odası oluşturma başarısız + Ayrıl + Kayıtlı Kayıtsız @@ -233,6 +254,7 @@ Uyarı: hizmet hazır değil Hata + Dosya aktarım hatası %s dan gidilecek adres inşa edilemiyor Tanımlanmayan hata Reddedilen çağrı @@ -335,6 +357,7 @@ Bant dışı DTMF(SIP INFO) gönder Çağrı zaman aşımı (saniye türünde) Sesli posta adresi + Linphone\'u öntanımlı telefon uygulaması olarak kullan Konuşma Paylaşım sunucusu @@ -458,4 +481,5 @@ Görüşmeden çık Linphone Hizmeti Linphone Bildirimi + Küme konuşma odası konusu diff --git a/res/values/strings.xml b/res/values/strings.xml index 70a0169e3..65bbb6b91 100644 --- a/res/values/strings.xml +++ b/res/values/strings.xml @@ -197,16 +197,16 @@ An error occurs when opening this file. Info Admin - Name your group + Name the group Info Admin Participants Leave the group - Contact filter - group created - group destroyed - %s added - %s leaved + Search a contact + You have joined the group + You have left the group + %s has joined + %s has left new device for %s device for %s removed new subject: %s @@ -216,9 +216,9 @@ You are now admin You are no longer admin Chat room creation failed - Do you really want to leave this group? + Do you really want to leave this conversation? Leave - Do you want to delete and leave the selected conversations? + Do you really want to delete and leave the selected conversations? Delivery status From 53d4ecfe60fc03a099d9b9e72f7230b2c1a0d77b Mon Sep 17 00:00:00 2001 From: Jehan Monnier Date: Fri, 25 May 2018 14:39:56 +0200 Subject: [PATCH 28/33] improve gradle build script --- .gitignore | 4 +- build.gradle | 17 ++---- .../AndroidManifestLibrary.xml | 0 .../build.gradle | 56 ++++++++++++++++-- liblinphone_tester/AndroidManifest.xml | 2 +- prepare.py | 45 +++----------- res/raw/cpim_grammar | Bin 5437 -> 0 bytes res/raw/hold.mkv | Bin 919618 -> 0 bytes res/raw/incoming_chat.wav | Bin 51244 -> 0 bytes res/raw/notes_of_the_optimistic.mkv | Bin 594025 -> 0 bytes res/raw/oldphone_mono.wav | Bin 156120 -> 0 bytes res/raw/ringback.wav | Bin 24620 -> 0 bytes settings.gradle | 1 + 13 files changed, 69 insertions(+), 56 deletions(-) rename AndroidManifestLibrary.xml => liblinphone-sdk/AndroidManifestLibrary.xml (100%) rename libLinphoneAndroidSdk.gradle => liblinphone-sdk/build.gradle (64%) delete mode 100644 res/raw/cpim_grammar delete mode 100644 res/raw/hold.mkv delete mode 100644 res/raw/incoming_chat.wav delete mode 100644 res/raw/notes_of_the_optimistic.mkv delete mode 100644 res/raw/oldphone_mono.wav delete mode 100644 res/raw/ringback.wav create mode 100644 settings.gradle diff --git a/.gitignore b/.gitignore index 13a14ee3e..1b94dd9f7 100644 --- a/.gitignore +++ b/.gitignore @@ -14,7 +14,7 @@ default.properties doc gen liblinphone-junit-report.xml -liblinphone-sdk +liblinphone-sdk/android-* liblinphonetester_*.zip libs libs-debug @@ -29,8 +29,6 @@ proguard-project.txt project.properties res/.DS_Store res/raw/lpconfig.xsd -res/raw/rootca.pem -res/raw/*_grammar submodules/externals/build/cunit/CUnit/ submodules/externals/build/ffmpeg/arm/ submodules/externals/build/ffmpeg/x86 diff --git a/build.gradle b/build.gradle index 393558930..a388ff7d6 100644 --- a/build.gradle +++ b/build.gradle @@ -48,16 +48,13 @@ dependencies { implementation 'com.google.firebase:firebase-messaging:15.0.2' } implementation 'com.android.support:support-v4:26.0.1' + implementation project(':liblinphone-sdk') } if (firebaseEnable()) { apply plugin: 'com.google.gms.google-services' } -//// Submodule Dir ///// -def submoduleDir = ['submodules/mediastreamer2/java/src'] -//////////////////////// - ///// Exclude Files ///// def excludeFiles = [] // Exclude firebase file if not enable @@ -68,7 +65,7 @@ if (!firebaseEnable()) { excludeFiles.add('**/gcm*') println '[Push Notification] Firebase enabled' } -excludeFiles.add('**/mediastream/MediastreamerActivity.java') + excludeFiles.add('src/android/org/linphone/tutorials/*.java') def excludePackage = [] @@ -110,20 +107,19 @@ android { packaged { initWith release signingConfig null + matchingFallbacks = ['debug', 'release'] } } sourceSets { main { manifest.srcFile 'AndroidManifest.xml' - def srcDirs = submoduleDir - srcDirs.addAll(['src/linphone-wrapper', 'src/android']) + def srcDirs = ['src/android'] java.srcDirs = srcDirs resources.srcDirs = srcDirs aidl.srcDirs = srcDirs renderscript.srcDirs = srcDirs res.srcDirs = ['res'] assets.srcDirs = ['assets'] - jniLibs.srcDirs = ['libs'] java.excludes = excludeFiles // Exclude some useless files @@ -138,16 +134,13 @@ android { sourceSets { androidTest { manifest.srcFile 'AndroidManifest.xml' - def srcDirs = submoduleDir - srcDirs.addAll(['src/android', - 'src/androidTest']) + def srcDirs = ['src/android', 'src/androidTest'] java.srcDirs = srcDirs resources.srcDirs = srcDirs aidl.srcDirs = srcDirs renderscript.srcDirs = srcDirs res.srcDirs = ['res'] assets.srcDirs = ['assets'] - jniLibs.srcDirs = ['libs'] java.excludes = excludeFiles // Exclude some useless files diff --git a/AndroidManifestLibrary.xml b/liblinphone-sdk/AndroidManifestLibrary.xml similarity index 100% rename from AndroidManifestLibrary.xml rename to liblinphone-sdk/AndroidManifestLibrary.xml diff --git a/libLinphoneAndroidSdk.gradle b/liblinphone-sdk/build.gradle similarity index 64% rename from libLinphoneAndroidSdk.gradle rename to liblinphone-sdk/build.gradle index c50010b49..811af8468 100644 --- a/libLinphoneAndroidSdk.gradle +++ b/liblinphone-sdk/build.gradle @@ -21,18 +21,36 @@ allprojects { } } + configurations { javadocDeps } + + + apply plugin: 'com.android.library' + dependencies { compile 'org.apache.commons:commons-compress:1.16.1' javadocDeps 'org.apache.commons:commons-compress:1.16.1' } -def srcDir = ['submodules/mediastreamer2/java/src', 'src/linphone-wrapper'] +def srcDir = ['../submodules/mediastreamer2/java/src'] +def rootSdk + +if (file('android-arm64/share/linphonej/java/org/linphone/core/Factory.java').exists() ) + rootSdk = 'android-arm64' +else if (file('android-arm/share/linphonej/java/org/linphone/core/Factory.java').exists() ) + rootSdk = 'android-arm' +else if (file('android-armv7/share/linphonej/java/org/linphone/core/Factory.java').exists() ) + rootSdk = 'android-armv7' +else if (file('android-x86/share/linphonej/java/org/linphone/core/Factory.java').exists() ) + rootSdk = 'android-x86' + +srcDir += [rootSdk+'/share/linphonej/java/org/linphone/core/'] + def excludePackage = [] @@ -42,6 +60,13 @@ excludePackage.add('**/**tester**') excludePackage.add('**/LICENSE.txt') android { + + + buildTypes { + release {} + debug{} + } + defaultConfig { compileSdkVersion 26 buildToolsVersion "26.0.0" @@ -59,10 +84,10 @@ android { main { manifest.srcFile 'AndroidManifestLibrary.xml' java.srcDirs = srcDir - resources.srcDirs = srcDir aidl.srcDirs = srcDir + assets.srcDirs = ["${buildDir}/sdk-assets/assets/"] renderscript.srcDirs = srcDir - jniLibs.srcDirs = ['libs'] + jniLibs.srcDirs = ['../libs'] java.excludes = ['**/mediastream/MediastreamerActivity.java'] @@ -79,7 +104,7 @@ android { ///////////// Task ///////////// task(releaseJavadoc, type: Javadoc, dependsOn: "assembleRelease") { - source = ['submodules/mediastreamer2/java/src', 'src/linphone-wrapper'] + source = srcDir excludes = ['**/mediastream/MediastreamerActivity.java', '**/**.html', '**/**.aidl'] @@ -109,3 +134,26 @@ task sdkZip(type: Zip) { include '*' archiveName newSdkName } + +task copyAssets(type: Sync) { + from rootSdk + into "${buildDir}/sdk-assets/assets/org.linphone.core" + include '**/*.png' + include '**/*.pem' + include '**/*.mkv' + include '**/*.wav' + include '**/*_grammar' + + //rename '(.*)', '$1'.toLowerCase() + eachFile { + path = path.toLowerCase() //to workaround case insensitive fs (macosx) + println("Syncing sdk asset ${sourcePath} to ${path}") + } + doFirst { + println("Syncing sdk assets into root dir ${destinationDir}") + } + // do not copy those + includeEmptyDirs = false + +} +project.tasks['preBuild'].dependsOn 'copyAssets' \ No newline at end of file diff --git a/liblinphone_tester/AndroidManifest.xml b/liblinphone_tester/AndroidManifest.xml index c733b0e01..b465b495e 100644 --- a/liblinphone_tester/AndroidManifest.xml +++ b/liblinphone_tester/AndroidManifest.xml @@ -20,7 +20,7 @@ - + ttQ?1J+ttG(9|gv}>+W4gwsV`szQn1sCD7zhL+=$cmKjUH&|N5=Bq z4gJ{6t8Lkl`Ld|m{Q&j&gL@(S4<0?;dUPDITvUoZli{Gp3mc#lb zR*kijy_$xZPUyWoF3*E)5^Jt^c<23W)$YoA-<0rd78aU{9wye9rM;S%?Gzk0q8eJ5 zglJZGV~g9qW^&h87{z+iD zVqs^7zHQ(xLKyz%?qT2nDtCf{fW*(>jW0Mrd9SXV9s4S-F9Ml~GY;+NZcny9U=3Zp z-%zpcN(pb~PmIbQUQxd8+T9aN=7xR-!8@!LYv+S%f*Zo>DG2QUr@+dShk>L}Lr0eu zy=60S7E#T+!F9bV&4YdF z@H&P2&fhJNTR%ST6iJvE?u5hV*{%29sv z`^=72zu316P7v0+EslM7kKc02%!7l?qNfsF_&kA71rmF1g|))sU|$oCd0>Sy6J!GH zdUq!oChZW)w;BkHB>o(ckmb(5^qfF|`oU7B=nT;%Ho==b)fYw&!Mk@HCdghk7BS_) zLIfTk7>jz;J>nv5A8&!5VnJIU?%yj{s}8A`c=P?R$r(LZd3GwBon{@e^3WbM2PF|0 zE^H31>JJxX84^Yi5*HO5vmMGMU7CC<7H)GPBy7W3G}m+Ue*pP_cvaRZn?THbR=BA+ zLhAin1PYYgJVcQ)FQ;H57+mM}l>Fhj!h=I!pdk*=6q&MP zY!U34og`hdLmSe!q|ixaopeD+Yvb}WSB3V4?7oj=ox2)(dm?={YW`O=qf zlv`;f^OzmLZ+1a9H%Jq)yG+(exg$?nU=sBPLq7-ek9^IG7@^{w0zf#acgo_ZB5)Z# zYAFk}!b|O4RZA-Vysgj}!AJ9HLk;#w^C;Dv=liDYw-blg8eT|u07PHd52|s2YOV7M zS4gTaGdPbl3SOYlEM$TxMM*N+YChbM&N^IxSBKKHyz`0R41@59XKEB4IB zm`qV8l8KR1Ooq^lwHpkNvJwQ;_`ERm3y8tf#U0j&#S;eis?NvkF=+_gvry5LZ`34p zJ@uNmW1A=lS@ab)@7L8BH#q$RtXKOCmq4j{ewLPlbrMcTs`U%+GO_Nn=W#7UZxQ^L z$rGJbZ%%-q&d^{|;m2yw@#A|XB}jWa0(K+R9;6tj`b!0aDE1#Ipm)@NAk z0zC8cu!&@IOc|_x7Rp>t?=Ic=G|}PCz7%?11$c48fkz@cT;}L|Mxh0mQy`wB;alGL zY0Rermz%+-JplgGnwim8(uUWwP;fEEk5>FFZwJs0V};t5~6(Oepdiztu&tq;hE5v+0w0O6#FzWQrSp#=-*S~+DaE}5mDEFBV0 z>Mk&m@t`FB2|VAm0}EMFjVCVVKO0Qy>yd?_Ok8~W&EPU}wd1hkL1BIW^BQmRW| zRTnt*JuQ{lL@_K=p_yq;fBN&B{_scD`<(vrSKdVka?9WT9v~4~%;_KhoI>N9`JDds k@6$KD*Wz6a02LwgFo5)!9U++^6Hvj+t diff --git a/res/raw/hold.mkv b/res/raw/hold.mkv deleted file mode 100644 index a3e00966f9e7bc5e17177a47487243f905118a9a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 919618 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

    4jII`ZWOgYJ#{{ zZeAr+90A+Qy~-hRkm9G>iM4M~*$ZMx7{eMK>*Dz-z3_`+#hb*d$K*#;lNHT&8GRTB zXjgveA4h1z(XP-vefBy(sQ4uUW8N%E{&3;dmMXmggJb|OmoGAOcAWhYlS7kVwad0U zXtL}L_(}Yt>S)S!pJ*}(789-vCN&^T`ZoO!lX75YzuqfT?htDe)kpXg`9YjPA!8tM zw!nK~P$q3$5$%8zmM!k#wzi%bbQXBa1Z0+!4}cQenCR*1k$o%@9OXkk(d+e<#zP+m z=U_G$t91r}A9T90GfItB8L57w8=I^#Ek#!K1(o-m-Oibiw1!29MVl{u?aSWx&a)he zHL1I@GRMB+gtC6kSq9#c0l6hrDis{1@&svB7F6#MR+B@MaeWb`uz~Ocw4W0=?dHA0 zU6}_CKdhzanqe%B-Ogcj6z9F>MTseSYm)?~lENH#KiII>4V>p_8d31~BBh_2)ZXqbUeIo@yG^aVfK7Ykf9R2# zZbF*}@u0;fs~(?fRHjS>jZ@+q^X_iGP1?%x5Yt%tX~UJ!pl((Oq${!EtkK7PT4Us3 zl{E+~(9=+Rnl^?OQ3GjGkOslk^KN`*c^w(wf1gPgy?vxfB~UI~zkNTPx`e>PvyS!9 z<=>OSugh$Qc~{71bwH=W#!@z%aZQ(D4=^N#0jHnQ{yeI>J78pK`BD{vR|kh?wb zw?#CSR?=itD{?M&o4P6on94~uj8$%*bXrRz82E{x6C|C#;-G!c*L5XCW;sJ)jioli zG)&0!h+1?_(=03%d&NR~1Go<)Kfry^dFOLAq9)F?-q6M}m1Be&l>g{9s$V)3&HeV6 zdGc34f(Nq~$t1WOqUoV8M_5K-cgp_Wm=eotq}HKdGog zk-M$hCa0f5RIFlJ7<5Yv(Zz3AdT-pw!L99>9-?U>tzloj7M1qyCO|${zo}Nayt}qO z#k!xi&i*@q?01TXN|Z;_-TNr;veM(S?)yuu|4t@mUmi%7#Ro`OkZyo*F-spx5io>= zvnXvsA1y-H&>g*etRX<<9XguA^}Pd}3$Ml7BYTo`B6wk78eG?<#45DK7fXzDEjs5V zlH!r&e0*GhLQ+lQ+V{^2r0tKWZY5H(&+BXfj`IP%jRG`4=g9DD(>N|fth6U8W8Hr{ z!mjUCW`{**o4v*C4r!$}oK>4=Dus4>6c!u7bqiu05h@x@vSFM=M}%xf%+9|RXL6c& zpKN^udSK?I-d%v5pCYYUJi>yN;UJdkFXlH>yS;r1XB86(BmM|kPunNN8@IxPR%h7{SL#i4*Y;12)LmTn zE5pNYgBe`QxE2qOvc>QEPY%lXoB1(nR~Q|!2ypc}KTnJ4$yx5HPUe~tj0 zM?M_=R-O&I1jBm*I>rlEHheVhgb*7>F}2W zLXPL!K)0EAq+LZi&gFYC*bZTv?321d{7aplIpeBV(9if18}k2J*Z{;B)fCC--^9>r zqaXZ9j8oj(PHPv5ubg`!0^eLWaNcb+jyaEA3W zN%ui=0G|%po`Omm!%6IextC#=a;1@_ReF?@=yw2p?ix4=aA@cZI6u~Dj$U1w?;CvF zu6~Ut9h(@D6Vx+sy?qs3UHHJMfo}0WYvPnUzsnsvY@Q}89zBWuo<}`qlAk6w$#~{a zv=$LixX$YsQDk;2A?y5p7)#e#u=^ja1aNE%+u+y`^f!cTrDb9%8%aA_vW;OQeRmq9 zTCL#v4`o{WeI%!iH)s;a)M zx_gHmsh-&7*eq=*@KP5F8{pMe^I)zLYyw2sTR|s~NU;b6za&ZAt5GDkD2T4+x6DdG z-(Fm{jmB%ZMnhW^6SsTz_yoUo{o)rQg|MQ9gb@5L3kPA&KVz-n#Jt=xONCzGEz1&2 zkS+rbxYUjEhoT3xkdA$Y(1lV~cK6ge-OA^id#@ z%C>NIp;howOmaDBuQ8NVeDyc+E_|?2<>Y>cj`<6c{u=cGvbIAA-l!XBQei;p*~5L+ z8MKAibmOa|;>`7af}j)iMHM)v6-gX6KZ^`3zoD znswi4&9)|cNTbd4C<(qPJjOaL@+L{Egb1H+b73OTm*5fb3Uh9z z#oC~$H!4ntPqwTzaB~+(0IDMX2Qe8OL3ttFHlk+i0(~aJMyPxO(Ys|_N;5Yf4UBH2 zaoVoFMWOKh79?m|*Rm1$n6gQ^EM#1DuIIsJdx}J%yH~l`oqBdW>Am4l<%|W|o1CVo zwB<=zDIfWtOT_uD3=8-WRm&Xfjs$$$+B?nLl+_xPYBl)hP}V=|*t1|wG^Z+io2Wa3 zyJM}$`+Uua;03P!hX!QiPEmm!l?p@4fCB`M>F?XueBDbIN@)(`k;dW>O}kpGU;a! zZE7hn%jdSHr478IzM7V#1*wY(%`05i9W^w8?XkS8XdsVBi)RcImZieClD=^wC$Y|X zx-^)a!T4Pt&W^fqSn>_sLuf{gI;JAZdo%0N)Pa_|`vfgFU&NoJh-DZaB zYOBiHLoKr-Z+&aG`E!1$fQ$uXmJA8x6O-i4NH*tSQh5fw6+zMCG}>o+AywyP_HeH= z31z2S^g;TF*cu6X!c#29M&jxt^nRe=6;V#g7DA|KFJ8oGb-VJ+Q|~W;QjI2KB<~RA89piWVt+ zu~p2qh;J*E(>`Mr*Pi_F80@xnq#?TOZ|xUScIcG9Ym=X2c5r}n2n3h(n>ZMGOse!O z&SvspU0>4kv+6qZhQDN#xmDmfY($+eGl9A{bjf|}Dctd*_{=X$7)6oPfMcsBr#rXw z?JbXda2L9S_NySz7U>G@j&#oE%c1%VH3)3{H@-l2$>3G)az!6HY=o6f$ z&9GiX*@0-zRW%$>7$GQb&=`5-D`_dc*!z4*qZ!Fk@Df6e@D`SxM$!L~kv zq(Q)PMy#c&u;Ko2{0jqGH`c%n1!>2haN z#B{!7^4SQ0`Ju&u=7-ut^0qv>?>=6TqfZHi7KyHNTW7l}+BPw7Olj3nh0Z!-&#m!#-V{XWh`y?aKKd(@<9cHpix z+OfKg`3{kFYfM76d^OZKVP!uBiI#8hdDRdEY|jvScm zs2%#S;idbsGDTniDG#(v5b_Yg-1>c7DhjUVFB3ab>pYwLfWe zeD~mJkcft#i(@pDv*~b|em^DMUrKuGoP6^uYTfFhi9XIcc3wyt=<5s7`?Tnzs(rJe z&xU}ODFJ{2rtthZbZEN3;MeCPwO?Tq5u7WJ%1tp?5Gf^D^Rj8~w8L^6@x1EB#zQMP=2H%}J*sS%*O!w}NNQ0Yo&pE*sN~B<<^_S$JN#BO22EFV z%;gXkdGh}-$1{B1EXkcP<|ZYhFaNUUEfgR_6PR1{cT}WUMJS-CP%4>m&~?5!+6DZ7 z?u+i=u*IjmGBto>NobnS$L+s0Rb#;~#gj(qroRF-%?zMmr<8nz*&jX$A9jD@76NzkG;Xx9{ zE-h+&s^(>D2AP5CKLh?MxrXiZbS_?=!$pa=k_b}X+x_Ng6fY%?v4cQBU>Sb{5zzV# z!Z%laJUJ;-7d-bzP$^m7-Eh+#fuq$LL#BM?-GYAQ;T{)s=_R+r=)jCmIsivaG4qod zkkMce0L93lmOXD{4vd;)^S+$roFzdst7HXA>5C zxmRCtpcV0mUz{*x5~<0bj{4Fb3LRo_IHX49l4&STdo4+euWL|T+Ljsp1$+O4df*`6 z6B3UvpVd4ko*;}VgO9ckOHVH(C9qZ#$oc3e*NTc)|Me}J{uuTQ+xhgaTk1%p@49Yq z`8i1>Tj7G@SXP~LC<0bOa2$K>2CF z3hsl>b!DV~P~*!?82_@n!9Ht!Ap7+B-b_x%_+uzr2|bdpNWO2VAc5u^#84$YpoCuD zJcKLnlBJ4xtFuY$iIm|6W&IT5Wr?**8t^L0AhjKw@{^^M&usu zhVYP8(Jh5&tL0##*Bm9nWqo6>ovuq%XoCEYvGw0RTr{s zptHpO+Fo~G)S@;wGS#q_^5wd1hQUqWy~?VlBlGYo*~raiRtIt(MVI4VoK8e=p56%n zC+9$Bh-`UZXMWG`dZEpiBboL9+*&va32RO&M;DHXp)A4fz?e=7e2(}FEGesu%k_v; zT=3`bdb?r?ZiY_ZQ`+#Bbz!b2-|XojGPA924prm&`bqt(^RodnDG&j|CB<^6jWv_I zrb*BunFr$Bk)aAXQ!ZxT7W_vCx%-PTHNBqVl?(x;RWe;R-J=fzfgAqcT zi`UyWSj|2woms1Wr)|#H{(X2O12|@K(Gc}Omhrv+%j@Z#9vtGuD3sPSN(dG9 zqUpB`CH0B~1CWWb0EZ{-=m(chk0A_bsqMI5t1;>x+iM5y3bxSABt&(KRnbv zOiwhuD<2~V&1uGVfYrE*LCWonaYWxC%_8X+>hQg+=eO3cP(1Yk%K4e@h^cvp*Ne?k zXWknafQJD=9z&!ASG>Ik0@`cSdnOXAZ%jPH6tiiyZbL#Um|<%?r$Wc`xde8Kx_P`t z=w%t3&A8!B`A|d})pDOJ>%=&;gbR0)^=bN2sYGLIK1t&avfoRfA`;JukK=(WFd)sN zpW^8{)!fC*)JkMey2bnV`{cXpsFZR92GVAR9vg0_FccTBmX%(GAhcH@RGF3KLeYZN z8g3o}=+!(04kDG;M4j4aVU$!vvN@lCxPJPYfbceBabqnEP`n{PfAWx;dTH$pd%uMP zA7~cD7Ya@ly3j0;C4|_%DV|7|MKR`sC0W1N3-sc$(J6g%ha2m-a*EYBxOs5S1Zsx# z#y7+>6WyDt)W~J%zZDscs~hp&1I$&xpG|;7kABvEQZouQ!jS?V!j~Jp0lS^bBhkYT zf;D4|F@K_t7O4@+boyNstc(td2wq-I)GFP(GSk^a>w19<<`I6Yvtfq_2_eCCycm0T zh~z7<4FvPzwQX@n7(j*vGChW{JtmEYb6~FXYqDj!c4n!s#+`lgpk1p|**(V@k|9nZ z6Gp+wmvq4FZvS|~{smobX0Ng-unNS##eiH4%;u_K?@|HvOdMs?JG3KA0gGxy@qI>b zDmU3;gaBkHAlIXx(-G?iN*SlPK4u=7nM1ngo3t=&x2OpD1C)Euvw4Op)L~Er_;FYR z=G+g3Xc^pZ$GByU`}h|oIX)$?WFT#GS_tQSirnAui@l)d5974u;oA!lk58+B4^n_! zk0B{52{x>73nb3JLd$D$sjI!jR*fcGxZG>Rcz#252?Z(fb<1FNicfM-@RysZKhIc; zlaB-!m#_JX@rhk~BxhG`s><8~(Cu97E3H3n^2nsTk3T9Drb2-OFaXe>IY)Jny`_%} zUw~3$2{e4eJUnSPjr1<9g8*WgP<9?XGRW{f?gu%shfUXp+~*p9LD+b3z>5=ZAWTdS z58PIZedWXPN@N}#8Wd~hwVq&oyrX%nksWY*10;I{{)pO-KG4Oy{gJFdU@j`d*Shw@ z;i;v^V?MBW-EmmwwL`lmYF((9cgwWLh^WfyFtpnAfg;r*)}Zsm-sc6>udo@R-vW%m zV!rx}u_L4H+2QxID(cc4&^qS;@!W`tqIKvvY_0BfqAvAQT5I2rYO{Y^5Jh^2n!i{v zC-Ojzz~kzc{KHB_q%zOyTk8vO#4^OPhM9sY6gnruxKs{BUVB^5uVa{>9+&-sVcR|& zg@8ef&IR5=0O1}|H)tRI7;B|;?bWk+(eu+R_{Dj*8pSFw%g;R_Rnd9>+UKMPY^$vj zqauPdpjIX;0riwI_Mz0$0y0Qv1P6HXIvS<5l24D1L3&+ZvxIn1jAntdd^j(-2AH`o z2z-L;`mj{~yWEGGtXg^8Mb}2>n4uX1GWX_|Wo`e`Xap2)lknL-yfUf*{tU!{&{k5N z8vjt-J?o{8j_sqT$2=3pl5Nf=)*J2`laB7kolfLM?IXz`7ZTwbpcuc6iC!Qv1j?M(_BLtMo{lUYmr_;0p%+JBZmKs|AN4?-cgcj!0Vx!6{m$5mGbwlc#CnxG0rOd>@fpo;$1l0O{!%GCN|1!&YwEZi{J^4p>~g5 z^Bfpca6k*00`zwT&viarOxL)zazR8rk;~?qzv3!dtmBhvX(y-CQ7X%fhLLqCasQT7rWwW zbh`fDlIebDDE8tmY-mC_uGiRp3?wV3duR6F=64$e9$Qv3KT5{n_7CG}#68KC5%MpL zkYrB1y+BOCb&5@)LV0^&w2FkCs3VeppR!-vH3x;p2?py6%B_`odaj=FjsT%^gb~VQ9-nTT@$d zU04P4uCW27MYe&tM=!1DZ))Lb*#xS}1NlgjnKveK^cRrR0 zay;XIR`@Fa$sYmeFDz2g%XBOGkHga+_t%u14!Ow_9U4~T;NlY~3&98cMoQ>#YCDUl zTHH~fYWhYOn3;OU^D2K3y;Olm=3z#!KKQKL>?ir5$ds7&221=5LQg{uc)#5k-~co7 zKVXL+U5;_krJspgvfN8>_y7cx38O_n;cWV>dHFP1k^SMT52eLM5{r(X(IgW-joPM* zx*hj(eU{B;D_f)V*!RdE6#qO}55^NcWEa-CJHdNXV~x!O;%Y9}FzcNk__d~l0=(Aj zMbnFG=Ag3LH-;-*V%fhoXogKS_cxexN@h~z=Afvr#x#Buz^VA*BXHVzavQGlLgZU=RR9mQX zr9(=KE+iqbl(^onInBr6G)vshj3^6HxTKndH)Q0|IEXbRakk#v)Dk*`Ab6^E=tpTDCzIHwOo&cvxTqLou3}4 zHNJusj8SVoKtBzVbKaQkouEo|htfpSUDYmgL zR=W=S^;I^me;*vOLIdSn0`x!g5)rNVoB80gADGzX;5pW1mwvHrm8!Tq@uqFbp1<*b zM4e-FUQO44V>PyI+qN1Tjn&w0?4+@+#&#OpNn_i#@!t2d*0;XD=f|Fn(V3aOFZ|oZ znLTsjEjGlf*Ih%Yo_Y*eofn_Qqj{*VH`N}(YA>5@GnlVHB2||f2(~{Ob&o5@At6<8 z;DEUn2otHH2q3+FL^Ocz29e0D8jb~x?U9nL?fA{t(Gy5=*|$5`yDUja`M7+3V^lnW$l8p!B5uQ5 z%cVi<1zTk}``%-WSBN864C~A(Xbw$j0cIdfw8SOelkf%jIRf%Ts&+L0Mv}Hn;XJrE z$43jyq_R=2FHJ%nXhQLWb%0>9c3i>lQ&sf-TQ13BR9w&h8O78T7_~s|vpq#NnXU+C z_zV#yx5shRh4lhUzD4p&%Hog-(Gr!%Vr`g7=`pv$&hEkcBb4h z3bY$v?Vxs>#6j%+fWe&r`bOf9dT8p48}8~!|2+ukpVLDI{8tpuG3WE2%T@M{Af3%v zwOK~9zD{m2ntdhg5uW9x)<4C0B0!Qi)>}xJY!@i@ZiGB5Jz7i!ue+3Nmp?JaDLW(c zfEj~8L`by~Cv#4?iTlM?n_~QQ!Y?T9i{hqYaj;W@*Z!$dbWuzkTAT9MG9OK4`+pcN zbI)X2?c^>NJ)vj3iAV!lF#9%1K}kl_ldLaNiff+}wsXnM^O}*`!oRwJ!}lJbe`=yr zc?}1w(0-J^I~N1ed~wjb-ygNuJyrE=FK^K&Wh2kJo-vfBp}rSt=bqB+nS`b_7V1W} zAy!^A;YbXE&qK~@f{Ca!rkrWhv(cR4Sm-46Q-*8T&3a%R4j?3?YCS7MaYQseLr42- zHl`m7ori3_y|8H;_nGDEyt*r?wdvy@H3E(X2O)<_&j4P_;8^-0Wq5(}r(!zjMs8Nn zvZK|!P?ucSkXuD+hEbOTLsL&+o*eL1F_7?4J9JGKALIeSzQxDY=3izU+>ox;ow{!) zfNps~Hl?(dYBp{3e6+BxtA`|E;E$>+7cMLY8(Y6E|7`@Xuut*HETisGmd3DGmy}$K z+!%4Qs(e*GbkbQ6Ft&iujv6eqw&UyWDR$3stiY8FUC-Yu zp|Oc{!p;x7bcGlyrv!_9pJ$T3wLqvzfq|#jwKOxUAAAPDl^5Oyu+bm`OL<`X#eC$; z_J@$DImhWK>wZ z3_@NqcTvIeMXH1cW*EK}{`O}z`%BmRFPi}xYZ{{siKyLdWe4YQ_Kb!~N>5|BylVH9 zYEZw@KizMIq9oHCSl~O0*36NCKy&?pH(e*5g2LA;&RX|_m?TNGCLG6*I^mG8FmpTv zAd{+1qul&5O%T!sGV|+;kK+Ia(}B0?q`jPSJ1kyrpI0C@b!Ch81>AR2js7|-t|dFc zD9d0GP>X{dr~u$KGLYR-n?fR?YRLgRZq&?zrX7RTIZ;nhU^XaaRhW316ukP+1^dkH zpZF;4Os&ZI&@vAuWrg$DRY{JDO(#hU$^r;0N1XW3?$5Gor;xTse~k8qY&q_d$*T;p zwD&FO<8Q5U+^&1VG&*VaW3DFMU0C*bM~!Ys`k1~A1A^C06#gLptQpvMVaxmgXVgI2 zN7as};=-qS?^E$X$K1lVoRPFux!~JG8kN1_R}*rboxXi(WeWNlz(u2ppy_e1R_Q02tii?Unmm zcAsjiV4+Iey70HGSw><=7pM4p2FN1Cd*Ucag#bJrEy*gM-V_U}A#=ZRI`vymNV2&g zSI|<}-=~@4;!I6H+eK(!zzhUrepL8Rad%yfmn84eM8Xu{lYa${(lmh2o+JviY~p)pu?S}7V( zW!P(Pq?<_BS|;i^oog|y#u@t6?M4+9Zv&IOUPm?X!T`|~gtf`%ej+ZTgcH3=4iBY& z_;xC!0*nbspM|oqq$c418SxBgV$d+3uT_&;=7u|6p`*l3KH1lrisJfd?giU0q{2Ne z*M!h9!O1{ezyxd4X>m;|0nBi6Uvd=_w~IF}o!8(P{-pO1_oWtb_BCIo1;Rjbsa%x6 zXgZpG%o!L5Ap4^>H}>s!&o;is;CPALuecPdxayI61qKR}_RxLog|#u7ZVN7rIMiV- zeuFO&?D)4`xaH`(Ek!nUtLA0&V9&Vrc+Vz*z#ix+{iH(VH^>t|+tu?gWYZZGVCvI< z@DHgw!uQU0#e^0^1H)lEa2R%mw}!F_`iLj1p3#{2Ry0AKg0U03&eP{prSwJX020C? z=ohaSI)54=COJL1BF2~Bj4{1IWk~U=V_DpyO*(%vot6yh24^7vf&LEwa^GI{bTf4| z)sJ*Xyx;WW96p(O@D-{7@T3s`GFRIwVrq-^U>Rih)9Gjj)Njn1Y}Om|#AF7k5#58#4Ekb@7<-F(ll@uC{Ld zx>q3BNZZ${`1*+pUjmCQgr_xMjdqDk-TP8egp3u4;^jam`}=~z>X$#%QEXIb57>uV zp0H1#1e0)3wH=Q|f{gm;AdXV!WyakP{{29h!XfP({WI!{Ffk~Bcm7Q|zA@tv&t&&n zI?<2r3GF751xWt}l0&|`WyQ8sM$EH>KEEyGMLY22K$h(R@`Ed?B^eb8V@g*B11*RO zRl{*%=R{44bmOp-&&QUXV`4Qzkdn@fH06V0O3^UO>AQHB3f4K{PaB}{SJI0u0H^Ih zXo#e^WRnfd3WJDxQ8{{Soo>07f)vZaO?ii5kLC*=Zjo&5@g94=7n#g0)||F%psCMz z#8b8Dj3@s>QadfB2W2aY0bL!+qamj*{Z0zGnZf4)4tfAk@ibs*ys?~A2PNvjv_H_h z>o8GQyMdg6N&4+&$C#BA_x>LBh!qK`6z~Y^`=#;uYCmsE6XcLD?JP?<(^TLp5^( zxA$e%u6VIaT{KK!=`SF}qXs{ejD}Hqqt23b!;g1coFl2YZ|Ad7209q-T9t=-pONKhPT@X&5~w^+^%f?9BkRX`0*MIBc5%>K7v z-~&G(#-nyEkbs{IQ%c88CUh4@c!67&C%+r40oy+p&mvlxLN|?zX=~jMTq&t0c9J3>K_Bvj0;t) z+WT`tQu|tq-KMj)fsQ-%k_sQv<<{St%n$`WdMfy=$X6rykVs?QD#eiQB9!dE6kK8$ zY*%>rr3S{8-BNWx z@rc)hM2WQ9_0Rwn`EwYYb#Y9)?(iFBgLXZ#2DLY>$ zVSTi|$qXgJ(zhF${2$Nuv%Vb8@{|aXY8#lsmD;oa@Zl`#-~hL}T-n8LIzy%?kON|IQNmzOLz6 z3lz@{q=ek8CRWCJ`usk?LNz-ofs+oB?&8$Jg!1vVyX(Qg&UJ1&N$Gk&z9jC{@0AVm zp(Lw`NwsA)K*Y+fBa%}HRj_jB)w^QSbYed|!OAp4)XzglY>K;J1}t?zEJw%#=ECn2 zlPkwr-tP1jZ#MxmF_82^a%|s%GgMW?g#ln_N%?-~9$F4}UL0}9Or-HW0!o={{{K115a534j z{ugbQ;k>Ysy{t}I{}}M#em!W`wENR^+V$`$mspf1Wnce-(9JJ4$mm8hBU`)xw|*(P z7JOct_EV{nzw@dFS}m!UMuJv-9{+(wTmb&3kXoDF$q6W!`?mO`#6O^frlPlH4&vwC z0~S8>Y3R+zn@A$&b-i$n3}Jq0`rU0g&x?)tJk}P}hn`zE;?`%Yv+2PYHUFneUum^& zbOHI}TG>niSFxZla0&;~HbRaiN=phb596X74?)1GC!$zNz|*b-i|Jl!r|YVs&2li&9-+T84zmstU8(G(+J2%pqJ9|suj zKsHAxs;x>-n)DQ7+F&hl%Xg{}zfAg;>4Fwl7L5me*>*Sk2Lkd{dNJ2uS>~ia7@ZOA zuOyfqg9MCtAabMMmf1e{Ly*o`t5cvU zU`g+hNSn*kVqDA-iYY^O;9s<897Lu`6aw&CLOTk9&$s*W#VK>Qtc zg3ebyqlLuf_3UF4+Mx5L=BA&?n;Fe_Ehrb5)3BwU&PINEpY<8AqBpo@U` zjUh@57`PkRuEH?LG^5x`Ya)dQWCFq@~ zU(KC{%%(QD5nEE7VcwdzP+=OrF{c0eU17kL&{MJu*D{Q6!t4dP4N@RQk);Te_2Sor3U9c;Ty z<5)U}Rn}W^Y+Ri-6TZwJEa z=0qR4)GGWbhtO1Ufcnt#QTaOMz`Eijrued9^Cj%W< zLhIn-SLlamN06IO#ejZdL-t3DZc?$)2wzCU4^-V7Cf0cY6cF8alTvFfuBlzY4jxc! zeGy;-9)PKWCr?DVz=B@}8mZY35_8HPkMSP_%h?)co|Dzx3quzq*w+Z}B!$DD!!gZd zMLZKkG!Jm&{X5FGWzoLp8(G)CEB-NTSx1B`G6&r^FVWXSIY^`@amnh?2}-PN0dO4|{T~P;fExq^-B)Nt zbjN(~1otKbwl?Rg3Fd0Gm$*EquEE9|+LWqcV;?lZ*T^;_#FfLIF#jrSJ;BoSi~Z3J z&nSA-0I%1CnYRy2ZDcTOeNqP$Ren8YrY&0|@~8X9Pn7_-&B00SF)wi@-EB8t9{LHpeOVvDJpJ)WU64Zu67#BLNz!qVT9LD_Df7ZoYYqC{ho+R8P~*0ko<(Wj9&XwThB6?Jy*XPn&@WaM6#e>Y_+{A0 zru~m$$=XmUz0dR_Z_!*P8@eThaFH};i>kh02=}V;&etgNW)5v9ky~<2z>KOV;2;i& z&5&X%WB`Ywx^2*HzYBypRKG`jbL%}`bGbFKS^0TZk#2G%#+}d(+K%}+B;icA2D$v* ztdX29Iej=m1wAdjM>OEb(onMfH=`W~PtlK^Pj6bZ9)gc7Z@}LI(zXAxR<$8@`DpQi zfVy(KIoSXlGu-NklGP$26h2HTUQBpG=p0$(5bkT8{+r&Zlt0Y3uWb+5Yzl^zMhKi@ ztAnk|HK8XLdV!u|#?uMy^OP;7YmEa|55V67kZeI0N!hOhSzM1Y8HHPaK@72(NL4hm z<}*Sh6Z@KGJnycDGx1 zz8K0!r^H~p#`RmliI{o~?Abv^ANB~HLb!xIv5kPd$bhQ+}AR64&@R}f|99~EZL zqkpMPl-#2|!8Eb*Twi6C?ts*i+xlRmFHp7`;OFnhwPEgzod5Ti(ZTt==01xoI%RW_ z@;3^W&IZyN&yYt{MlIAt>ougGr@M6RC{0@})b$8IJ+Dz3%v7J+@s4s*gYvFrh z7JQDwQx>l&b6F$@v7PgTY-z!zg$Y8dLzeFyB%`Ms{s{ zxb^)h9rTd&<)^K%`}ev!GfaC>!6H$@C{Tj3e<|O14vL|r-{J0BCF$}e?f9AH09$S5On z=Y@zJc}f>MEnG=W?Sj+C;F@LDJmTec1nl^9TQmd~Y4GuaJ~ z_(Cv3boMXk)NR)G2(TS&n?tBMDKF%Ewm}0ADcB#@6R?Qu<661qoS*oanQEvKFd}Kw ze7{zBo;RuL9OOdKEZ@tvp>NUXaAWsUXBMKs{{{R$x??Cb4Q8lBgKaenf99>SrYYKIC07Qj zJ^`SMb&hPzd@4+qv+G}o;~g)yJB0M)+@jn_SAbFY8#HkU4_OL%d|vU;$4WTx&4XU| zObIFFHKRk=Z8be!g$y@&7b$s1`%hAhlGUaLJRLxnz<$Wf9{^R~21JyYC?EDqq+z-B z^i{I1>G!!-$~`jTzX1T(ij9><1d0@6SGwFf)vB{QG|vu~;EO6#CZcc{GTn>!gIW-e z>!Q!O%LHxj=7gR;P5E8Bcvu5%5k3pj2(YLEc@#k=MN{RounRYViE>Vjq!m4X56Whc zj2yk4{NCfCFj-HV@>;X_3U!T-hvnO<(m;OkM$8*bi~hsFoKc|r7)aX4)Hd&9T#%+^+$c1K+08 zT{~W6R)FV$Pzot-T4$uyr@LvD`hZ^PY-dp(*rq)GtB307fH{6o+@%P?CVuS|YpL^N zG|Q=$1`nfAC@X*T{8RmAwSNUhSBi*eN+?B=Kix}ZuMl?#y?iDto|fE=fx?*qoklu8 zFcWQcpK)VHly_{7Ub2rTbjtP>{j0zI_YnK9hy?zyA-NAPeWPN`JTH>m;|d!190b)w zf6y~oNmzG$;((;)YQ*l%SJu#8{*c!l*un%YO(bxjU&H~9Cp|;7!kjU+r0>EQwZ0SV z%3a2@)70|n_riOL*gG&wN~UZ)*V3UZKCAyN3XQPOeF!)_0cPG z{;Bi*a@H%$`%OU2*g7+VUa%ghx)z{Ey7F#*R(5Rp;st4S3ofibTEd5Bqz2QUXGi6p zu3&vnMA6(n?93WH>u-qWcOz+ukRi3#0=Z~#VQR`q`;os$aen);1TIX0z3x9j{2Lhr zk*3w+A=(FyK{8tuNv~Z^6e&dCtx!CLdLBqob;w_E^!TML#QTxon{PK(fkiWcREkLT z4w!f0t)CGIq#C-extjG{FyOwnuoir=>S_9ASms_-DrWPBwQ&O^2b9^%idm0t)-@AGSM+@bMFw-Jjf*s27(%N{2RwVUn zmvcuIT*`J+asz^kQs2At9b~fo;rY1CFtk78M#VZ7dR$_C3I2XYT)msV3Cn5q0V9_L zKy%8KxuR5mslN0!1g5LeL;kQe%Y9vWjdm{Ee_r2LKL^VK0maUxBoSa+AXLeDu;1+I zV8PRey3o)rK@QOhDXFa*U86uZ4SqTv*2YL`U52?Dc0j*t1Pn+Z*dqK;V{KKoG&+r8 zaY=6|ko|q%qJ4Mo4yuvhTZ7&p$3|e*M3m4t#o98GivU~Is@Gu=l|zoU?4AFTDwP7Z zrJjQ(-fx*_o7z$+BTm73e#>LAJZ(Oj0Sg*Vp!ywvjz`WC8aNEehJtg?JRe3Rs4{w@ z*}Z{(63A8px7veHn=l>pHn}TU%J|Nt6hTy$T!KJ;@xDK(kbHyy`K$0eqskx)oh;EK zmbZmUROHChg2+96a#awR83JTm1lidr-0aEnvJPJd%Z^?MhzTU`&!E&z$Wbs@EEy1S zNXdTOZkXueW%1Yis2r8tf6*}P%#zBJvu$%~Wt`gUXe(JzcM)R$#LiP4W z-Lw8z4-~%-s5#>e14^Hr`eQ1JwcooU68#H4NRbg89d(7LHp+BmG~h5nKyiQfL%@=` zZ6<3=i36-a1eIGF9$^upb~>Dy!VQF~!uNbU+unPCCYCZ6H9FzVOb#(3OagE(Grf6Sf#v!|-UnEMc{#0(n^( z&@!0r&u-CsuI#({JmAlO2Ffa!vCVx1_bsYBw) zX75GE;0pg6X!P6tx}*a%Q_j?Oj0YtMtr0c`KxdJ$E-b637 z@jSv%J&Iv7?*t@y?PVXX!cw<1U`ztJ7BUiHBm7em?0gh+@>hzO3du741Qd=0bKv?6 zD)CbbvJg)yxSF`;C1W61!nJ0nb}l8le9q+T`xV^VN#a)}#k3BKai5f}@8z8HYuP1R zTjNV~lg`e7J_*EH$VBOddalzhhzyoHvy4T3dD_&)%)v zM8PW%AL1UoIji0sIkd#x{PO$=xRt016noOfOMt$ODwY!zz2DT7Izae$!gmN`$%hU2 z4*|j|D5EbLJr2DzTWfXJdEeHt!+dSC_|6M-V7q56~;AEp6c< zz)X~|b%PW<=aIQc;+_H0B-k5V^^7 zUsH%T7h9X}UhX=&An4=cyHap@nU}6I(zDC4hOC?M_^7c<6dfT!Y5eB_x!m*QbLL^E z7b=?L12-!R++ozcQosx$jRvK4xK5`=g6~+LCm*=pn+0=p#=_u)By%SW3xMA!JnO<%j`>!M$j{w^89) z*<2cLR?)oMLgxK+lxJ4Qmgz_ZJIaEDWYLy1J0@W|@t_!i1S4N2QOq1W ztuv?UF-HnV$)pa!Ho$1`cb%Mx00|!lYfC%dXX_`TPwmcE&SP-6Ux^bz`@0Wu`}N_5 znt0fLq$P10f3n638B2#X$feDVr+0KRs+G7=(PwNk(4q4Hhn_wQi;vVWw#CUTY+Iv9 zU%k9!qaZ)WTx{)$20G{qGP{geg>tcXt<{Olgzdo) zHm{?q2~>^`bf9<#C7OXX$AHv}pnm6L3P0PHuKOXY^5}h4+<6I`azb_aXSLwLvX6;% zw%ZzV-gbVuf(@8U$LqP6FF5zzkzuddF6h>Xcgudi`YHPPGF6UTIzrhJ@*?R`q8pPl zv+3z{iFCona%T%rMF)84DZ=~Byb8A^Bi3i03d(|Nz0g@C>`zVdSO;fYiPnj8m0dyc zyJkQq0#Y(U@c`en&{hrBT7M}vJC{7!UX%u&tpBcOfueGK)|-tU;rm67cq-IGt@3dF zmx$dq#g3%T&po|hQmHKJDH=Yl4NKp){&wGX_j!+{3q5v` z;5cHN-I#*4eGBc=89@I;L*bOAb~DtqH~08q#4YgaNFDN=q#4)*H=v2A9%Q^Q{SN7> z(|q+ZL}#N3t>&Ra&Vru!Epr$#-yJZfA;cAiWTWbuKUO+acD!PgvAs_Jejaxpn+ec# zP9nE)|Gmb_2180Os`cZjB?VjZ>0Nd2%@&-ZXuf&EA^jFT~m(zFqO6&Pv?(6 zR(7^rTU_8GF((H1ezXYtMn~h!SYKFvLaj04M}x^OdoRCiQ1srWd#7M_=6WhXJINyh z^SN1QFh3aq`&bBCm<9i>?7vvJ0NRM|s>hC$Jt%B=5G#DVu|d6r)x1AZwAzI#+!4r? zmwvYxwut)5S9a_gAJP zeM$?Jq+xD0w)y`78b3LY0(nCKu>k@!LUH+5Qpk6&ALm?`Ys8#+_+9gPCejlKuNLkT zr@xPjsCx~E%0ljNsN5y9%=~L`8I64gly-dgPSvYowPOxT1*fA%3NMk6pTEzlBd8>frBz!5(&Fa*72Hptz;8I`Eei<|0Bx$MY<%^6WV z(TGc(883Oq0hQSdMDXiyK|j_3d_JpOE-YM+x_=N=!^IJ0+0FYwbU{J9Yg|k>6Z-^_ zWr9)UWnU|1o1gl^9p>+?b5ChKZrk7ix&&a7?|9NKq z&v}iG>G+(-0pxHjWWAYR@t~@gn=I>h3_#4D!ZZtTlflskfCArH*8jJam9Q9o_p+DMUR!yhcapbwBrSg7Bmpcd-s zb6xEDVNWn^xPOolG&~}|`+vLW?Oz{6F)Ib#545soLLoV3xS#|c#{vNxLBW@&=Tb_Q z-5K<4w55l;SUVC3eNxnx__U-7^TX-{`ZW1THFoFv*Hy*>7hA#58s}~4dKn*sZO;T&zhqUKg9)ELz zGuC?FBIwwre|F?uk?Men0m#<~#?RQmztmQ4Y|iwJL^Are?k-GkR8}NXu7K%LhJI@y zsqvkTKT0!W1^&IFT=CWEUpZvGX+%ZYp;P8zbnD07>ED{7@~L%c=8O%e4Ss#SP8|Qd zMX+mO-!wH~3wZzw68~-)pcQ`mc^tkoY4m{ zZ&MQXSah)7+fQ$eEBV^ov8_HT1BV!}E+UPhlo~75mU1c)WN3$4RX8?sY~D){zfHu( zzL8&^E9lPCKX5$zi8N0MDUa&?9Q8n^BV@@KvHkK};U0woXzvKXqonJmpZSd3mg=~o zReCWG5--wg@>i)NNwh?AOdY$PFt}U&CG$sBGrE5qUr(%&1~*~?`_yBU=3!D@XBf7B zyV#^h^+8hTtLK74G#5LS(MP2@)R1~YfuI%xTUZBp)JD(xUNthCxm$>cbzEh^SXDUpW@~(?}c_mMX%Sf zuC&cF5j_56Nmgf8Ga3))?8yg!oeGf3;Sa@rceqg^jy~PWTd5)J4z<}T${rdv!p?iU z>z$V>x!+mnwJ~OflsZnhj;WZAZo@b`@JTmUQo^Z6gmmCIc(PZ;sLpxZnc17lw$A+| zi_yvTdVtTQ`9mG>(*~q+_(Payn%Bo}{q7vxaLJZ2giUS~jP9CH8S8z^Sm2JbTm6OodXpxU&7t}tVyf^4Zk!D=k1@_lwu z2j~x^Yy=^wX>~f~do%b4dw+yjkm!U7t5B-RKz9W!rPJMFIw5_(gC4;UthGfQQ4Tt0 zmYbS~K<1{xQe8o=SKpvjhiafWp1c%f=M%Ib9J?i?T@`nbG7$ zz@w*v;B_oBn9ba@6D}`&{eXmn;)JIyG1TaQq2tj=MD~SK^V-kx8lyBF1Gz3V3yE9A z>n{Moo>Me^^9t*rq#2tjk)R?Yle-@T`cw_Dd+q<^_`ZcfyP>8&y!XxC8Q06_qr^JM zxOZ%7(%z_c;~O0h$iBtyLj3UBm9F-yOT5(grskLG^MIdRq!z?=wQBO<A{S5=cC{ z_Q!2?Y^>EgQ+lH9KYrm6xf`BTe+0x~L)V_4tHDAP9Rl$2JF|o+N^|V|>jcNa9 zL!AHeqO9=tfb_a_+w0?G3g{f8dAz<5h(2t|@IB>kY2LxC0>&G^L>aO_r-G^RIawt^ zpj=Ra76aGzU6@(hr1^xzeFtLcbI{v=G`I%0qikrQ1qLI&%_o>Az^?$tK9I2y=qz(} zg)5```{*lnj@ilVuB*ur+WH4qYJysxAYY*(6t)yTc;&}sY^IL0FQ%o?)K}g3U+{&V zr7_H@*0kG}heO$}MoLfwgl!Fth?%=oNOb`)1I=c)>Ta z(zx7Uw=Wf0qDW=l8hG6$7W?{J;?s7t{30ZW&=>Ol+w)}GW3Agmk3sKYL`=uB0QhOq zy`OBAwmb5_MEi(LG0? zYg>m5j?G>X+RD`JdTl7rt-Y4v3ZAafdw+~n0rf6?+k*OvRPu}vpH^Bl&g~^}a>j*5-1^3X=^cKRgYTu*P5p8RT zeMI37=-NsO+97i%CGNi^5X6}f922RZ*u7Xb;awWYze~ug!=`Lj-27hCpd^-rnW{vJ zJV}BrCCb20aIgEf1oH=dw8pRb&V;)u1!j$S;)!bJROBV#LJ0-~P-YeM9uE3z0xKgQ z*PE^=ZhupX0+I>=YXA`75p>!TRnG9RfgF7v_236~gb(Y~-34{)it(62 zx?+72h!a2$ks)Z(X-|8^kTzJ~%4ruA=UQfWb7o1!qnwsSQO4+up;75St z)N#?QG!&S*2Ncf?5bp>vV+*COff0Gkb~7fn76#3FO0)O}XYV$umJiAgtq*aHU^tSQ zr#ZoikAeq(3?m`n%DH$vGLf_ATk)WRvIs_YkwtAMAQ=|l9ZN)UDu?dbKat&V7tn3M z!~x<~2#oLKQ{xcfzozlecMg3bvomoQ8xZ*DpCC366l*?y zgZqOPax$4<^9lNPv-PV+9J$?i+7D865kylkW73nrXCYx1(F~}(7GM*B$Pz_oFI>IA zWzwE4uYRp`cq$W;>ja-AYc_Z{7Ibv5N>_Z-quAsnIDV z6FG8fbpOT`ibYa5>`X+)4}W-Bd>g|I8|87*Vqz-`x|Q&nOxc0SUC$VLN$8=@xYb;4 z+_vAh1b3f6}Gz#1{68F7Rg6nKZQB%Gj5_H#@}f{%GaXD_v#Nx9uhGELLv?PHCY_p9v|O}uU7_43h$jY99tOK6+**HX>-+I=5gW; zMt$|`JnhUvgzGY(F4x#9^{c9vF}LHUG4t);e_c{qHc}NnN9XBN6;F023sPwu1qFn* z>-ZA&Q(MX>yxuyipRa;z?Qta3(pJ!xFj9_d6Gr>-Fv@TaGm>Si7=J ztNxTC*GppmIyx6}-z}3D{ci&400hOk&#=2I<+rE8HBMzc7M(&`6WlHu3w2MLhzF)& zI+GoJ@L;8RL$m||B+IgiU10}Rj(;~b?!N((@(oky$!c9i&taJl5r(m-LrS9hrg*O> zgn8Mg%&lt* z!vNFS3}BQHP$V2Ap+v>M;@`WYlDzNr5hjN#2smOgLhMTYvB&~t?u#HP{_rV&ZR+Y3 z-!F|Hu*X?13&kC3=Fa?6(fby451;JUw_p5MT+K$PX+}yH(xibFstUfOEVv-jM$b`N zL8J@c|8JjHSE;04R!f{JL5O*E5E_j_dG)VsSCDAFK~+hxZQyz8Zg>h>HYG+N z=pdByNYy|ua9HaTpwq*%TGbg^8lg~vbg*Nlf&L;u-WBpHx6$;B_8wKCEjTn&mOn#7 zih7rM#$4%Sg3h^#Xb{1ZJlK!*;VWy57F)$uTd?-3h|xB$Id$Sp^p7Tk4O}vvWbFEt z7va#PoJRB36MKdOH-SK%RfI?^+`>e9wkfq}C7?NT(b?M1pb&36USGAu7P2+{EIe4-;Rui;g zaXf}l+mN_Mco%7Xb0nboDOE_yz4ya;?HAmJsW&m+K?W{K3c~GyGsoTcmkRW3aD_YHs#`HOAnL3IGiy$?7=Tk+3C0{CxDq4oY;Sv z+M+YTw?+oadAmVmy46@Rg)WC{N3!-!@mOTa@gFf%Mo$-USUb*z{t37TPqB47biW`e zt&!S?h*55fPfn4H474QD+qH7sicr+fi^ zr|~XuL@VXmS22Ggh3StJlXsOGYLmz*(WP&%p)anR?KXV>+{t4S$PXMHBh6yMoegqv zwMUl1cfEs?R>s92vg-bdMFhi;vI_#Pf54>yce0ngV~5Ll%W6eQ!_F>-cNEXzc-g0O zjY?BozeDtTh3TG6z8|J8#;MaZtg^BOgmM?E&`wqF`A3eF>_cT=C~7|hyAZT+JmVDC z(*_&X{>XW7%A*D}Yrxqx=Xd5}y6~a?caGH(-E+Hi_b z7bK^Vl-iXt)l)YpjP=Vg2N6Exy_6CuTHasiN0`>`_E7LJ>xl2?AnO8Xj&ERev>;~Q ziHSisAOQgvP+fYoCfyY#{|rjr1uu-((ttqt?uoQ^EJAAb%w7iP@BX|wcyZTRD0QED zh=Uh6&h>pvh`Gzvg+SzSo)?tfI* zYE7EhDZEzq6X?iF|K(NW&OPrY_$p+J_B`;9PO9*mNOgQaFKU4~9DP+872ceh>Wr5! zv

    LCbJt#7@K>uGsBCu5^T92zf&P;WbKlFD$=9iJvRl1$KgZmn0{5JrbyU1laWV#9nr69ENd2-JisTY|5Y#gN8O(xEgL7Rmq2cM^}}oe0lH)GIM4 zK#{4rCH{y@{vPNXfn^#hLw|dIL?}Loq2@m~4XurAF4uNaN*5nN2iT?n5ho#+IAE^S zIPqeXU2%y9uSoM;y?Y7RKde9d^ZVWIk~@v({}$~DXhG-E7Z(M0^f8gs!^CXe2}ah` zi{rg~tJ`x{TSi)->XGG?wc?PeG?4k$XXv<=4*^VU00K^eNDpHRj%iW;6t7HpoP|9= z>)J&)8eT3kVVoYu-^a4<{7w~^?edMBhy}M2%nlXlEXq)OChR6Qb@AOY4&59L<0}eZL?B3j0YUr zrI!3;Gr8>RDw%qC60PJ7O2x{Ilzb;gpS-d4i8=8*guz(TCR#m|_Nk7zB)U+!X}BpK z0)?m~I4+h$IF*YW?I#=I!yjl4Vmw;IoA%|~Kb)PLnigfl_Dd`@8`6Mo2E>&Fxo?cH z@*b#I!(BFPjdzGZ;V8N*P*U#@2qpc@?Hz#V``jd7gV9Fen?G(asA#eBR90BV`^p`T zT{gF%DGzt zpPQ8j3vQ5T{R#P z4(1yN4B6_q>BFv_+)gX0%>S`Xf^^6C60^?4y9g)6iS)Lb1Pb9yNLUB}S81;GpQVYW z5;3#R?kmTu7PMCuqY271TT%=T#4RS@HaAl}At4Dr0#7rNnKeu@yssAfz$~|A@L#-P zkADZ&(yGfwSnT3pht31uo@-EZDHyvQ>dq+_ooODO2aK<=f}hKj9{$l-+a>wv1Mcd8 zaFa+qp7Wm8?>ZcLpdX~~uFcbR*0_!&wUJnOhPbVX#0#5uI=sq%GYXTJtrs+-znW$1 z!QccU2KTR}r2PFZZK4%0EMba$_P|pOk01Z?WD?_0d>Ce0S$*^PdS`=xUtSfOnq7$7 z5Y^#|@9O+?Dnny^Ri!z3Z7mIjes&!!ZqbZQdt7II5!DZ_^NE|Z-+KO_-YGeIXPqy& z7Y6QwfsB-(dp^m#w{Y$KEGJm9CAujo=uvHnCRTDS%IF%z+ z(zRn0w|9E_@|WO-0PK#EJjb{5zKFIARKMcP)CgQA`wxz&+h4*(5r13+>x%;FpJnO* z=Z+{b^_`gFI`2|u&X;sq8m4E}+>Vtn zaf2u}Y9S{RhZIfUrfD(C%su|DtxAI09*;W3VFmFIu7IedmG{91-Q%Gf zjJLE&b+|0Deq19(7HbwO;7F_WU%uE1Dre|&$~GZB$reV;RIr*kQf5Bqd)=r9)SrO9 z^59kye7mbNifwk+nmw!l{_2`Ku=v{v()j<`&B%)4T!z)R(X?Is}JG zjm}=_&goIF7zb&6i!NA9gqr3ui(lGLR*D%=9WIHm=G${K+rPA7tA7jw@}++$fZ~?{ zT|plly=9TdM-`Q#KuzgboL%2(t|X>=Y8dI%W(1M^3W-8%n#C^sqioo{AP%-!f7kE4 z`hOgq1ACrJ5Qbyhwr$&NV<(Lo+iYyxMq}HyoyNA&Bn{5@oj)+wytB{F&g|~HH^}!v z-D3$!8i{)d(!%(-2Hbo)hA@Tr$*mN35Rp{%C>qO29$<7X0p_{%&DWOR@E>+uDn*{s z8<0+tbHI!1KDJLkU~Gw?FV=X>UF-5WeNTHp=(}buy97H5qdO8+zh?JC+;(cZnRNvi zHV*rpgwD|&_I&SaGL9_W+;Ba%Cp!S{LxKRWrHH`EyOQC?+B&Gh{*tk17?IzKUfJW0 zsM5;YSx3O&`C>b7{DQ%~T8ymBKOFy#8Ll^>HQ5jn{iDl#SoI@6h&5T1!mb`Msf2dU z{Rpd`LxN3nuAki!Pzpd|0L+^>UuYcee*0k}Lq=Uaf+z~!g-RI>Z=f#VWCW+fTJhHs zQvnk@r=$IW;>l~6>`7;{>-0nNBlv;`Gj$e8Z2Cwl-sKyP^^{bh%ICMiEU#dP6{>01fh$DTqSL_UdM_HgDC5e;oAB)MC^x*RzUNX_do6=(hy;( zFI6;?$ShUxubh`%=9<~RA9bLf0~4B^`}>l@9>(#I^ZS#jRlAAu*6A$4f8pq5Hx>SC1T*S6{e>``l(9ytKT1f&P>a>uZ&(4@U-#;#pY2x|VlkjI<2Ei8N7 z$VkfXhR_DWEf8!qwy!$Lm|Zp;pIC-65O9@S*D*q93&}<$B)kGSE4TSA)xlguxDjNB zBRNiCw=*u7qSI!e^=N?WxR3F(=ka7xqCT&`4q{Osjj2ViQ2z|$WS<-2@e^{P8^df} z`e5BtL(sRcB}KFHzwrk=yD;}?pQMVg%d4mb0~nq!W1W-cm|4Y3=mo(WfMn# zzJT>wNtepbpHy>`kj6{??<7l)=-F;{=8MYds-a>2MQK?{M&C@NHeb21|L*!6tTj9@ z5U%DwmWX{Bhssc|pbo~`G|0B8OMi;m6K@TDwzCz9Gjr6+qX7qI;-*UDu)5lmBvT0GW-kFXI%waO#j_{?$7pK zRSbR#Fi2_nq4eU+whR5&0c)QE+mRx6 zDkFb-tEZ~pMCOR(%t-WWBYJCo{m!v)z`a7}b?2N99K(nD^4f%vqw^<}dnZP8H@ZRrmceOoAT-~>WopoiHl*(ryjOtcDbx%PXcSK62iZ2I6k)NEj?Gr zQ;JwsoF6|aYJwzp{07o;27zN|0m$5U{zsdra2sSkE$MeTsXtRI2U%|~3AT%z@NmgX zO&BTlZ)0}70lO1y?iBM09x^pVUw?)5CNDiv&4=U9Vik!HBFAO!yA{c|*uDRe%9G8w ze->Iu{x4l0z}RURsN_w)_#K)4QjO=UmIED{cqCaR`jHs)_M;ivX7{jDc=osXG;3-C zc-#yN=EO)cf=^26fr<#YJxk#joQ***$|gaewI%BaEV(o9QIy^*`uH}<)u=E+>&<>M%6Y9eod66ME4lc$l}3Cv}^1; zir^10F&GpvK>mY@2Q0dOSVtdB(BvUU)o+$9!LTx^2YQE*o+eKrKw*b=*>;fZIsf+Z z`XV!Vkma8{KoE$JDi!O!Tl{@td=W6EGLHKUXj|bdd+aIqk!Xwhcg@Z%wet9nero}E z)Bsfs2!JM~5}0rgU8>S$uz^WPuWISfEuluL&~A8h81e`+EqGECJWMDp{xMA2cn31+ zA{S5`zt|Ki;Vbx}z+L`@=Ud|aN0UTGvjmv06RKMH*&8L$8cK2sn1f6W(2>W$npkKL z=69IWQ;sTDzkobC+8A8ATtIn2yW6;4OIG})h*zR&U~JI*owbw2g?k=d6)4{+Kz!*^ zzdjcI5BJIPSdLJ+MO?<=h8Q2K^Au$1M+^hF)3<8yO2;AyuxcrsIcj6<$#_b38?IPU zzO~49djv9~8Ls7$Z_MFJi#4`lV3$Vspag{eK+U{sj#&UszFk1sNXfGq9a7LFD9E+; zF}r-XSQ%85-4iPveC-oN0ZQa+gX(s;$DZRqbRNHUPdM8dPfC3Ju2{xYhyKF^xv|sD zLO3RQxCq|j6E4@vec9SRNcKBDI{yFOKLWgu$iR-f^5md18`73fMKs|)O>cZJWu0P} z%{u@YS^pmCUGhmihBOvXQsssi_uEhQIa7K7OnzcESbppgAHpfni0!iSZ?4<}%Md?r zf6G`=C~NdeS6zz=Kz%^eODF+}gfvv@r&J&RsB_DQ`<0h@*tBQk+VA6sQaLE$-^`s& zts>5kMWU1ZFxGj4qsAMwd|s+Uy^;TlC_RcW^eGAQP zfoF_B&`S{4@v~#X1gTE4?WpT#Ke}g>rpCz0#67+DFt^5#g`HU4PH;*X_ZKbxd4Jv@K1%h6JViu}1 z&+(ZB8y(HD2D_p3d>1X>id;xGl?06W2F^1?DtEO@A&7+dNK7Cp`NfCRtNi*wki-jV zz9E?nNsDCqJBNm^VQtEfjC(ArP<6_4<*+au-oc(O0Ns}WM2D)~Kkc_i2GaS1{x+`P zx7lOAL5V*Mqz4{1EgD z@p_@3yHexR$ze)qxc7UY5e;G%Kc4GRm5trXuJ|>)RGt1L6 z!qj?Y+)-rzA6grL_2>Y%IebtW)W+MWmoMcX7XKosB@)oMq1(^lhsGj8nKPsdcW;_CNYT%uT6)bf)`KM+59$0 ztj@4IJ~7NAviHT${ytqTLFMy`21R0pJJCx5Qr3P%0wF$07#Qj$P{F6WhhmWZ^b&}K ztVSZdP{vf|CrK3_<^Ju;N4Ogd-P?~uh71gU;s{SoU zVR3j#V$ql4rhR_00tN8XqV@loFtpl_$bf(I;`q}>wKdU2^(cR>*7Y6-LNalTGgV?N z2vgG$S#oe0kPA?1e?PB_v_?cM@;-3k2LFxW-(d2BKRGA*RYtTCi%Ov_^FF&{`$-W) z&^zEaXE9@?uGKlQ#R5j z8ww?UW`jmbT6_dTs#;#~j7}T7k=S!oHcn`~;U#2Z$yT2uO;JY>x!JI=-2{-qYA0E} zA1-D@z_`x&ukn;cgJRSAQT>)zfyF{~Y-DnRI**0^o%#UNKafnv?v&($&EvzfP!$D| zjF-gPI>gZ@-u(s%UEsb<>G-~`?0YVdWQ$7mWTw6foVPE4oQ#*qyT;58rSbi=Bl9F* zwKM#lSNtom$I+_aLFj}d?5)@MXjI!3c}pZkWMxRiaLR)&EJ0W=#Rw_-JIiYY>K|lb zV(-_E{TVWJHOwAtl8I~nduDDwaljRw|7kKJK6+_Y6z<(k+?Evurr9QxLrhhsIR#TK z5L?Mdsa3&AAHJWC1Dm~hv_Az`m)^q6S0zji^E?#xM2~9yyz7Qe@e$eOABN7eV)r-A5yH+`T@i7Vm1gjBy4fEkf4H@k zihy?~fFPNms3&0zd1+aeVhA;|2qGLz$B_rsVC${A3?gWckw8#VD#M|<69c2|GnPii zFR^b+1iUo}7kQel5mZc+8P>O0k9oreWgV&phCUekIFVR^uGVwiV}Qhv_di4?QiFDW z%5D?zzS-JNKA}RgStfLOwN2XNP`6h20S#7BI6ED>+RtumH2v%;0xtND<*`#ko36SA znr~8qFn8u5!44``B*xk^?LL_HE(j~DoW+fLJK`f2-JmH9{KL&>#?a@zwSF~J5Vost z+lnIh|Yr8n6x-a%hsXDVE3ranPf z52@ai6dBTGvsIlE@r_9=@;A}RBcsYv76Gsk_u@PE0pQp<0D?;)TF=Go(RK*ER!oWO z2^UX6#xoq)9uO^uS)e9@`B_2h@m=ABI(@3torjSVQpb>E{CH-E(4EE7E~obPw23je zwgT%0(;Z_BHw#J}gHN~j-OCmJYD&I zx(@16E7RTrgGWMKQy0>ngFtow}VOX=iLEKCA9$Lthpv0s&wz39> zXh>xs(}T#`^{FNXbQS3`lL)6%;b^u$aX(6~oqL zodd=h32;OwUdGh5XYk-FW+MS&;&#;j<}y=;hS5-JXm7a@c49BprwxF51qiMQqK!we zHx@fR$!&Cy*HhQUCG{t;S>i>JM{#}XCQ4Mcn>(;{4qTG z$j~;9b>_QPofWCg43+a3+a-WkI5W6{xNr7 z^aT4&zInGcC^z5?t(nrxKCD4u7Wnl*rcKc5v3{Qg>bc?r2N;%vK8jsRysZArVA1rT z-^sMZgB>{!?S_T!Ie{(Br}0)%*g6y09m+{_?6^+mahKWBihIJ54?lhvvsc3;BB?wa z#cB0!2-%}L@JCc2(5%$`ki+hd@Ke7(&-iRzjw^_T!)5nL7&V zcjA>3c@-2|pENVsVDSJLDdjXrDj6l`db=d1Cb!K7hrBnQ%#@xpZ;|)Cp7MD?6=0hN zWZFa;@JnQyAL9*VoD?T%fkpbAlm7-^-TNe$;>{7*ckdf(Y5V+BSr9Ct-=AMDeQv+( z#e0}8Liv3G-VedFDH=|xX{Ogp1r&vNxRCQ44kX2!zf?B@$jLePf)@Tt zzd!vS0R@1%6m0s?F7iOSMhYcHMb&Y0@6gTq7tz|x0#b%Ver?8~pZ^{H7Ro@A1#jUV zm6Et2b^lMlO}FNyg5+AtJPav6>N)I-B~XHqMm&YZxhyg>@f?|z`v|Z-o*Mw9;za6~ z8}?bQ9_f@t(SxS=jzih_DzPhH==Eg4pc|5&DH7-O%p9rsa$ zNyB}Pv8w?k0OD;01LFK`)p}~rj>0qeo&{w-^hsFmljPM7B%0)k?*6Ux(c2hU@B+Cy zL2FWl=Uj`8RFA3&X!OddOFC-)=4XL7YrzqvR-#%q)r~Gx<3f+Z)5e0UC3PwKnJH;A z>c6ae)0*)-<+IRuZT?|FgTt!HnS&UELsODM5jmBzG*dVc+)@p@-^L^ z%DpGL*8KIl;bGWpV|hJ3cWHoXp(_7i6{RdtVX%W-2VI`pJO+?a0pP8s``jliR1 z7Umwz7^(@@CL5Dcf_Kq6$L{}xnmT|G*%UB%zOkUH4g8(MRYTTna)x+k?;&~hF2L-k zz~%P{&X$u1p7cWckZ7@H=GO||7P_ZHQ4BAM(6QB$FFygjP31rslATv#h$OYkTXa-% z$Defc;oc|&OvcCnAiyV-cwHp-_UG{{whHQyo#z$;l&BS+y~7haSrG*j0e>RDmvZ1v z3!i{K`*lK<_*%g8WWTt?XZz)B%N&cc38#? z%CazB1c4-J$={Bc1ZGCcJ$a&Bl=eiMI4F?@&D`OXiAYqz1|nfd6@)KWfn&V}P@T+f zeC_9%=8;6?9Opi7r0f_rF@g|M6y8+_XR3Y2{Tn|U)X#$WNI3Bdmx77e_udhSyZ5WH z33gQIddvqxQ0J0^y(2s$I8`>zW$Cuyt)t1npi+weC*37rtku7+jjJ}Iy32DW4f3?0 z32GaV4Zk0?94smXYdKZO*0~`E#?u5)$aTI`^w12)v5x#$H)eZ;*D-$Of5DmXY|w?L zj}M>ZoOkFC4d1ABYLc`EdDvUJ8H}Rt{Oqw-L%;H{nf((^NyjF@cDtn=9_a`T)S$xP)m+hg)l@K0#ibJg5Jw!2%X8P>FpVp12I_++AX^?e&k z8JE7O`Bx9kIv-^d?>TNa4Q$+FSPW-M;G%7Mz?&~9wU(8*@G8t8ESp80V?}FM-1;oz z`xN~3b(}oTC~&m|Qhy=^csDFUDmyW+YUzhy{V4JzP>FGF9KPh(6PSc|&U-1cvuW() zrqtHe@_+SF9ilDq#ehuI5RGXigo;D5#cDojd!-Uoaq8w^ueHGJJ@5L0fG;0&d>Zpr z>v!D_LB}8{Z1Fi@_HX?B@NRMK@}d)*FA`O-c;<+}P1fv|$#TM+0?Suat(Y%Ks`fK6 zC+9}imJoP3WNs)D$^M@igv0 z_;@<)l_Q?r*HGb`FH7pA5h)8k9Q8^l!#}(4$LjC__FT)9rd{El$Ve;RsFOI_1!Fn| zel4QPoVCUN()UB{bCnvG(<^rR#5o|Vt~d1v@h`IL<$MZ9mWV#A#Bz$I zQFSI`;rspl_R9)469~bdDbw-_cindc`6E9ROH(7F+7Pc;g>TBs_g3tWro)yDx0VAy zVR`_BNx(Kxo^|6y_s@H-FEO>DzH)Y7G74W&pum@ivi<{b+s0-j-WVe@heq~-6RARa z4Y27&ue_RAubhNTNJF5G=_B)EfPT^wx`-|PY-q9tx(SnObSnu+C_qq=Y(0ibU&kvZ z^gy`Qm853d#E7UU>~&)Aq$64s%eaSzB_VjoN9*4ORBjDXBWk8<4lw!Or8F&Q)bDZ0 z3q9CY+(ka1%71ECZ2}@jg@Y}R(y0{-bd`XMBoI>+N+69W^t5a|+;(0rsdwl5f&D9K zQ_V~&EAgZVM-87XnX?2ZUEu@n-f)iD^R{{Uij~FzdvN}0D2YEqv9dE;zoK7~!d4Au ze};#rIo)!-4d>=+hqXX%^(Eoe+>GTQ-Pbr26B+&e`b-Cwwv~-goVMGsZ*b*21N|oA zyU_~fAdLtxicNrm4HxrYz(uT&!W=k`n6V_o*K*QKzxbt(aE4Ep$``3>K|yw^L_CWY zGBFNa_8NBd`9WL%zOC&f((jLv5C;&m9iqDXkNs|zmiO*LwR-Aj-c+hJnHlc?^*IL2 zoL9eTw_B_<7!0&%eq()DS{G%>+TDX84A#-JQ4(4AFRg=>X3@f-CRjaH6hY2M!OMpg zyPSZ-tgmR(rKB#dNLOKLLX^LjW3K2EER3kxSyc#UAg4oAkM)kT9Abh-#%wxuYf9m6 z|L`$baFw`imMTWcv$~Z7S^v(s#|2TEExus#+c^Jj$Uz|zswS^(!0I{YsXSulJIjb^nIK*xkY!qFbL2!XPhqX&I z;vAAB>4L{5x%)jN`qz5FZfo;K6AkA#RH(QwUD&|iFSz_BMl zD7S!h?czk#dawBN(Oc1|c<%XfOYxLM$Yyd!BuzVHRTFREB^L(AR(Sw11_SOocpeRU ziXd1zAqWKX$Xj$wn28(-d&&bMf2yIR^hDnT5dwK?dB&XUVPLiiQBCF7pwdUgKGz9Jz?1Odl(8i zp_LJH?Ean&>Y>;hLTL^YSb(xN{D0h05UWz|=+`FJ_K%1Y(40_(!PuEun%*hpD1+8T zHa)D2QRCOqVDY`8^1iCqA#$^A8SCW$QpcM3{=l$}m)6={z3&JM{K{;G=&NICUJ89N zoTtTTR}C}cQDWQ2=kCR<-7lnpLJktkp-say_FWVPJ(K^FLU z77&aSG`ob|PuQWgHKZ7++^dA34Ljpg^Mzu_?@BeJVqT1~F-Co^axZhy?^g%UUjwVI z3-z1Re7>;p%?FR63-+z~8K&4QGgZMH{fsp0z&waqg0g#F0uZv{O=pmNH z)53qY{wJ}}e2A1%xO+LfM(HI#VUpMY0w$(Bsdqn#G{2|0%=+>DXlO<<>&|&C0gl=- z@6W;DL2&7a3^;DkTWan`-(UZJ5OBeKa9a3%pzmq`->For7**8pK-JC%W@7zQF>o@XE zgI3S0eR9B?-ir367yI9L3xM&c$HiwdBTjebW_e%Rf-nb%;{wEzb9_Fq|<3@AF>7p5(zBM@F7pqB}tWAYDhX_WG5yxA8#;@ z1%SRe?|&XrB)>Nwrvbg|^FJ>+J6=v}@WfhFgpd$9I@jYH3%n6H)17N|tB7VyU^u5pOik_r)QDU~x zqeEmY;7vY8o%Q?V4_G0N%LT)lQoRZmbP~Gd*-0vzx1Np|N=;e4MOvsX~ z|Jmy9i~uNj0UpK!k_FT0b&Kl#?jwxGMb5)>e{^nF^l%v@p+xFl#kh{?M`dd&J2J91 z+AJx~)n%_XUM20~vh%Tl?IaFnbe4{{4vt7vea2u3s;S*VywlaLp!8WjPT_avKuUD2 zzWi~y;gADNl-=-j$hC#6IW1Z#&tZAr_3iuTBq>sWlTZa8Io z8F7m%%b!E2#SH6=ntB(7Yn~frZj2i|;!VK|ZcK znct7aWmGf@%>+|F?O}LE_uN7})olOC$Y5kqzv!v?vd;lFiGTnne>8PhNM#l6?(d+T zlM3P@c*Vr*{bL-JY#NdAxJBF^;b2XfP9{$++YPG)s>|(3G@NgeYS~U|YHs-CyEJIo7mJc!;wh5J3bK=J;eA!0rhMa0+F|f7ce8dM1hv@^-FJNT0+p2MIi3 z*R5a+DGvJvUT$l?IbVO&_4v6xF=(n}za@0!T>ouYkfrdUdl4Tlk3x5Bh^)JL> zQH_u%Q6FM1sQbPYKmLFFkHC!*H+>Yr=mfX(ii% zwP08P7Op^klP^XqMrr89@CaqGJoeqwS(eWrWMq$Idu-Kyk5~k*P>r&G7Htqd93|3d zT`?xDA;{-(SMpm}c~jF09^`FZ$LtGSYO)?krY-oZ={BZ3_s>8^kT2?;xd4rjl=Xp( z!ARl#jcj^#$KxmBNjEOsQBSvp7{`)Y`=B$Pn{pQEW0Q4gORbM_R4^Izy{G4OhNkzv z%J^FCB9XBF0Zg^UEC*W z)(wP12qk4SPO>%7Z!N&nW97rD2HCdGPu~gej8udq)s`rl9E^pl$ZX3B`{;5)?%hAC z!rFrjrfUW4(x66Jd5e8}AWhDY;FfIjDLkDQv3@b<&TXe4@e{|}W0xnmNt{uXqrvMsJsJhw zI$nJJ$7AWw{u3K-t=HhP^(g3qq1&AU=H6ObnLl@%vADGmd`ej3Poie$ixzqVu$ zUEv@;j#N1OMgPf|Zre4_ar~C?GX=_=1p15=tHtRNCFU1-afQ7m#dWUKarjsk{AtE< zP}HhK4o=D6u+0%Q8zO8D+MiKl{bZaHZrbTMB!nt^x8`SFnSD4v(O2`V2cK#iR2$nL zMm7d1U=H+0=~j3c;P5rZeKZ%6d~U3`Cfqk(?NR&T)Aoj94vxoouEl|$pA5*O@12Tr zWRhir_yar@ijze>y86 zkHvU#;oFou&d#RV!8v(Lk1_0@p)jiR+buAZq@KcMrzKQQ28wGU+&7z21 zSbf`Ea&ULbqjTSAG}JM6GDjGWt&rry))O!!G6z0wL43Ai1oQ}YcCpc}qre+4b|lf1 zG*L=ya(D-Q$yO>K_T^ z$P3)M@%!OgVG2t^lj`w^ZlCL6GZ)Yuyg^T6W8=$*1AB9G$$FN(;jT#4_D`bC8E8VV zr8#K`z;$DJtO~IacQ&(+%zpS5qsg{DT%gSU0-FrdjFw+9KcJ$j&!NMbC+!L6jjfZErFZB0y_Y) zI_}3v@6mAbJUwY2tTk`;Pw@S9$hW3^mm&1PrnqwE_-oh3?>f`!EfWdW7UCdt+kf~S zxQ3z&1+g4$G^D29RJm(mXvlNsBebSqdD^9_Z&I~6w-lX2ld<0^JMW^cuhCiXzMTeMD32trtu7%y~8R^y9{_+ zk#w`BIFnHbSQQckQ`HIR6Ee))vTQA&@fSco$5H(gSaf<^%2)@fW+-icc1=OpADI`f z=DLJJ0nH>3^bgiFB}3Rfikf0>YUHNC2e+`iG`0|`W=wE+2d)iSaBs)~ZT>Xvh9UrW z1daKX_Q=k4bseBbAVkWa1QT@hK%Ghwv+u!1hlGlomN8nIEERC!lek zTjr7(usr#NF)-#dU77mDxBmCGbtL~<_z!6wgbtBQOZS@V>ZfnHwEs|T*#}=7N@)QO zYJmi)P~uhBY9jkJ<7{oUM27EJIMa___dkg>OL`v19pIn9@c&U$!ALZIsuMiiMZSDcm+j;J2A;dC+FF*3N%6VsX^m8( zp|gYas0a^8#_UbrQMt=!fl@-cJ(I*q;@d;ymzz|_^Jx!>+mbOWasS-aExD_3-$jOp z9{Na`t;h21We*9NXam4KR=qGfQ)W+U)odD;FrLo8CnO0b&dkGV=WT3Q8MYe#A9e=- z7eL`vgjtWGaguNk@dKn@c4$t{tsU3@F2pT4vw=r@3J248+eB0}>V0>#oV(;Sk84*= z2EdQ+X{YVaBbDa;ev?~?Km-SxMz0vs68d!)a2XW6%{V(`w1I1D@VbGq=D3JMz4vRs z)gou6MmID#q>g$N-;ZsodSM+L(nG*$+ly|y7Es;;;t~vqdryi+7M&CH67tK^on^TE z&hNC)?V396>#J&AjVc(P!;P$Ukb|+=mE(<_<~2YO@-pa*A+Qh>dn=Hibawb zTT@MzzxwFwY3$3PUOg&aY}{cs()Tq__bNBIAp`V;C%VUx^-1+*qVDnHjj%%a{D>EF zeG~UYYMvGkQ{#t#O(`J6%0FnPQe=1jgYrk`WvEL>HaBI3_l$9o3Xyo=?iUICkViMe zc0jSo(X$*!8Wp-ol0iR_8xzVTRLXjKadhcQMR(PQ^U?)<)+L5LJd!!0e4Xo83$S|x zGOR-V7T^#Vbvk%g3c8r7PJK(+?ET9;7iJq&!HOnOP zM4Qd6NDCcI?VnDkbP4kPaUQkeY#$m5&Wyh-4gsAz9ZeTJ2h^lMf>m&FQ7Yc=F#26G zg6@t52&9J9W-iW{?zM(A^C;_*%*nB)mtW~uNzCvqj^UNO=;W^!Nk&ku7;IM2(_k@+ zT&eG2x1%}IQ;*{Q^_;>JwG#@Lpdh2BgV6xNMEuXN3I-PjeL}I@kTFO$HGmDJV&?pz z13j%y-F3lsn14-_t|l!9M=n}=7`C$hVXK~p{HGnFvC_QI!wBKWDY2lig&P&(J1c%P zD6GGL9O3%mfil^i%A(236LewdVKSkrt}}%l%QFvwQtL1wViu12-x$Xui#)&ERgJI3Rxs_1W|}PVrRgi^d$67ZjRTHo zgSV_TDMh@%G;o(emL597J zy0<0PjYqu<_6l}fJf6#m7c*wwdSBc0YLLAlDj>SkDgpasAm}O>BJ8SNRMa!kg1XO;grq=pd#v61q(uF@lBF%F(DeOONy<9K^I?n@ezPfWXe33vL#N_2Lese4s@3JEnss?%1A1b4gjV9@JppiI) zG2;D5*o1Pdf~sScUCvO67vW-Hvg-T#2<9+d5i@IGXUDXN$QLrQyQ^Yt_YpMvoZ>$~ z7Rdb{bmhN)0$Ls*xY9Rak3JSp?8i6n5_e6L|Aj;Phdb>W7F80z&uV+9G|kBKA%^~? zLw@Dg^>RouE+uJz# z+R2V=xC*#U-BR)Ey)t+dk?ia9sJi`eBmbJSltCL(pA^-pUDkB+IsrB+g7B_efnzT-^qsxpd)K}Z-Qk{PrLDsI{h&0Rn25; z9T+{gqVP!_u@#%>jMQHa{pwZ-8n>%xlhZn`A8=!rYPKx_WGN&U;3MuNOS1!Q9Qd<= zeljY0N25;?aA17GXM5TaHZt4UMF60O~S zWU_L{tAb4s^ocnNMQRKLa_T~HN;?N}Xh!OHqn?vgwXT%I4LrLhm?pE<3Dx8(&$tYxqN7y|n+$>}~aOIhN=_KSb zsc~d&5C4Ah!(h<_p$~@{pN43SE;B68(|7S1w2&S%=J*K_FvO6k`wD`(k#BJU^t%r5 zlRG=@ogAvtW-eX{U=7H6-hN&&YC-n4E+o^B24PDL1mCU)r{rp+5WzcAk2i+ZsvF9>R~}q z5aJPzN3VxGr_o0SM@NI5JwVfIfM}!2hPqukNHe8fF17sz?ASdluPsoAHY*?pC$0ky zNCuN*h02t+)0RRHuzo2Zq9@+{+_v(QcbtE-03OsjGW z1%Re6fnIBObBEM!!{&>A#1I-WLeP|U<4T{m-Jrd1e0%&}*W)Q3sv|j->S_Bl#F#!6 z6RjUExJ)GO-XDYWk!-r|ccuN^Ld(DNlG5VwV;baJ(#n`qC%`n2eI=#w4l!ZpV2tN# z%Lq2H+eUN82))pQ6Dta9{gl*(66Po^M2k=>r*Izh`r#e_m?vTtgMf4iM$#nyyx%8Y zv}D!5Ww}tWmXtwl8Dy?H>yyUvh7QmOkb1=+_@Zfr_9`a}Nq<3PIVydf1{X*nU@RkV zQI_$80(FI?C*<=XOL^$3_K^l_%7~}#VCWg;gjYV#FDjcaq5BFo%b%kBvFi82uH&Ir z<-ZbtUjkeSb)az?AVo4JsX|J0Vq=}bLwz!9AL)mPpd-u5TXbZqkp&S3`!rpwj9j0=liSaWzA zI9X_h7lE=HKhs`W&@NvTi0Sxk@pEZ2+U0_!TztY4V7>z}SMuZ=MyCE$j|v7t;Ei8- z@^k(Ml^iQ)kJCZ};M9H#NX+}QS}MHV7^o}^*5nW0LX}Lc%*yL$Q7*cTX@x>TN${F< zRec-pqUPEk6vj2BzRa=1Yt(>loBFS@S1T7Bp!;bf=Qxtrp-g#_w9CZiWIQMA(4ADs zxP;&mt&9;b;3K|yb_lC3KF1?2Knq~S(4u&e3nwJT2R~@r!x8pF_>|$aSt`bKo|lMYj2fxvt;hTVK)w{?Kg6iae@_ zHpln*UOy7f%dvC+AsxqysSRZcGma{o`?-JjDylb9X)cm-@^;_+;|$a?pY#mw2Ji%sDu&zC;<>o*mfXTni=MpH%qImMfs!n}GDaCo&)A zb{Q}9^tvcxz5!$4UXDufAh#(JtN~k_mYUKOrLcGLy5uN_x)yI^PG&n+cOl+(VeAHJ zVITo3YBCT1@-pjdC6TE!C$E){4Iq781GyEHOd|^o)wrLY|i*f`VTof`*>QJ zHncy^Q-6KG;9s{ASz@gT#*}%HU#(*E92zjQ3n7dmbVOsHL;_m)$ijj_Zjl|-6no40 zAjV8%Rfc{$JT21FW;gr~%7FlAg)T0w-JbWB`OfMxc&BNW@i7(qyiu({r4v1iFnQQ0 zEaqy|*1|gP9M&0z%k%i=p|NB-m;jpz?*o>aX9>1oFlpNCl56qlVF|KG{-Dqh&s-dA zS3nHlIuJG$^c$gi>`xLkS6eJsU+aBPOIoL+T6VM>w3Mn{d%a=yXhSIX*hvdQ5S}X{ zOhhR)iFYU6&|Vsp5N#A;=2Y_68!`k2jSQ!X?$0b|?IzE&jEp%i@c)f70F2Xtr6Exc zb&nTSK`%@lY0wN4Q+b<#_=6fCnx71kw((N%aU#F^;W08yNHq^`{i3CWtU+vJrzt}p zk(QQihI`CDT&OwzHkI9SGO$emXA+oFy?ieQ7*HT=DoCa}!325CaVcn%_tzpiQxZ(y z#xqBZMP3u+{1l2ce+XYjX?gFjM%^?H^-C?6m(T~VwLN+&o($MtxrcMmNd4F#RYIPv zCRChNT^D!Z&n~8|L{2~{3WQAsh^PZs zka~l6adwe_`9a>i7vI^os3r~*xQPraa1Kwya}nq;S;xjIz|H;^qxK%xOc|k)+H%4A zexFpb7aV`ePT0qtm^%d7`6P-INqi}00-&XG$zVYD8+Fzx-{VOagXQwM;^3->j8#cA6fe{tTxznlcgK`7-duQlH2@b4wqroz ze#q}PhN(%Xo4Qrfd8*D9P>RL=Ynt&FuWyI_Iew9gzo_MnTzp75!WTlR%(|>u>WBmD zbeqFn;oBTms$9$3(2&`j8Eof2Xk-(`FAB9A8+Xpa!Tg7cPZH@xtXZ(35ob2-i`_T- zP6R~(nFWZO;w|ZfpGwO9`PX7-cXyY@IJpmLj@gFDK?uQkQp7sw%88GzqsEp#Dt~;p zEUB~!PLrB|3%epVrkQOtQMw@z3n%nL{(icCC~;Bd$k(lOrBAysv`8fDf7q0dgW@_& zSMn2_c4#cOGvnZ(*aTR5`{4Ot*cj|}FZuI+Mfh0I$4DQ;E*W+uA<*kIzy|w*n zs`;7#rp)whdvO$Opo4to#{0IyNEamzj3-D{SPmzqWr!MO^LOg|0#$Esw^_VaUG%=g zYJ@isrUZs=gj2U^c0xZ2sx#2jtCzUx;JDCZ!DU1J(8jSR>a-;o`i`pn-T&B}D?!@eO5 zCSr!V zv4jS2+Xzm@{}l<5&8YGh9|68U(?8w#{fIwv`2DlAG0dU^-w4D3MDQPl#-iX(h@^9W z0WkqGs^oETkUec$Uw_6)qZEc%dcZ;oUZEb9A+qP}nwrzXc zzW4ondH+C;T$xNVlPi<6Nh1CAeAik^C6R!jry2eLClx>Yi5V!I5wJ__FKy=-vK;;l z|ELL|Xh&dCu;HLeB4P#GI=i9HBX)IT`!}w+13l1Ny3F}uH9^+;QM8PX8=AfseFRlh zm?>m$hcm`)NpA#WMtb$+Q$SR(9zUsl3=}R34A(wxY44c+5un$wQt)p$$4dhWR|ja$v;Z}3X`Kc3t4y`c3~~qt+&sTG9P~BGVB`um&`%ay*=hOh zbxp2xsoaZe!BIUWkY7<>OuAe@FUrRp$Q=YC zs-zk=NKy74p=c~%epZWBtR~4D^0}?OMZ8^0b}`}h zt)^q3G1VWGFYlS^3AKJUWXX^m?*|h+K+?F8@$t}fu`ZTjRY-@0sxRD$O_+&#w5CxS z!}Utf@&K|75G?gQRvG&Rb8u^+Uau#<*d|;!EuF6#)XpQbT*(=vLyIUsn)y4v($t$s z_XynY=h+2WSV@cN>}HiN7HrioJ6RkL&~ZaHn&cEW<=$%-vf0F|ZgywN)gR5aeA% zL3tiU@?9Q((WOb_RS{VfQyushj)SB!=zeUHFN*vE+It4zg%pmNUS>pGZzcBqNq+Y5 z+r3FX<|$jlHT!I%%${=J@n$s~RpopwjLD6qz#$R|ROFQW?}TwYOtz7jF=!p|ufI~y zb9~j%s#oBnjn6~;9)8n1(E^?D0C3#F1$7{6%5r#v<{ek=-gy{}Yll_Lupsb=NQgJ* zp4Q8v>jWc2Bu)?4*dU(E`~+E;wP>{!$c-!0NMbl2rVFW3&ge2{W+WLgQrne``L5_F z6)iDA1FQoAaZ>(z~A<%+Ua9okQ%wyGkp~mb-m=mgIn0J&)7!x8&P4Uh|iddHBn7| z?>9M1=W5vOZwd;SJ0La9faNkQNKVLF%|wuXt|I>hnOYz~Ut*Z5c7?N? zdf3MNBP{fyT|w)mQ0JnEImM(!r{-%*wYzTs0vdLqmKiA94qzJm&jRHvC@9NoHd3rnCWhnV1km4ari=Gll7?LBJ!!JM!48#oy#a(y`5IV_A&6uADQ4?1*F@&uk8Iog@G zN{JzXoL&bMo&qq+cUWuq(*~zPuXbw?rB&%TR36f(XsFSP;JA0aNY$if3p&Q&g-IeI zPSm575CLzIGBs(3=uV@5MWrS9x6H4-77uvn)ve;7QokUhJhKHTScK5z|I@qza6{_s z1rvac=D}3RV(=cj#ts-69{_n7kAuYy<@2-;=aN6X*t=e+K9uqKfK|AA;;4rOKvLHi zL2zt-UZYgzr%xXq&yh@Y#tde9-J;P{OtR;L(*!O6r{4iVQz3U_{$uMlSs|U_kTCF% ztGGTaL`Ir~o;GF;uu4pbL-ZM0iF4rB-J_ zX0XOTYv!j8zj}3&1mfpS0;*9GMR#Ra+k}NGawEnvHFmW3P3TcA)e`rbbD<>R1P@g?~R6yi++FL9A26c z(t~x-LOfuy_LbwGVZMH{6yMhwSaX}uLvQR-KxWN?Ylzrkw-I^%xXxY7j#Ja3aE--p zIE7z5A>!~O&maDdp0AGm+5$4L!}bBImP}n3UP`;1fw>+mWR72a!b~<}f}K+aNH9Pk zm7I_L&FOff*rh{O%u|5d@kUht4^N`GccOF??u_(LKRNF#o1ihsK30sb3Mq8Sn9!kS z`*DIU1fz>wQ8|1*9yn`JwW!|VrFXm69l?f#mT*whnWL+Div=L~XK$VrH zqxwAik=lmb*6y5kPss36r<}y>JqFgvydq}nPRu^_5G;>OjrY*LxxH<3rGsSVWkyb< zSf%L&5M2eWfi8O$cwf{-9e>9dlNvyP0b-@3-}LXvnnJLs_6~jjkPBNQH2hZiTq+Z; zv8b5-%0zbIN)%Zd)!BvhJgCe|2ySM&8@!qkocyC`FemGHDN!dnjd_fq zvFFzoUpGW=6DT3ANrJ!8f&uL>o=hoIvZwt$$6P3k_w+iRR2X@m ze*8{D7}b1}&FtKEDd;CyRNs!@!f`~Jn+V=87LAwB4%A)`s6A^_pIe^usiemXK?Z~_ zM2`<7mK4b=)lEGq5^XHnFKG^I)(Y)+9J3YKeKec}(kjQIr@a&CSyHr5;h-rXAl>S$5P>I4`)NSrxMFO(NXC=fYG}4-+iid^r_1 zYT@sb6iLAOe}a@TfFLD@2>2EtL26yDn>!;uc~aohi|hkQbUnbLFPaED*#4L zbPN@l-^O7ND_BpotG4MX0~-qM1n-#CHFQ~kFP zl|A6}ah&4vw}PUWq<$;j*TKuI4>%Q?KBgnmC+9-fP1e7c?wPfOPavV3ga;DM>F24x zgnf)RFY*bP(In%!+{vJd^`afGtr6f0{Eg3Hmmm@I|5Kh9=tfH<;Y3YkS%dBf9zTaX zDD7#7RXuS|rk*hIX3cIk7~n=`7Of}~p$9*lVgx^;@h~^(I0MyqsvSz*G9f9;8;ji@ ziLRjox|oRNMzwGB9wod@!T`et0j5y^D(@^oS_Pt{GDqCu6~RETEMoqv;fLJTR-d(G zHGc~<)DX<~U@SV^@9f;&$aor8nyd7Xv9!kfW~r2=cMu*eH#7GF{Or9f)fT!g5w%C! zCMHDpM0r3b0&=2OyzS^)S)CTHL1fS63J0Hs+HFDu?1#e7@hULp@UEns&*XRx6nCG- z&)!EHvh+S?Ik{@p;eT#2IFn`F-Q53{YANje&>j{O(+Z-KpIVo~-TU==kNvRSW(UB0phJ-wSn7_rCt@g(DDLRLR zNdM%U7)@#T;V}ES|6Fm${&!%E!^0*(s8X~p)6NXgWqVs0PrNmB*vshRAGq#>| z)Hd}oR|_Ma)gsA)CcacD)Kqubt-}ba8Q@`n{sJH)O8N!i9fV93LN#ez+P-d2G~P40 zD6}k-6`kQ)R`;6g1NQ}Cn}VHLQ*qEiQZnYN%h*--PGWwU=1_PwAkfyS(C_#FiOEV* z8jhGcag3z2dZa2i|A!3X z_|5`IGN7ea6hcS5=MLX;tYN?%w>E!|qBnIq?qtmC>8sqnl3?d}xQt>-1vdZpA_>Tm z$}Z1wAA1*-qw*NPmy&x68XAz-xn$^A;gynaN~K+#B?B#3yAeUB>^RU~*EN7g!FMa& zw2Qc=7^Sjnr)T=g>GCieK^z$GQ_@!N$O`Vq?5j)GqG6BH$M#s_ zkIU)+2YdClQ9L(0YTWEHw$ee#5_1P5=1BlQpKF+B@ovLttW;lC=x4;0CK~klZyiQ_ zR~CJ$zGy-Ggcjm+aBpY`LVlmwM<%XnJQ0Kl3-oWSZfi)~!69{XG3{c}yKa6LcQ>^5 zwBREF?*Kfn{{5vjEj`M+UBpYSGkS30J^-D7X4&T8RVy|MvApnfz*3XSRT&amrK`Cl zWleJJBdPnD#aUb6>_(pU8OyQKbEb>TdI*!w1q=%tK<^Znjr^zyA^GO`Oy~hNcbj{V z>p`*X3=vRS3Lc%Ka_5^SQ7i!;yjSd~CHy-+GU1mb^`Dufr6sAZsLbS>>?O6&4XWxa zd}0fTM0QRc(CQ24?|~E!T)?e$1B_`@Tlp%du8-miS*GIx-#Nk{w3&*251zq5YrFk^ zffUa046Ty=&cYy#g4tx76MFq(yO94iW|)0CkQL@F)ozX!z+&G$UA{_LX@ijxEL$RV z+kFn0i=XiyduqEcT`}U%Rr2{@wmJ1BxJ+@pW}Nc$?wTV`ml#D$(hi%HoLk9qJ98;EiT4$2`{`)tpV1 z>Ds6KGN*+YCWmwmif=Wv<%Q0=q{>uRX$f;j`I?W(kkT9{gI$!&seni zy5ppAR5l%%2Sa->){S?XH0WkksFU%$r;9FwH)+kdXOfkpwZ%>rC?HD40<az1Iz0+$u<>E<@$?7$7qe}b|qQRLe4 zk#V(jhq6L}!dw3Qg-QIb>>?8FgU+E(G-}b^7Ci%a^8ghDloLR~(gQ{~e0Rj-zA|KH zdS>)`ajnlOMPe(3_e9k~{EbiPP~nu-C8deX`F4w6)WGIk zHM_zZ_%MFsyMm*XhqYO1jOhZq2Y~pg08F*8F7zWYh;p-s?f*#J4*$&fBqnzsQ z3&w4%&6%w&b^#@ETf@`~jqhgs6*Sm9YvlAIxpwda{H#4PnfR#xJiQ~;W+g$nLtBMj^l7w_}NxROU|pt3*Gy0{T<{ z&s-j9@i?OVpf*7FSWFGdRQdxE;hCE9d$(O^TioAYD8S|P1Xw&W`um9XT5T4Q7+JzR z%jj()z99J-VyU(8XiY(B5qibBRnio}9R{kz$EkRYZ<#FL$gn)M4ALQ4(E~_P`Idj7 zS}|c0G$3vqXL;oUm(E%)^>rLcnt z_ERKyJhH>45!xGvxR4WYn=&@-!0adJR88(}z;6Ha;OnY=2c&d4r;s^T40(1 z>MyIZFz*`uv4^V54wV21iC~jp-x39cV|`7RfC+gN^uPEn^DAMmAEx-Du%w$4O@H&e z$dvE+V#7qm-A!>LXIAReyWiWlK2O>MnTP+@OpN|rNe2|Ye{UK5D&*V#rS^07Xv#N{)t2)b?t-*gdUA9^uZNCB&*#v@;nE z6^d5+-fOnWesn$c$+Ba1C|G(RP~iA#&1MuDPt0QcEZ^)L@r$j9&3bN13Qpe10Px9F`p$VI7^tY8n)?)8?nDs+6v zbU&H`upHXi0rI95f*L2PIIx07*as30WA#59Z5WH@ELEY|O8S z&f&n-QJp4xY*!9doHOks2QJGH0}Sn8_`WOK4Lw;XCz;e$iY-g=Cd#4x-;+iziKYKi zS6>+YP1WS=TYSoIg+m5QWPj5=kXtIW&l_m*3k+ zO@4Cui4L}^PBfrqc88k$4_@Y)q}i%Ar5L@jt_-T9KVmWruTC>sSit5o zAdhN0RflX}v3?VmJZr%{GNRWtggO z5`*UYH@tBs`8cr-61YwNZ#4&^Ai6A6A{gNcgQ)u&a(}DStEut-O`1u)LbDl^BseJn z|J8t5`L56-P9OL!s^O7lzRw#y_?g3$tvP{F2C+%mK)acz+IEsuhTy5Xuto*C4^4nxqSORojM&5V}Ts1AY5|-i?VGi zCXZ`ws!veLB6zmC_?K~?q@ptf8t?`PCOc|1)>Rh{KxFnRrUs_Jj!}7Zw zNp&Losi_Tz_&n;Ji|59=RKWc%-{F@6W$8e7M%ib?b(oA0%}8*7kX#|g@IP1 z&|YV!<7K`nlPCBtR6={PRRxb7VW6Zk;mQ5u@XshnYHl|uA}m5 zKzNz)JZ0t9SQww2$7)q3#Rf>*WU*YY6FNz66~y(VuI@6rEGswb_ieliTD5t281VlF3(l^Ik< z618fu@#0(%T(9azKY_@Hu4hnLS@00KDwu5Tooum$h6rlmLxB1F%c!!jjkZ zM|Hd6jY$(~HU{UgrT;`rcQ4gB-Gd2(i7j5RUNI;rn0hNVbi{s!F+b!r9R_(Wm?XtN zYoWc_%jr1|hwlMfTBM}yS~A~Aa6;H(-)~A=fd5N@q$W?{*6U1~=;>CMzevP{W*zxt z?+4Y3Fy1n>j^$$}ued`uo|V54+bjv@h#N-noUd%)kZH407j63XLTy39-S*T_nT{XH z&}%vjRbV)l>*?OywK(g*F{7{)8tjK42$QlPOsz~uk;41qd&qN*0@#e|V*@?Ui*^;n zQ5zxhKd~9>pd8OEC$YU(LlF4cm&bG3*;_1d{?qOS_;4CsdQnwfc8V8IBBpv|h-`GtU*&H}MAmcpBg=#} zX{zB}o#v8x6;LNq5V?wR6QFl#u-h9oSTkybf|?Gjk7gTF5jb?=Q7bKepjGjN&QM<3 zE0D89{OG}*7s@sS;bRbDX?raD;2uK6{EcfJ?lKf zqUGM!3*ANvE|B`}O-0l_S`Jn6h9q3Pb0!@ld+=6R(t0o$ z9@VT+(XVOx`mf$3Gv9hKI5mAKeYFfU+*oWMMXz{$mLGi+$EY6$w_VF3dcC1gCH41~ z8)@Da%H)rSK?XpZJ-~78qOUST%AhsZ`hpd(T26a$%nTws-vmoJ9btqyX}U zh@cJH3OzB-#-RaR)h))3LxQY!fv>iHY&!jrIw2lfFN8@Ab5t^Mcu}rI=cx=|#)2A& zQEnY#1rB-d5nGNIE`&zaj?3%P=FR-jyj+K56U#SxC^pRVh;Qnz##v}G6~^ipZ&pJ? zR~v5Fo+V4ox7slndXot+JVt9)Gb(~A1i)JYkTHdpqG;|fiVcU^w9?VE|L`J!G3kO} zI8bkzh92<6eq3$+4b3@mJ71Uku<>x#0xyjgpIafTta|3fJVpTBrL&3MjnCcLmd8ZgFvfSho8YpfDYqhwfYK@`M?t-`SuX7J}lZ#|jt3 zc|G-OZEUbFXI5Ru@MeMi44K81)Y6b>d{4cub(>+rwfx|?@I9r^=>|oq-2CHR_Aezp zQ1}Ai(r0L4IAe$tpH4y+{X@*|gR#xlC-f+#APO{?EZa|ujK{sGCw9f5(&X*-H7 zP6OwyOCIkzEuumO3{2ZZbqHD$riz;GNHzRpJIZ>A2lN9HFDWzd1_H!OsmO{gju_V; z8HJPcBR+k*U@am_8O1ns!WzbK$$OQ^ac*1eJ!-2AfM2 zXf6Sn9xzkS5kAXN$~RdF$)A0Rkp#!F(`x>f)apE3J0{E%mKLjXk!tn*>&TZnIhXp< zllK_FF17zCR3v`CB*LEwjjZIB{R*OgKk@th%j4zPBwoGJ^R6)S=CwBtgrjpD*p~OxXZI;Y2}_Lk(X0utF`?&%>}Q&W&kLg9I!k#P|)w+ z`H;sE;@eq^(5>34OT$JWy@wEdcGpN>v6+7Ey{|sp|ATB}qR$<(gTnd+ao32Gc7jS9 z-)(IGNg^7bp!hEL#wY3mGm=Vd%i>Ny2X`O}%momffHbI)U`(bkhrC5kuOL@-m*g=D z9eNV6iEkrn`{N;tx2u2sgGYE`tTu^yDq)CKD47WY!}6)#FX~2yvp%p29Jivt&#>Wy z7)^S-GVp*ud$5g)M2kJEe&~PFnDXHLpn zUm<9YLh)?RK*6yluN4+XtK?P{Ci;Q^(0v1qji3e%QqjY0TrR8)3i>E}S(4VQ= zG~R!yZZ)%)JbuX6I-e3-cpW_O6Ey-Xl;F9j?3i;CQKC0YNR&kAh;Pv$MZEeEtS-rC zWRy~eYchBb;*Tb9dS;p@rp(JxI@2zTscbvDP$(XV1-yWf?6=-L(GTdB~VMVUFdCU0)bdrklEl0n;Q#VM=(hUzKWTgxuZUg$5oGf!HV&MKtHx-YErK zVn;x}x6H-4$;;YO&q5$OoEVgO#YlWmP-K7EDDMB^I8`mB_Y9cSHgtLKREUaVpkg$# zzcM{>xtk-Rv4SP1tOglIGoo)+E5f8$=4;(Tqj?N&zHXFM1e6^DP@L$<^BIEkoG*-O zh%0^CRH^&G)n`Z4+|(XYw!!)Hn=d+pEo+}NRZ|+b;$wOBcUSVvvSoE?F?}QnJqb}d zz6G;f5Oe+@g_;3|m|FKQgPGIx4q?FY6e0tlw>*jTa_5&)Tj2rB1}@()Jh)YEcidlQxJm|1|Yc;|K*bQq=a^VRpK6^+(76n=qp%B#)spST%caz zP;i&I%h|5bD|9r@4;*J~1An_PZ)_2Ia+3;mxgH>OVxt+oOMzGrK7gAJ@hdp_VbMtI|$utgN{E2xVWA49(4k?1K|oQd@?4 z^^*>MoQw$Nj%hQWX{LUtcHHF?BTD*BV}vtR7&yWQ2!jgKNP}oYZWxO!VGX-lGO*Rt zYV|c1OZ-;KY@rQWM)<Ds~(b-#O&td7$LR zqLt{sCaFl`K?s|6Dk|QZ|6aZwRNb?nt{&Ck)aZ;9f{;}@hml~gs5Pu3u`v24KBJdEG=3k7STdF%ZMQu><_0gX zmTa>;|DK0vi4UEl=TG?wc?qn7{6~^nU2O6;l<-kBIcyrAT@t;{;wcA3crZCp9ByYO zr@TB#LpaR8)0oOPu392n2ve(~ZZHd4;oFMiJ*9!syv?+O`1mw=#`@(dYRi^D6-l>% z1udyg(h1BxK$4W$?s9^VtBs>K?Z&I{PmJ`Odt#)+u_aRF0cS=Nb`u>caUb^D2-pC5 z4WUBk4GvN3pGHJ1Q3FT?-0t$Kgk3^TqxZ14Q{-=7cth%iZJ%@>7)~o|CQVKEc(uBw zC)PtBs1RNEwNymT1p+GQj?)X6{~V9MzM95j0%c;QX02a<=^F^0N+%Rj^BwX$cJ-T; ztWiYoO80rOUOAN_5nzao*MPJpA@HKx+ZCAupiK5m8+ML|;eb=m{l&kqxR}yTs`T_xFZ% z-6<`i0Q8sVG>_6~%w_5~n*;o7`L}b$7HfB7wR}Pd@LfUs$BI*!C@bVPSzxEGEXQH zksGzfri~IE_sNsl$L@|Z2TGTbcM#Dr(Li;B(4qq6M*!qU{N%1iz$3w@!P->8wfLv? zNxr4QPk$c^OS4aU$yZ$p7sln_PtGXSU68Z(FZAN#>Z8Y?+vePjU4Oz%r0xK0aWkSd zihu0##k=CdL!mgVOztdmdwT*M@c#$Mi&~GDwcu_IJ2qSsc%I?SJ5L@lw%l;8=I3VC zRmF>7|Kj)qtyph!_Ve=YOz?vRYR)Bj8BdnX0&c%5l0aaf%fmG)l5wJ5Q~Yq65tMkX zM^*Vbl0cN?9Rq0m27vMJkf#1B`@e73eO94?=V}M7^}6`>ZnHjn$=dmU3|dTYw&IEF zs|ul{o^H2iD!Dk}*4Pwfd!dqZ`)%QyW~{aB4OqMjQC-HpaXpkrHceEdPgM52{U?0{ z;5Q$vDE8+j3u*d+JC43QL&EnAA|7t#h9}pwkYBF|2FU`qszhfk_!v&diGh9=ddtdj z8%$I$T1e65Yz}oEppS}We1dWztHlI~nN1q3KSESiGj_{gfWHTTyeI$g%P$4@-?(}M zJ=%QaFR@3R3y1&6^oB9<3>Pr7Iv*Kf1_yphih^+wX)LpzD#hRXiI_|5{_)PtW{8|w0?=ANM&YD@Fg^@??Xsu<)A;2Dn1OjIa@m!fi6=Zbb#42NUCf&(%9YpQ_V z5JJ%x4pwtMQznEnatyxd$GGQDKg`C;tTM1m+%uvBMDVTOkb9;v4XBpy2qh70+d^2# zH`E243E9952t+c`WT0(kR)AT;H*>U_*Cu~?>&~ud*t+~HqsiJ(uJFeJqi9lWU{Wx+ zbH@bBYdEwBIDPN>eh0nahZGYw3hVT;zw>88VZCsdRP^`Y& zD^vMaF+xoXKVeq#D(4&Z_p-L16<^y{Mz~oP>LD zn4FL_80R;r&zuuJPV$J%`IX;l@biBcWR1suPUVdwZK14@s?-__Y3~2|LzuS_lv%4S z1799t%Ppty9b)T|xZ3enKZgwzc6fP1E0v6ouh*TY>EivY&Qe4{Ka8lAO)gIln%ZF7 zxeme#8!DH3?W!U;mFG6>05Hc35Y>U8CYc_-C^STq#zD${(1C&}1e9KmS5US;7M)&( zdE38QTh8w8D2?&M;F;KITNZMzX!G<;yaih)kS_Tub!>d9;o`-$Ynl6kKktSY9A|#Z zFj1w|(DtDy{5Z)BaJBBWK<#j0;v!=o&}8~Kz0Qy9n|^yZ9ugm_PmZ?h7>8NJd<_a% zcp#AJmm}?^m6~$k-BDckpI^1eSy46~{!+M~mT~rZAq=s6f5bdCi$65q}i*x1gW?6Q0R6%gX^oX9M;BTXugFjCT5`{x(sVUAen~W0 z(MtpFEKYr{A~0 zvCoF3WPy@B0e$7nI?}a;-0ga&LHTW5Q)o_^`NS#T#N@*IZFxYk#*cC|b%b7hR_cSO zkeFuak8!8017Tg;w>U?7RKzdS`Y9Pfh zx~|!eq8?3VQm7!MVU%=n&i(cRb<2CQU8zx~Z7ig9h7lX98V`6lvEc~53D^!pr!6}w z=)|KXs($}>3o#}FR^Rh_TM`VK^!=&bW$ze?$x>8{7ahcJjqrIchTmEuA#Jp~kOVRm ze8P3SqQ7MVo}t{ln7mmFQ6lfx9wd|f1m})4ZoF&k;COMyANjxjitmFS5gowT|DAk6@|Nz!P&@DlbSS0M$qi~bAe zdp6g;NHwH{0ShzvK6|JU1txZW7dLXPgqy-ITh{uRH|S)C1CB){_$_NlG6Q-cDNfzY z30R*hi!Y=n!=dh(@1{xGRMM=(f=NL669B53gEg^0;)HF_xus3#BFa!{@_WD>gw#OK zkcCKN5FIL^9v-62h)|ZYYX%yKR^ihL370Ov3`Wiuw8Mhwt(NmR z4@cg_EN$vwdh`7tAdLahNm93pF>0+7*ri*WQI8B%jl zD}cs-06ZWu`5w;7&i7}_{z`KYwuSVmpyjP5TB!+!6RPM^Pe6q%-)cJ1Nezb2sE}B# zNn1JRy>h&R_jGIx7D+MIZ`+?9Z0rlKP%iOq!UYobyROrDdzg6<*Ad|O10*L&Y#}|( z!(r;lu4heGRap{oUml}#O?mIKl8@9YLa+)x*Fl*yl#H2LkQZl9>6ccbLw7W89=?1c4?u^&gR;B3 z6((J7ADHwA692ee4t-`sA)qhQ1;rX{S1X`Z zKm&nRmYaR#O^yY-nVRTQo zt3acO0%T{roeGbgEi+*2y74MEXa~}SqQo2<>!yBE`86>$an`d?+5+IOS1St*sWoW zbpM(=O#5Zg#gY23*e`+J`x92TOL5!8mv5yjuI@HlU8UgpqL6BhNdY%{_ch0c{GkGr zg6#{0z}&46#``&O<$U?qemXA0{Z1Fyf}T)^iN>EZ!l2}=Ux-`Z*eJw6t|s>n;C1tm zzN-y}?tzta_d|496jg}u{>|3{gm-AG|Be_Hboq}#rp#gNQUyvnj^J9tXi5*2W=Y3# z#5sRL7DwDlV-}}$bM1-G*9%WsQ=PPYOfa4Qa-EgW|FC!3z&EyaKeV#w-^?Dv#tTn8 z(5kKP0hV2$eE|WDJ6;z&wdTZ%@8~-&5hu1LqxWOnW(=ppqI?Dk51wyr`~PbplJ>mAF}8HL*O0&wKmdoY8t*r|9T75HaR;&zo7(8il4@ z8~4k#YoEehTjFuJ-+mW@f3t2o|G2XMF-EWa6Wo+AJtWdd$pziXysAAlbUAq7_g;tE zXARpWj02dx7yKV;$v+H7@w6RE44f1CSMg2pNuArJ79#)ai$S5njvl|oN^9T(dB)|) z=zZ0k5jueo#4efdp;g79f_*s+%{wrOw+J(j zl;S`m=fJd#BSgnW)yj|xPcX@P*KDd~c!clKQa-jyo-`nX>g74XAbo7|U{P4FehdcOgit#&VRuEp`IP0`0>|G9v=6%+i(3!LR^gakoFGJsQRz=7OpdC zut>#I=KgZ@Rm=-R$@#@C--zdc`>6wmfks%uQh2)~Bx0djEA zSJ@}{IiRP_0Az<)C+6QX>HOn0)V(reA@{f5UTZKh(;86AaIa;{l&6Ay_B(aL`>V$D zOceI8b0X8vrkb2a_0P1N`X~(iN*@{0+@n=k0ao% zp9LM)Z1ex2B)^#`4=wSyc-g^&1Vo0nbkC8ZfvgBRsuN=A;^dM9-$i$YX=k58W;v(9 zQkT9CPFHvTlhEsY_p8{OU75sL9h8^^dvW6hq9T9*CV$Ipi{mE9PS%&zgIaxBB`kjl z6fRZf1+$b^NA8xdxUMsC!(=-!G4dk`Pg$o=Kbfm~q&2(Z>Z6aP@mw)-&8jTy24SxW zdk02E!L{OYg#_dT$KV6N+Nb>oUd~|lSLGtJvP~XTboEQdQba% zx8h)AQz0N)&f{C1^>86a!_LQ1CZV1>r3~m6#L|wtOX&O$+ked9BHudEW1w6*A8cl}gTZRnP9k-JXeh0AO-c-b?cl`Xgb!SGe)YLh#KDU= zW@XOP@@Yg(jaBj4lbU{WnwxO`hpr#M@qvgYDWw)|UU34*gp<&BDefhoFaMuYteF0s zHO+00miZ?xh&`UUQ&_jA2d2ODFciN}N59r7j9WD=ZXm-jwM(<+`7SREQXv^ON1o#V^@1}dFcb@c`c3hYjnoQF0_ zbqYUGcUD08@rrKDfm{a3CQ&HU+r)%4i5X$;;R;PUk*(@|{>lLa8z7&FcJrS17S4jr z-`_L~Nu$VFQU1>;b|_Tvu>Xi${tj+rQ5ib8o%lU}yBpVb8Q5({l#blulR6F^ok34` zA7zIHv-KV**v7&1-LKLJXYD9!c2nvLdcZLqrUJO2MRu3J$OqD0vIOq#Wl(PA(_X@4 zG=5|jzBZe`fH~=Ck69JKC@w&`(TS0jX`}_*?Pb=!59CzeIk(8)@4sEP{IF9a^UP*0 zLvS!x{dK>N7Xe(&9>7UVnftorrQG@(L^wy($EIXb7pv=Ih}vCl(@f*Fggp23{DCez z1rffgxAyqW&n7DMPff)?0}3{KUJ6?x84cuV;btuJB4Fu^IhJ(>)r6|2OFNE0r5Aix zB%QTqk%w)6fCoCRCX^o(S4wu(!b~5Zi05ZYG0(P>{z-lfaVRL7Qw-7KMrXbDRt@?M zhsfRN9AnDNa#tL4QrV8|6y3teHK$BD>xB!rN!fn`Dt!WI?&~7e;)NpLK_7QBX&|2g zjO{Cm8_KIG_;8jA=UBi)LI+oIModR?=D5HuJTDzeiZq9G4D$FiT|n{!6T?geHBXR} zdB^D3MTot#Pu!AO54n_e1a6&wfcg!cv4?txK;k&+H}sRY*$un$Y&Y$u_NxIYPFSBr znT(bM0uM25-aQ@I8pnuCvo{FTEIftQ8-*O$O=Q(=Z`uX{#UJ-{<0zu+K`W+MqYGp;N$CiLIDu;hY~h{xUgh=K>GY%m)dnJvq%U1bj6^}k z+GMJrUp+fXiEk)Oq6CpoxXRbw_V00-*qsnmD|CA*4@!;FPGV(@E?=K~b1N$|8^>e5 zTqwK`n>4fFse)y9{A91#)j^UTgDmDEr-1L&fdC{b{Xwt8M`dMrOOgn)%CZ#vc#6@F zBoiGO=j{3fR3A2U@?JbbW;zwoY0xo$slCAA4_q~_RR~<0ej>hRyl3NsJXLL8T!Vj~ zB)`7=+RoKZH*hst(gAA;D+3%kW$lP~cj9=qp^nB=1{24>va{U+o zFeu4o*hb`qfDAO4|9ZlT=9LXU*LzyXDQ$*N>1*Ss5=_jI^}#`iM7+g`d?{arsje!} z+8oot4wL0Lf*MHj59&g$7w~x{05v0A(SpGU7lE69wVm;+AE8HiVA?0ig zQ9Nn~x<a5<=A?0W0X!}2PRzMkKddpKNNrZ2`M4I zvddT%TOaKvJ?B5<3kLcD5kjgSrCC`0QtDz$eYLotS_^^V8~kcd{OV4fu^I6F+Xyk5 z!(4+=RtKk@q8h$A%~~48elbN6hi?jh z+{JB*4p_=maRShU={x6*7Q_Iru`K_&#;ilM_G5NOe!hpuF&q%q4EX|mss`|b)a*~w z)qD-M3R~95ng}v~tQ|1^EY^YS-nrZqOtS3TX1$YS_&oa1UEB3S`L>28+w#gz z93YjzK%O{L^O;S|DAuAkbKU`2EXO`5A?tbfc+@q z5~_ZPsUu)%H>%v-S}0)2R7UCAez(2Ax4KP<@ED`~0l!?PDD|sVZZnJb8;7?vIH7fn z=bX7v*NzB;QdCI%?(FK)j!Y4ZLxJftarxb+q@hzL@Qojk?c=ZAw^eaQ7vIgcoKI@> z4Hco#Z{PsUc**!wbahI&ejt(aYQ>)Drr1;~a8JeIp`f2}^{m}t%b`VABt~d=8%h@1 z0)K8Xo-npn*1d>K{bn`I~RW~C`F`VZv zbolq5f#S2Pj(0cm+K3Yg{Z)rgJ<4@+;+7W9I1Q`rA#bL8r60HU%jKrM#HE#N+Q!b-*4o3F{1^TNSUQJex%VK_5%z&+m-E zG&sp-(T9@G)Xao^k>P725QAQX7xA47p_vab9kpv?@u~G(UIC1=db#2zC@lO4l15Ai zwSSotcOu}Bt>R?fz9B{Q_R+24o8u_<-;Bkv&=}Y>^&1X_to!@Ye^d_a27nwR}`*>>rX$Wg!=S`>Oe@vGwN#c=*Ld zB5!cKXa2R7%N8%o$L8Fr?_)b7!DbDh&!V1cn`$5l z+kT0<2R%ojz@OAXF{mK+<*ZcY`*1~O1VXU)o*)v}jxf!NV%SPeR0uN=D)V($yxKN8 zh)={{fkllLSHFp~MeyQRl#2c@yN}aAMoGZQC{`nk18nC$??dwrwX9 z+qSLABzy0>d(M7=I=@?8RbBtS-StdPukHdp;s%htB%kAVOBPk?fsZBL0C|59(^m8C z2vc8TgC*o6VQ@2!d0HcAU> z&{qY_-(vd9Scy)$J^(Icu{p?S7b1iB+yInRO%NWPnqjMZB`tV0)@Fr_+vi0f5ekrn zK%~xwDC~y`me}@&Z*in#obQ6C6g-8rb}w^Hk>x8?>S%t4-ZNklzH3|tv9feIDon?} zLW>rXruUq(+Q<+S|6@H4V)E?|z6Fco<$igS5}b$vQz52TI7ncv26A$wT3=4!hH3wf zre0XSeRai<2Qmm~&Ub{=uzt2_Sg1wrW0WtY1a-g`p`prjf_-ZrQJ7-`+;V zj6kyaL2wjDjYsg(;jEC`8XU9qE2gIxrR-hX0x@)A6(kzk^moU+R=PP#9FJM*lgO51 z!Vk*B2BQg#Ee7Eo?UqJt;OdO|ttvQWW|JyW#5*x}2_J|rB+6!%Rc{0*OkO;1pGo0H*A^UU2hZ!7fTXS8=>ao#Y4S=_2L;K1c%5j(YheUAnD5-gWIB zO!X>vx@s9B28ZMuMUpc4N4ZHaq)Nrf(GcXh5EX`-+dS#PX?sA^w}9`I{YG%aIMp|} zB1FyBY7O-WzP%3`9C#+U&suIv6n3*&ty-F(%<@glaIS01c)cP9n)*yQr_60k^DrXh zDfe9A5o@=-KW|jY{uW_KHpvF?ms@3kECXU`=*;cMIYv9dcn~u?S$ghp7G3 z?6Q^dX)G}ZTE+&5HUV?pt=w!486^}*8QJwv=a2mbWsczDlT0{CGjlzwjEXZHz-8wQ zZWR*S`%>cYGiMH7#&0G^-}I7R^FvvnsIa^(a}44sN29=5A*D8c=*$b?4j^KN+BGJf z!NNlW3fsE*Ko}PUHSghIgUFSVSg8skKf<~IjJ8ai`7GXD^3Pn|XepA5sQ}!J!R5U5 z8`}eR&Lao3i4v_v{^wCxL4ba=oxRaCW-uE+pkDz3W@Jpl$+=uIB{HEeZXioNNVXDs z!gHMEE5~j)ncc3DbJ^*{>T>((#|IuYA$}FljzhF!p3MqwiGe&nkkV5rvZlhx*ggXqxl(=I+ zVzMS4WOnuLF8qs(sA)0&^fo`CQEX>NxsEvymB0swxVSqq*u=sasogHi6QaQk4Q`rg&#u~LMbG4vJG;>|HJ^`bFf~i`dvwj@dKY#4*3C9{`$u0$ir=el< zpAn>JbYVDSQ##{pV6T{vI=yFfL@twr(y0-EcE+4)wq zL;jw$;?K$u|Mw8)6fxQp=SM@df4S&65_7v@J;zEszgy4~V~)mjq;)#(UV|0d+C)eo zUK4lTibQN!L@Ex|3YFKO>+K8RK3k|ikjip9WH448gWi+pf#>@gS1id=2|oxuz-w0h zh=wib!<`O7?x02WWNX<=gr_&wQVu&(jwGic?ldhRk@@=#6#WajFVyEH1Os z{YlLgW@+t_OC93b8{;)$H7Fg&o+97BExwBtrksLSGD!d(Y`uD?)(``?NB@xwkrTrq z0d(LaV1%ihq_w=*Prz-;nS`r!=&&SW_^f2!JO=HTG=IB|z!N8$2R(az_x=SW-O;}c zkl$3@!&I{DIrT1D_pF$<(jg%W6yd1~XHIWYH>@F`K%p~PKZt-GGmzX8LR{;A;HKz; zo*whNQ)s97BEcbyPQ6rrz$_B+?>(U{?34LSu{|EL7uyeeIAl3!{QW$yA5g*~*Y?MG z>IywM{=c0Nw21S-b4(iVM};l;;?w}Z z-9Si7An6$?-FNJNKFaO=-e+|To#K;FT4v_rLtQjTQuEu3+#ahZL&LnwU{`pqV=^e| zzW1MbN+IDcgKyHjXVAeym|^mv;>m>!K#m$DU)bp zg&?*1p4{}#>})2b$C|&J@+cqrX!qwBIa-)_vwo9}^Oh7se%0an->Ba+K8dJsjM}Aq zVkG$lWy(+I8!V&GZ;Juq#T|&D*7E~^h6l)K2_ec)=dtEn*MP8>rCr_q8Z`Vto)i(L z*gJ zLFr|1+{U!=O8J@R^}LKq;|b*MM3*mNho!`>n64OzR35W2N4^$oE;tE2I*I)-pilh% z*C!2v(xG-0M}K*xZt?bm3k@**Y=T$!rt9qM)N zUk#r(R{u%nnz2qX%7FPNOD5G~O*PxNfw93y?oR;G?EkS}onkV*z-OBQQ7u=D3;NmZYK)60c!$FA zso~Z6q4G`L=5COP>Wp>H$Ge}@W#ABtHzjS}Cz|4j zVM=ca(H`;80j$}fpLY?NEX3PcK^y-zTgTL%PWk)(HeQP6>==Pu1}`9g6O{)|kW)d) zCyDlemzagyXY(CkZH;7M`&NrYsN>ecUw;yTBA0sJ#a;CEvz1kbyC?8?a#I^xs@UL* z(Crt=t0Z|vx$_g5Y9}<<-&5-mA~EIz=l_Hp`mNGnN}|?tupdvp=)>3xH7^LZwCl)o zQLQH~p1Wi$$8B4`0n>sD#!RsNRQ#fyB_L% z<*W1ZKOwJx<-9?oZpJ)O!;b{K%?gUK#o!q}cv}Dv) z40R%Eb#1I?Wbwm&brnLcT zCrHw}#rxU(fAiHg6<6nk465jqy@lcB-{m;*E3->w1Rf53BpZw~*JA&w~V-RPeRrYb&i4uHL(Sba)Jc$$9Xu>a_ z-Pa+!c<|XDe>5u*W1`m3<;$I^mC%%Wn>AbD_bKLN|A_8N9-w{$p)0Jz&MLv+|G+g6 zCas}IZ)TG8vMR;EU-?J9AAf68Z+>St<1^oDTOTzq9&nU?$oL+c|9HQetX2Ux7}YAH zsmV**G#esbgwnHcZ_h%;3xfD_4;T2T5? zI(NxBCQ8Jwy5mtMai(C0)wCcRx#ymvd8Yg=>`TsrJ7YI1qoSC3mL zoG85zwxQ#iH&dgj!3Tu-+7uV<;wZ!Hmsul|wLdUI(g3OfAPGp;1r};*oY{9&N9VWh z>3G{lZGML6+ifbxfJ}4~4CNi$`u!*lT5G=!0?jma-P^33C`a4DJ&7rrb$AB!An_A} zf%;5&Tb0ad*CqL<5TNKPfap6*J03FCpzw(uS!cwel*+o&QEiWhZ$w?)dA~l8vIMYv zz^0JaO6*@w)!}NiCNTVoH5ph7r^~Vz2+qk}2zV`O<>Qp(mOiH4ha(*o-ouZ*p@E|N z0HP~pR3eeBW6K&BGg5LNH`O$aHtw5QkTIc=m@{aQkFof zyUnA6BmaEBBT3z*PcWBRE1^H~G*i^b4@4$aHJ9ti11&ECzKA6DP+#$mS$^p`TQ^TH z%J$m4#4N_iE@tf}6a>7?T=2{}*^dZh37cYv7HpV9qK4#byJzNA9BDu<^o$M{w!)s1 zoR{Rq4IJTt*Rs$y#KN{e0^M;6Aje7bl9i<&gW{Cd!??ZZla$^gVj#2RBC?Wn3Ye zTq)4>2SBtu%UOBCH#FGx_|$3%gj826>5I>@s~8X? zi1NT1GMM9}D1nT7!}4|NZu)sa9!xzSds#CaBjd$1fu2-L+&X@=$e1J5@q5T{ymbkojEfH?I`C2-5GO*>twHA`S1%74`wuN- zVQZ&$1~lJsl)~hbQ_mqbaUwFclOD7!l923C``iIMnGH-tKv zE6z4Hx-B(DQO==WL!}>kjfW)Z%`J0*0^zD1`d&77*s?M%Tk};$ zFY~V*u1Rb16xDIr(!%7l08`IW#bk0wHJB2XBWms8*!{gTUL*Ksbnu z^rcr2oY?2iL(V|uo_ssBC|#1RNqNM>Mc>Wh`z3tSLLrUkOhFf^;bsfWYM$FSR(d!W z2%F+^n4e$}6v0~07Y>G|=cg&i^lfsPScsww(IWQ1jJX6jn{?^r!urWUi&WaQZgWoF zKVTcv@AVt5h$|aXF~*y?qr49H$~j0y9mvMukzg}8#hJ5V4hGusR;)c18YDiTGY)rTIf2^{!3e&dvD_2-I=#Y8k6YdTtp>-^1qUxt`;C4B3jd}mj21>a6$_{)0v>ON{D%jTnl!wN ztiCq}r=_Ft+?SgQv!zmb8Ug!h7u6mw)BsMCKB;wq-8=U-?&?yQsK|IZ<7%ESqJLG5 z#Cmx($bMqCM$j&pU`r$eQJ~$9pkT-+8fIrHSL@ob+k09fRSH@C>rx%G4n{X%*6#P( zkU^zp$WPX9KHvE>YBfnbcgC{*1p$twfFzOhR+LekCF=IZ30%% zg-QDUd{wjQLOGweQxbbq6tmHF9|p|0+-n_KImT{nZ75}n^OR)@l@F7D;-SD`eC(`c z2aa$O1ke5w->3i&N`N#GX@f>=>^^Hzg`3?oNjBq>*weH+q$sqc8?3?Z>49{nze5qa zhE`pW;#VK~8CZ3=`XaK8NFEutxOos;hw(G!xbB?gukS3nXmdg@kSb?>}LvAr%eejnXv-M0D)c^pR{`hfE zl}KtdinRUG*GF`%toO90B}9lJWl2f-Y+;i2^0XFxk{Ou_kdPNQtA{U3VG}uOtpF{d=paZDp8FK1+4F!>X zgi|J|0gVAG0i?Uv{dtZFCyzQW>qRU&P z=NRN`AJHmIj&&Vtzg}bvyU>WM2)gYKB)5!54o<-ch#)Tlr;Q>t0j8=R^p7U_`c?nV zW~bk&)VWajHMQL^VhP+iICDii3ymjy zNwkWgHDvUcu_OnM&ATTLsxp)%v`|hBpuz&NBT`87imGz$w0ZE)#zt^U7A33e-O7)q zFmTskP!jQj(0C-b{qcyGoM3oxxqZA@qWQ}0p3(1jTu|Qm;qZEE<72-#zb;REi4dJ` zF8)#`%1^z711)a?_FoE*+|7~+y2`I00xWOLMnUR-jSQOHV#^&K=JvlK)kU%Keui>+ z5j+T*XWcAYd*+OXHX`+b`nmIP?d_Cr9}*Li;vc`@hs!a4@S~;v@`c!h2U@-b_+x!k ze4&I%MT$k2*`c+q!mmItVcO7OS?TH?@1JdsbPJz1`Ui>O&frfUc=fBrD$Hqw28u!y zi$r?c8hRUtW0q{l(eGqk6IT^Y?G&3q#xp<%O9R+4u6HzczP-)lghUs8O%{Y*{EB;d?N2U~S+ zN+=#yFXqSTDh9ie`@I7yty(U(`48+GyXtI{TS!(D4yJI`{qIeIqOn9?y`vlmT-` z38EwQ%5w}>WYnZ+M(Z>D#`)j2r71;e8UEVw$}p53$VFfo#WGN~FhDjdUWn4Pi$Ii7 zX3C@y4+#2iNW&yv6r;Vaaqw?bZ#}G%xvWA-gj~N7e&ZI5>;J;8si*468Dl6r;7F7z zTGgvKVvGI^T7@TL3>5T%Ylh7sqpAmN!9dbT2!VlsPxDsriSosyIwA6$;aO>jBg6P} zEn5>QXWEr?XlMCa#nvcg)oV>t)F@yd=X9qf501R`u3*hGWd_*|G#fF^;kI(z~&?FHD~ zWxz02@63mN7xHpdy_8KlPJh-x=m4@A650B>) zoG-8a=47P6^S^#D$-nY~)x*VGK4DeUs7R0Mr*5;l=uv33eZ+( zufG8|CLm!%lJ@xUA3`}BX`Y$VkZ%Qo85-?g%>A6<;;`d&{=ZJQujgFHp=%TVe&M_c zWBmQ}!+YGC>biJMt#`Y5Rim+Z&91^4K5M_yC20L|(Kss)nx+mc7N_4eBFdr@|=og5vWV1h99>|MFy0A^+*v_&ap&(o7|MNlTqKl(&3l7`fCBud5c(glBv7mmj9j8@ zu=qhzs#+0O>siszkn;CK0g4`XG?E$Cd9ge26s2Tyf0Ffr9AYcrEqUcZ{N)OW+G9 z>vPT*zkc-$<@t1&vHQ2WnEl_`JdkbzkC4pS96lXf6`rP!q1Co=EnhB5BrmIOoM!GA zDgRmFn(dLd=Wh|4dWE~^V8lCykJEKx^$Fvla?E`mJCe_-uTMZP%kBf4ac?J_W`Ntc z4^>LXVE{-VAl(F_45}IO$M+8MiDia=B9H^uUsNIO(Q2DJt}6Y-RWEh)bEe~RhYhOu zeEZ#REns>lMCq5No*pGZ1(Oh``cSEujV_f8MZ9B2c!Pcw$>t_xe_O%pB2K_ z&-6<&!i*aRcd07CyjGaFDXVE_+sSdcCi5G=0$$PwqD|m!yd#a6G5^Br7Tgmx#GP#OWhH zBP+fuLXi9LXj5BJc^k^I3m%gc2Yl)mtts}qy3v#g17P+WuT?KlOd>ctVFHAhl1EuL4|N~A20Fjc^q6JP?B0Ya-0cMk4F{O70wG$Tnq$^NL)zud+^ zc==Uh2h-eEVLL_4nR&6Rh4Nw>z$q z8%@yW8}c}v!21%^p43XBi=L>fnzSXAR(0}hAVmj6i(!YM7yOVU^N7iAd|SJXmlR+C zJ&>Rh+|_Ug5`tnMzvEhG{>RBW@MwzMl3|@)2s8Aog37;S4H^Yso7ST+?dg7K3A`Z$C=~ChDe;Ad3C+s`X zR}dtRxxW%Dp1rtk=HTW2wb}=F%CSA`Zk2WEiYktlb~Iwgf_WejJ^Fvh#(1yiQ{5R# zFFVe@Um%s^`|Zbo62i7 zECXIq%nwbdDR(Z4Z#%r0L?|!bkXK&QAG1B15#zG5?QtJHVDo0cdZA#!A!w0e*qZ_AGQ{l-`U#6A#_!tiP`H$kZ6T)8zKMZOWzn=>|E z>l9G_u~%$zMIyXo_w$vb5N_r|1h(H4>?rfc>51LaUS7E$U#Dgx>c7SYoUVhQDcT4Y z&dtUYagS%@3OBQ4@{ay&YrqXbAR#5-`SGvvgK7HNY%lfV=!VlZbzLcI_icK{Kc=C{ zYb~LMJZZyWJkAhp)_k6Df;(M5H-zx*J)XZ%CTdeG%zxOh9PFfqi`c796)G=6Op1H4 z_=eUnr?7uE1MRZ|7P*1nfV)Y7X`%DJRZ@iXdDfFxUb*|N;SsdUbWz_M+mCPjmSZtV zroQV`25pvjZR8O4T0V^T1OvgydZ*rJJgjO-qCgrmkEtqw0^bMU@51KxiLFlPi3?CM zQKf-F#O5drdVPrKdn+d-Oix0I7tK0w1|`1PWIw$rzN|+H?U~cG(P!fdOYKZZb;Hod zgJbAggjC1sC&pwmMUUU1++6|{f6_t!#@jiCu0nvOVv{V%0TizfK&*q{eEGsxx9ozfMsIf{zFpd3Fw{{0fRLCG7Gszn!l8W9%G8n5OiK-l#8_WO~Umrin`Gy0*q3j zZ`PvSQD=`6s4ErinueeWZYp-O7pYux#bF1Ew+FnFF=;z)v49QYh2%g}vFkcK{Ap_i zM@oK^vr$lR+n@tV>kjc|d1oxkk8XBOVV>Cto0~KCP}Y~*S#9K_d1?V-0^vF<#UyX` zdmbJ@m7j7W4|?KE1s>u6K`C%{*}vtgZ4Lbj*K!M}o9d0(Bp*d6gBh`OxiQXZd^?H~ z4UOc2t|*4EOH*QYA^+*^KW-Zvkd|+ zX8*@Yk)YSC*B=r;eA6Gg|$UOcu5^p3{(13cM4K^KJ3K9gpu`V zDhVo$truQghZpqw9Bcq(MR<^}r}V%0>H~b6Fd5m*@glcn3S-VfPnZ>$!z?fdQkMh% z1Lb(Mx{R;ZAUH2DJeSM2$oK(oCbp8>FM7}Z>UOkJg<{HmXPFA#_!=kKzii2gA%C=M z^Ow!9plwI{u^F&y0x2nh(KJsNL^#=3dz3A##??Avk6$67U9Z{uU6XxwMhD3dVP54q zfK&8f!Zo5V-f5kF$fo+*L$k`uol@Yxtyy`1TM9Fy>Gn%^qpL% zI&0!_{|vM8I)m2HEHi7oDj&eo9p)U@UEX!0kJgO;Z30;l zd+aNKi?Qy@c4}Bhg#6sa2Rd@2xi|;mfFA*PLeQw|@b21Uv!iTq&11f)0Ly9weD#ke z4|pW2gK?pN+Yf$k$Q04kw7*Ny=B%Ts_qVE0!zfMVnh{QE5&8jq0A|5AX9`gwy4xcV zqCEB!R$8-jc6?nSv`?pt3p=qiHQpfkA{g#3XYeUa2kA0?y9 z9?Vp-I>z^J3J+c#ayOK}waPS!e4>6JjJ(FTty~m;AG@*YGm} zuAdR$=N~Q#u#^^Y6d9ZTQE_^QJP%9<_Rp>Ajx8rmM(5u?f@o%yYA zDbv?$)1L*1gD0NL(=f;xyK+Gr8+jI?xx~f6g#KU^m~i>xd1X13Faf&P2^id(XL1`1f5uUbf2MotGyFsv9}=RW0Kd)(Nazu@ z-1Ii`#mW+;80iH0f}~XvZ9*${5zq@HwJ~lf#<=4T(D4J4uSp8zIQqxKO0SOi zO?Jv3=83n6uE6~^(bR?-D z?LgUCCoDaLc+KmZzXgrcNF5)ox7&G1v|`IU-=9uQuP^BphhuVjin+x^-<}+<=Gk8? z8~cEL0E8MK<)JQQQE*n6WNI;C@qPa-P00Xz0sV+)XJK!VS6DmzWV`dEoRpYmA2Xp@ z##RD_Etlji;GcEyTIYHKaurv3CMY$8r|~@Yr7w%`@%rMAof=j9Q(%Ds;RhJE2^ic{ z_98*H)Lc|-*u>>-5bd!|!b(c0FWSMqE_VHUpS<;WdE3lP!x%ahhG}*xd>-jM#mS9d!o&>^I8hQ%`ARRD)7l>x@?FpIU-Hzn2jTqRHcsUh_ z!3F%W8PNXD(bSW9WVYoYo@Y5tN^a(=@>X+V9hYut*mwA(Ay$=&?X#y)UH-i&3v=_Q ze83cfsF9qiAr&Xsi}a5V@b8iHgRw%J#p=Hqkg(u$>zGG0ydH4dMbp_)gu}9MjAyfh z89nLRK$aJTCBkuwE#3>dcbDLt#JKPe4CKy0?Pmd>m_V`%wcel?<)tj{Q;;*FWV9h| z5hc4kWRWo079-EmH<&J{gn9@)+r5nmqGerH?hxJ|vgln&tCk|fc)!G1rh_Yz=c(Zf z^Q`1(OAme~VTX(&m$thAExQ5w$+0$?J+rF{jU6#dTVjIcIZ+T<5~x#fs_ZVCIe`pR zNNPKI+<=NWNr^ft80V5`GhOqV=;M`^k*86n!-!bqwWM&u3r%ZfNn^ED`f)xXLr7b| zaTt)%A`_nR$H~n-eH6r)^IwhmtiVYh64|Y0r9@3*DqE*?Uw>+P%u1J6>r211Q1dQ> zp$;C>g6XPv#~^suw1>Sr#YmF6+J-l8b=PDRyhAi78th+_O+YULgsxC(Hv9;*%=tl6 z^&;e}^*1#fh7)1}dt0^t2ME&-pI^{|l`&${q~u&IyEJ5Zp0`LSJ{s6*sm zCz!bjLr#TcxXT()#v+|?tg+IMSc2xjzn+1_l|b7Gml2%=l$7uO86Lmq)8Q^%=CHn| zGza}WqdxhH$PHowLXGuthw#+9F8QdSPG!T;c%{<2)5Bo&Pruxa?u! z&0;gI(W5a~?v2@k5jc1);qe-`7Uy*GxmVY(#<=u-FI3_x4622v(#sU=ewqq11I6SW zPzwNMX%isc+TLLM%hSHeqPniQhNF)H;a_O&=bv#2{&ktS+~CPLh&VE`e{pfxwhNdwtd)JbeXOvMzcK zd16tWRm__2VcXR_To%bIb7_;Ukz_u^!dmP1u=;Ey%!XF%o_Z8fT#3f|M5;jXvT}04PS6>_Ee8Rs(w;KH~O@b9L$Xt)Hh&bBdeZ zuPC}pG!wAVj2+LU=z44+U~E>f9;QkJp_25|`0s7-KBl8wwDP!nFm9uV8TY89V?Kwh z`855l0FOeh{b+oae~Is)-VqFGUhJQq+o8OPw>q;eygh8{A8q-EkthRV@jo_7Fqf7v z7~^szcg6;GC|jSG(D{!YF++rO2YQ0OHq77`aK20!2#^sv^i<5{$wfi4VKdZM7md_R zZmn-^c#fRy;hN@7S@<=`rK!E4*RuNCFr)7)K-%a9;2Q0py%@aXUUC03}r%VsYTBxD=V0(*ShkZ@C9gWq;)-TtW zici{f#R1$U-{}F?^tOY1op~~nhEs}CC}VCzB8-KHY)OCu1!8*GFKYoybD9Rfb>eo}~{Ya3z?Z>cSGgN!f(HIpzCqMy6e;~djaOgu#l0k_xvFxJl(m;&PDLjb= z0v;oi^U)zi!vU`e&k={En~b4bMIb@Td!rXyBf-A?!Ij#~d?g(+<+CEUto#O$B>*i8CtA22P70NP9X+%ByjBq1IQnI396#N>K#@AN22XM~isT7zYd zJ`3X#pd?Ln;(lBAsYX{Hie?sDCB^u-#qVn{W*vqkAed*3e0L(aOMj1?ds-|H&SAMv zepcQGy1fk`{vZ9-*@HQsiub!C%#S++nMSsVGRw znS_|}`Q)qER2pvJq2H3`MKO;moiHvBZO;*Ws}))}Y+$vPIsPtsCoM$Z#khFkzU6tb zV?RCyd51{fPAoWP9SQ6MZ9f9svL+V$?v;GdH}ZbAn)?mUrFL|2X_T=l#ebz?^wI3i zI>L-UX&uK+8$r3lvx@Bsp3lQ2S>Zk&4zx9FaVlI;d|c{%ZC9To{sq!*1>17y@r@M| zs2d0-34%6GOO=OB!2Jrp(;-iV@`HK`qodtmvrb{4n)$Gel?%{&&aJN+j=N3c4_ot( zv-ok{7dcLpYzWuOPkv>iWp1K58(e{|?WOliM&yhJ$B|gW!3<~{A7H!b+&EhH<*6I& z^T%h%)XHjjFmlvDv&Kd#Q7*g-q%Y|21`d$d1u_4PuE@v&vd~UH9r2K`qOKRCp9&I~ zc8a<5JnUv}D08L$4Wc8+3<>!CT8eea~!VWnb6jf z`psq5{#=v+h9QtD5(GmNyv8))5g?s+p27i7?;B>jp9~=9nup8IuM^A)xRufWq_ax<4t@uXz>UPLm*Tn zsAO*_Pm%R2Zlvo7iA5}Q(GO;rMCqmmoY#sV=w_pC({a(`9E7_Yola)xcCKSxHGA1% z;Q;Y%9J3fLSRsyXTIT@0Ozok04zZ92Oc+a#V#GP4-UMje8eklZh!xq~(X)r?!Y}#H z@BO0QxX5pT7#Ako?X>9)36)9Z_o(MvRwUNjjw$nC<>(2*F;>P(C0Ep67$jcZ1ZdNZ z#L|65%4UM~0cGFs>+z!+X2K#&fFFQBC`g2`U*29GRRRkHd=3G4oG}%KPOt+abv`RNqg$f_UyU7VU=80kXlKzTom%mS`pi1hXmnL}^ z5W`nOqEpO%o14tX+{uz2NHJ)fWX42<^d~UU2wk@ui*Cq~pPQM%ryd~Xco+F>TNOTS zv1?8 z_0FtDIDwCyE4IsgZ+54x)W(s17sSOfrRmpO8k8bqMqdafaGQJJ8l)CD95LxC4t%BH*1QC&X0vj;^5s}y(tdRT6amb#uoNSPx=T| z{7vpb?^Jg2nPPH+oWOfURfS|ajr*R<%&xtosjdNNseufVK$`j~$NN7R8RY!|y|q62 zS|8KMWMf`G-tS;B4t`+Ef)v?Fkh@1=9IHGy8AVznRLNqfRi(*p$9Z+}{0WMJJ&|Q* zV+j5SZOl*4h604hHO9GqUa^G2}ORuV@(L5p@8MH~0mu(fI)ySM7o@-1Lj z5V=@oEPL()xv>_JAa}2Qi zH{EuMNCBPx3Q!*9KQdJ3K5@||r(uw0gw123evtQY!}&9Z_!(h}1KKJPJD%pxkHM{L z3b*@Z&C?DZyv@5G#p#^2QL8=_B_(L!iJetosnN1u(WOq$%Vep=ymQ5XyaED1LPWF| z!RpL~%3e;2g2&#R=xY*GNeyf7EizN6nX_DPdH0#`$g*^}5KWsE5sv%NNCaM$9h|kC z$Kw%jg~2G5LgF|0RbY}>)hHPa4Y@}#QE7Q5(8mG7!HEIFqdkfbmv7aUzud>=c#&h; z=Oj8U4nSgE-D5e-iwTcK4Ryms67-L=gc)qgoSV4nd%h$8xY!8P5WhwmiDfL*WF{f;IJiQjQ1?gbA1W>p>K)6f)B;$c> zA~e}g+W1Ao;Rd&(G)L=azLO^AvEnlj72cRLU;P-rbSHlJs_BwvMeynuM?O<2vMpl= zxrww76R8S1`U&c_ulj3iUBX0*DMZYg&2a$D4uD*-2UIf6gUo+fqx+#P%vXqA>ENXG zbb?G29Y~)BJskwj2{XYOyh_2^d2=1gAmem=fxl$EA3|`LWT6s>T(OWWdP{Nsb*vyQ z3(311p_>w#&8Zgz+^#O7a$nyY6#t^7voOF4DSa{|vhOgEX zalGqoC{}P5+6{zJ6%OM>h|v5}w2$MtomDa{npw~56}=goqUkqoqqmdwQez)KEGr&;Y4Z&V$uZ_^grMmCc} zCbi|AYv0eu!Cn$NGo+76PTjmNK_6zWEct`?kU-QsQ>)YV`GB<@NZbe^xoh@=IDcs9 zZQ*By)^LO^SZ1DqatRdEf!?;duf5B6@8uK`uy?7_ls%zo|CJ&f^=Qq{fe5c~((@CZ zYK~J-Kv=BWJ7p>KX6Tz6=Tz@8jIPvBQKm(1cVmrb!H!^9h?|*jCY)@QhiiE>cWr>Z z>rn=7KdpaVt*bKJ=sDQ^e^c;*cn-hE+Ly~5o>`k8-4hrDyQr#Ci)#t97y)k*fu!P^rlkkNNiu}=f+%XsTxf)R7I<9e?AUd^NNKS@B}}D3 z1|l7Py!Rs<&`|j7b$vFy*vtLEw3(hrK6RJWqg5!p8k$f!&TX>fnfe2#UwnoZQ4ZLXtZ5!{~Q%w5#I+a?h3C!}0T z^N1xQS~ny8 zkH90toL;LMPqCbjLI_aa#LQ3>Z7&b)TP6jNM|N+ENu<=fkviD_uw98q*S8H`Lrnvp|jk@kgs7%<>B|4MfO& zDNFeT^R(H+FU~c^wg72E{hK>M1d;=QbRgj)(5`*$!s0jHQ=3Id!1>1^c4B&iTsNQm zkNtP=$?0qtiw|p*lP}V zEHTGUHLHe$MR^ZdTWx~OI|>4hk>$W+Ie6!q%SS8sGbC;RuVT;$`?b!S?t*K<_W^q> z5YQ1qws`O4Gd((J4jVT2MBch@P{kAr!QdiQHK3}03e8tvZu9{q z)LdGQrbxUi(cs+y&(nuk);vRmLTN&(0oQk0Or=3I^gkq>1AAWG5{6?tX&T!$8r!yQ z+jbh;w%OQeY};<^G);2e_d9>!xn|E=Giw(1-1evu! z_+@s;A)$K46Q8wS3L^1b(}^aXOTHo#tg&GB^w}WV$CnHWUuqQ)wSy?0Mg1a_E0nxx zvT7U^5yeWI5ZIk%!T3FkF3lact4~X4}X2yI8HjLG+H*H$1F*=>N(B*vk zYc0aO9z>SYJ%qbRQtDKz5O&*a)mKYrA|+1f-*e?c>#&w+W!GRa$ErOoPGq-BQ+D16 zk|$8q#`hXE^?1NNc6sw7Ge7xLwc8g}vRl#`;m5Y0bu#)}N9=Uu%a3@dqLfo&GiI5r z2L$8UGM9f%8X8+Oj1uwMd(zfF2$pL20R?8xf9#HE8h-hv>0hHry*({Q730{-AhBm9 zV#W-xnSb%f7fLqby~Ii4BYSzNAuUO-u(8*)GDP4KVp{&y$m}4_Ff2V$tMJcM`ibdS zx<*}Mtl2M}1m<13ZJb=dI)Ba|N=2_WpUP|mxfuxr6m!azzK&Z-yD)?4;@R%h#xlXxgK{h?>mPz1)V0vZG65yO`wyek5LnU(n;(?fM_Hx^b? z#j(i({#Of%B+?rTxl)us$stkNQJbjTVbY88qwS!{t8z(}df4=bpMWgXFYnywz5b9{ zMr(CcJO4071Q|m4%55xdFHEiuQ+xP81{uKVIFRQdlb?!!go&>a z7Dw^g4{13TrD}KIZ@DfD%BRWAoJuEIoc&W@%hE%e>DZh{GnNuHnA!DTO{$NL?txPA z8_(o0mXQ7zIN2qCjgL>B0*QotD!c-qjQ9`c5m8jZZ_w?6(hq5M(aV`${%S$A0cz_c zT(!V1UMPlXO_HYdYCw3F-KGVvx|5zMgbA*(>Rf)+2;QeDzdiD}13;?fd!uvV+D7fg zF7qQv5vX$kr7-|6&gBASze@`=2Ff0Y7Dda~e^8fM2{WkO3{W0L{PM2QHBDsE=9Xay z9j0brfJ>AYnnW?Cyby2Nf?$8AE%wvbsWYBwpuP?M;;9&dHH&c_+i(@Q1NZ~T=Ah6# zKqA85)Bv3_WQS{PrxLku1=r!-%_91zp?E7us!bI&ud4XzXRqRSl2=arinH`=>!o~p z+_~lYWgK&yCW#!e?^>KcL%O;n5NK=B|{x}p-r;< z;rG;Gm7k6s(`1q(rOL041=45x_Jk*~YsSx%c{J^UE{L}L!Z3uT65W|{NQ9c+5TLmA z04P-Ce^`!?I0%!*wtWSg!#jmkYb|6=2~GfAY;J_?Ow4mtL?~6fXWT8a%)jY5^H8p) zoyY`w&+En2I$0_@txYDb%Y*LiEjEzf+3QP3tYhB3YNIvLfy0em*JZ3+Y|LZyzVJbK zHfw-HUIVoJkbC&r_FrKH1COFXjAUGP3f}g=ZVHaQYT&U8q$l7r!N6rM1ASCuW98X( z<#VaE1W!E7_K)$nY&XI zWHJ_%us9JPBX5_SxdPUTTh41n?pmJ6O#?~a&d?UKaICS;?^m~Vg#-ev6rpn8*ztsk zq5a~D0hv222*~aTgw!bFtdC3`SwxY)j^o-+?FdwjVTfZ;Gu9KB(QVOBkV*VXP=6Dw zfcRz7YUOguPW_P36HN>n;Lt}My1Y9M!aar`WbNS~P|h^qRNU(D7t|~44cYF0-`E29Mz&VQIu5J(h_(gt4ZH(27L<*Cf}o_$J~SC=2VDS6Ym z(R_qI3{2XoaqND$(UO5RirPy#x=qFyICZuFBY;p&+G}&s$fWZMx5sWO_tNb5pzwVi z4~Aw+#v(V}&?7wdZ{r8$8RB3j?u+O9I@E5Hu7P*{Kkn1T%t2W`kij0c8VIif3~-z-z9 zQuUPG{F_xI@z!Mz=r;S@7!n!=^jFgJgvwhX)(;m#mt z^2SI3hh3z*w(3-icMw1abO70e4lq0q=8-lm&eQbX(9>z&l&R6h9fF?P1#TJ+g8s8K zl;*V=8~O~4s0@;yp!bE}nr5B|ivMi<84f2H`sEPOGi8=FnR{Zmry{S+?L0-(4*RQv zrM+VmE$5*5i0-wH`Hwth5-f#j!s)szSA&T^YiUXziFKBRjGmoZyMZ|#d|AmP;DRyd zKa5ATCc$8z<;qkz0ufopAQp79#P33kWc`z-yZyr|vNShF1nA&)h_2*99`#fi6Zt4n z^ljMC`gK}sl^5lG+$|sLKZZGSNm(tF*drbBHqD&#KP1u$*JbpcJLd(c(i2`#%*1e- z+zt4lBoyb!|7z9_;hz&5=@neu_8movmMCL&IUck+tsN_h zNLzx7JX7$O9kg%B$w;&g<%n=lyv-v-DLp}?7twZ#%wlka0`IhdERYZn%GGy4_7N=e z{vuZaX}6Ip&0%@DX@$RL;A@Rbx%o#K%yfx=h+5%7$B4-|n3|1nn7E_nivEh@C)UDD z@t`WuD9^5l3EStQvdE8*zDEgiFVEcmC+-UnUph9@E!J3KJ_8*cAcHJuDBBi>00H-N zVx23ty8~m_%Na6n5V*Hj)#@v8*Ji7blr*?j2JKXrz(NmxFUTG7kCv>2+B1c=LWy`Y zS%-Oj+nW7t0}MbQ5G3${=$n%37_sD6&{!u(`#YL*gKclGn};b|CUhY7G;Q|>xig=l zN}`AB6(tpnSL{#)T)GA}MHJuPI#()X3GrBohZrUu&z8+!W?kf|FDIp%C;v&80Omb; zj?jgs_1jxTXn-=Gf?)tphAPs(Y$Hrb->{e4333g2rAJd5=kn_77X%&j0k-gEotL5* z*hgd0Al2EQ>F|_H`@Nm3h4~bazY0aQ&FZ}g>Hd>$2U=}9nNfGb-DXq}-{0XaBq~{C z%U`HA$$kQNZPeT>KdyNDjgIsk{Askv+dSyyDNj7=GHp~i^t;YuTzSTUVTjG|o(AW! zzK8j*Zz#v^aTh1WfV2VN^GpHU-9KO@phR`81jFMv_(M%utza5jI8~u!gN!4F+*MEo zYT%P5&h`8`Vt@Dxy@kvrNL?i!XP+q-lyYL7s#{^~x*&6t~#Z$BhR-o$LVqEp8VAhz66-14Y@8XKKKv3o{k7NgWi$h>(4di`< zNG5mlZ{W&nL192ZAtL;<7+yqgQYR1k% zCF3jw%?8IVmW>cJ?{eNOMiW;qodR%shd=byQ^CEIjf2Bs`N}=psmBJ($woGWq0>`! z&`)uxY~TSc`$^)zH}pR%O*EwdwSlmYaHdkB%8F!n&J9`f{+c2Km&(^4umuK}%=NxB z*YqrZDR*2&Bol)T_S`2HuJ54*WwXf)zAsL7V*HXHD1M7o5CyHevbH3%!KO)oxAayb z770E!{cnJPu#XV-hrK7*nApqGoAxN90&OLW38*dVb51LYLP5gW6jn2RHLcfeyE2Aq&s2-t^$Gwhz1F<<&Z;4$e?)R zcua@h;gU+RJ*<3|WOz_1auH1tauyU{Jq$fQUc;Z{NglHk@kUzvhkF=vtwwv!*WYAd zXMdE*fllJtHV3s6Ky$ z8din1@$I$|i%2jL4d~0F$K;mxs5~%hMdTK_XZ~)dn1s2=ipA%fAypV+>k6%YQw1O3 zP^m@Pc}C9XSU1)m23oEO7@)|B9*Jlk5~d*c>Y|FRbt!LV0nCX{<~n=0!zlCLSDdTy za3q-;=-AKy9Q7rBW{MJ@9ihwMP<6o5kr9G!?mNa5R0aLVTX-3Pp6O^-BO7k-6~AmdT{ zJ9zAeG6>I?{VV3ocIx4Xah>I1*(x!^yxOBGKc=)z?k4>RE&SV1^sP2{Xi2zM_<9d2 z0dPwIkgfpElJ?6{q2I15+)-{deTNjI(Zl^jz_7FuAeK zwhn9A>6i2aq*vmK{JlQ?xT*SBQ=XR~rUhEufkz6aNmnGY{Fqw8{)5c)aa>n=s#_*+ zK367RepS^79f-)1$$ii1Wcjv9Zhi$eu;P%ToJmMLU}`n2Rej;B&-I+V6$ zOnU;7`jN49s+kj(P2bFSD+z%(MQO=jr&o3z5Fls z3ukQSS#uWr^d5(uSUt77POeKHqf7rt93R{Pn%m^1AI6VDB=%5TL=@D&iTyvbUjf?Q z)(i=BJGUjtCh|_*zwgn{(*LVI>Wd$x_l5LKS}2FkDtGRuIZ4- zl-D;K_zMxZ9LDJDB9^NT)&D5=|4eqvlefA*tpZ#=Wd6s|@FmQwv>GU*VGk7ml~6|z z2!YM(9q%&qHL+eMp!kBXV4}9p>H+Zx(D;Ed=c{oCvv9cO8HERdeOnMO$QQfKs&Nok zuRvu-Xo+-uYQgDXLORY?;N;&LF2>e$AaiK@xo%yA5eV+^V9Bp?19+dEZh(Z{_Z)EQ z8Rz8_>Ksvvtc-0}=@zqt>)8i2`8`xJKvpKD3b6SGVl+@};LSaBY#u3^Ohn&4U$Hs1 zNUY!oFJH32{>&WJI|QKBBAK61qZol$|Mnb z$w(NNz;NzetmJ-)tO*@GY39>LXBY0xsmcgt^%r&Hl*@CT>}N-cvJQu(JwkD&JcdPi z*D2$Tq2y&n7JOGbI`swz-N)hn1xM4cpLe+$PM_hb>~63kX^**F)6r@~mITM2jY{^e z3Bq@1l$1y_ZMkv~BEcUX5QVuJQSQvizW!r`jy&g^XaF+QY|F;yL7jmod zI1aZ>*%8Q#-GntpMYAL4E4*bb1B$}x3AnTKD5$N4+B)zx0tSJFBN72_KE$w2V1IoW zT|hzzatQA-UC0Z0qJ__*I2dNqkZ&Sgus6vXqV*yehh84;&cZQK3r{bFL)1!oPTK_G zz<6UKHPXj+)8OGRx&GedvB}ysFfleKy>*o@#2!bH+f{oFDB8pSgKC7VNfd#y=8V(8t*L?ZawYcb2L@G!B1ZQ z>+mQfAv%krHsmR0R33Za$s>@y5wg0+lbH&~lbACUu*K_EYb_Vkb@?+aM|~maWCY42 zZqc%y-bb>j|x(gE{zzpVN0=rp&OCNIrr3$yzC=0N(X@Bl` zvJuPH)kpo_o2^UKkDZ5{1gexM!3P3p>}@tXn_CVdkzB%QnXs zDGs(uCWmKJYa2q>C4So<)VN;h+*co^;BkW5NB%(rJ|zJnIKr8Gi1V>)wzr(bX&Y&y zRZWjEa6q5QbuRoEv*WawC9eJ2ab=WU?3eB;JiM>8&Wj>kUaZ27WQKE0Wnz0Q?oJo| zj`XLQDU{oiN|8x%dO&Oo+q1@iR|!B0M~I8;p$$w1G~;aNw}>o+JLoIwC@>FXNpv4rnN65>5T3T>>*f`oM#^d+5o3mo);u41vEjxcSih&?g*qJvMxhcGnn8(*m#NN)!JIG zgLEsrGVNZGd3p;cDm3wv2bm~u5x#>vR2 zT)#zY$x2RV)inxsd$d}qIhbbz`VERvf6m2B;lF?| zviYgcez*bt#A>~>U3V&IE=ILWj*0Rs60I}wXVhlcd)BFv4CZJN)rPb(wP;D>_0Jh4 z!&lVF58bow05ik>^IwTv%sJ;uaY}z!BUSr4^-^QIAF2M#{?%}^4uw=4+SXYf;{+xV zAT1;m6k&SBj{||X84gd#dGl*jHp@c7%qCZwcMGnpM^3P_Ygtmux9X`t6;uAMv=1VK z3g=<%C6@Yp;G5IcDn{K8gB>mQ#aLv93RZQd@7|W^m|I{)fI-gw4;T_E@K8}Nf>P7n zWa&=FNL;`#wfZ%wg4~&VoP+13xipMOi~NyUc{@mg-2QWpj+OAMn`BRF(q7E6xYd@4 zOc)apM#|s3Z&MlT)8TQBtshOFFlj@)A}E?mA2QRd0m6POF@rU;f*A9Q+DnBjB~rP) zaJ@EoAAU@Erli4o$LbQgM3j&tN2En?Xb>e$HD%d#y7G5XDxi`9GDp<9sSq=iGIo=m zHVMkTxW*blE7><78_OTCvjt0w*~*v2Dv#Jy4FO%dJzMx=$1I>RTCE~2U`YoOM&5rX(!v5ij5+$$V2kKvZvs~(cB_!$Y%wINaT|p6Ym0rT&emX^+#Kqr%1_!ym##!} zL4=Rew4zX-HQ$ATdz!N|w`x*E4l0pb;UuQk6&mq@eb|8j5o*<`WzL2sDxIwRe$Vvc zo7}(^M}#t>I=@c^E(jxwpJm9@6dEE?Kg7_a$44L?WLWkxkZq8@G1gc_`o{Dr9Lkz| z?#c@&kS8&2Js;@W=GA7(03EUhP);`~|51pW+xZ0Qqq|tw>N-;))&zkVl4n5sw?ceP zw|oWtb|RnXoATLT*ZvgmXo_bh=pHL=n)$Vq8&gs^?OGbTZ1oejYudN{g9pJ^LF2WW zGNANj;2MGHqq)7Csgy?}g{*grWYM54vX5^Q+CpEKrt@d6&sj;>yAp0tj@4ZvlCezhxSOKFK)ENJT_g5B3v*>qu>+2@umj8c1+$C@Mp#gutx81X>W>iJ*R$2pnY$ z;?=@Iy9Qi|5v7mKw_yQyiMYR)^B5W5NIpJcYfji!`Hrj&-4zE0xnn6iLm`v^Pymlz?QJ z{U699TE9}GiNE~YfW^sd9iOcpOX2DK9ZkvEzXIh9#0ZyvB%P{lAleKV(^obXAp&e4 z_!-HxYOF(9Eb|0n{rL0dADBdl{zrRN)NvcxOGZ=rfTy{{7uiY<*wGGo!Bv&!B4|S= zS=1i3Hg>sX9%pzCCG9j+2h5!7C-pyGZMsPKzyDj-UTo^-!ae4Pmx%0tB`DTnBkTu$ zxgsD{HpVlo`6ITZ@&wy+uT6S^h$^U#Obj>F&7n+;_80mUBPMR;X!Sb@rLl0IW6spS zHsmDPNY41ue+H3OYVYWW;GJy$EjYyCO{C_Sj(-*1J6Qa80GMe&7)Zz_79BX$tw|r% zJg3@&!d2JgtbHnRAnHgDjH3}DwcjUQbTZh+!Z&bAPf$-mT!>1&lBp}z;|F$!$dMEo zYU1kKv%UED?Y!dj1>^(|@s5joc3?FGM1h2?SI{PyuppCHo{M@m8| ze!%&~@s-HxBc-C&vijpAQNIz&v~Z(%slm%}$}Pa!Ysx>rD(#6=5@WyaFYl3W-!4{x z9Gz|jo{AQCE+EB+|Azw!k$1d7c{pGg1MP{wG&>s$Azxlgjch1ba9#@cSZX_DYh*;v zflk|ue9KaZ`=u>C7j`Hh?jK~})!~KEX+;B0V&2oP<9Pmv1{oIg$f6G(X^iB@9e3du zb9mFtk@l94M0dN5Oo*9Z+)B734Q7aiOsfUTgm{##%$+9MCO33=!jbff$I?Jsr{qs1AwC@JRH3c3u-mmW;B*)bp=ABTKp zy6jkx;ZDbRbz9yyq7_>?P@rZNs~{842@R)dpTNT*Wf)2u9+Mdyf0EWB+Xl$zG9vUT z1*rU%COIY0zOLMED4y5Q%wYmYs^hh)c<=U!q|~z^B}v6Gle1y^&rL0Wf;V!PzG$k` zg+7>95<=rbX!EW^vNXL%Zspb5exf8?7V5_q^7c0@Au&694i>mjXk+S)f0*k@%`~#T zOVqUMAH<wtM}~lnKi4#ZLu;=CWg_;1?CFll3vORv(A~*FkDgan)WLEaJZpY z@rt~Ve?F<;1-)Busbd9i*H3}7VGLN*k$037FCj~y{$f|!PHXVKYPCLGlez1TvNI_ zqc42P40v`3q>qGLa0euc*Qp{H(JfkN;M|40^kA)gyWjp(pd@Y6R7g(l#~24g(;-4) z(vdHu!7WT&i%nVJuiNPG^)K#sqzZF`EfJ?P97Yx-KNPCPHN`DzLbxLE+!%--32|$2 z_1%p+5cckf&*)8?&4#lS&#DaoYb;`>%m3TSa!o!)(7f;ZTopk)>%H?z?DyxPOrok% zF7i*251%TWWT9jfc%kYs!n^Ms-=jZ=d&hzP_wk= zI56o*3Yn#v!K$KhNwmHah>kg=y zpVLn_*WN=5?lNxKZEZa@Pum{+#JH6#4&@bg#O=qG%>ren_?JL3zsK`HIKJgrW0LgdL8{fs_FOgP47|x@;6z1Tg6Wn z5vL)~8t=Z?syiO`VmqzC)3iJ{Ig;^S+mt8DSQjf4$!d`%d%w+b_KGb$5NV~h5cb8YQV6tju&eiA*M@6NwmX)+&c zDwJ3>@E#Mgk@m_^0oDO97OH@*5yhe4c8vA;p0qPG;Cbftm0Y^Ygu;fJA!Wn2J}%0G ztmH%bGcQ}_ zc3L3BQGefRkH*YSW@Tt}h-ni$o`hJ>MPIAl9zBkCjWVJ@n*5yqhCg#mK52aWYpgRS zUis%FqL8rp`nlfY8ddwG7lkKKktqW>Q^~5f$+mh+o()6$zy58I;Fm8e9mcU5= zJ33hKf_>3RX+svWGxWQdcsHHedcegivvP&|`7ALw<={dIxdPS+j-2f5!mel$x1B*@ zJ==JaNPyD_?7`>Tjb)oS^}3lq-mjWN~B$aEA)ywghrzR;eUPDLO&jX&a;}65R!} z3onz{@dlb6<8z~S{bHp$#I?Dbt=Wy$38~36929mtovxD7%nEj6+l>PAoDwAuP!&k} zYGgWqX|>Zy>DQx=p;!fYHS0feOEfjPNN%8c5;AT`4-3Ko-ma*RAnR?l%@yLyce!s7( zIumdAIO2#?SPsV_Bf1~D3h|Wn*r|ZyeW?ji71&b0(L(XR`b0$5lSi3aI2@n_e9D_d z57|CB za#gv$sFYR^5ufMS`*B5-4x{f=oMfn}H+~#ZP8rgJ1{+rVPfKgb!0E6Dc*LZ!jkU1p zY@~-mE$%>M8Xs5u3%ntKz>8%K*4cbYTl9f-VvNsby-jBo|99{M$ilaGW^>Ctu^+75 zbYZv`U`w`xkVSzrT?%oFLU+`@!+n4J7|#H!4-n@f<3d*znK8<3Uba6`pk8aXjA%*~ zUL=!WSEyW|iPRRCkEGhvwj}D8tlfjPY4Y*rtjF^?5N6A6C^U{|AOT}uM=e@MpXE>_ zgP8C#Szi$F{O$f_1YkB0=R*I7fTEa~`^Y-fJ&S!@eK@K}?X0}tsC@-KVO5x8tZW+Z zS(qa3JAN+}NAzV^CAkiWF2ni*y&Z|qD5u>U*Iea^*9wc^cjBNJ+rP46)qc0-oZ3KX zJb>9Y>?mc*_beW>ji~N&Ywl{v`XwbkMbYB(KBCye+qGLDgX%Yn+Z>4YtjA#xhQ|cKE5zS*q?L(XG{8#b=PF9<~Xn~KffW#G=bL|_ZB5z3ne$2AP zno_)2TX0ylhIpgxn`{0(aqi}SD4@AY{_9J<#&so~C#c!ml3XuY@$K^)r*uE^4^RF6 z1~5)0?nj>G$9VMLueBW z+_Q=7KRHVVZL#%3s~&QsLt&dCmPn1ahJ5rXa`k}EVFZC&56LSR@BFEp$+k@dU4CYn zuF(=^aGC3`vHQS*f;kB?YwDpKE~vl8(!VI7AbE-2rfv>t(Q}QItFtiJ>Tf_ufhu}i6IVKbH5Z}CKd+JOM=$ciJ$d$n7NwCqH|MV+byB(30)!nq89AVL$lI#r_q5)alL}O(-fKUGr<^TyWQP^_9xpcq zOp$-5AGDq+bgIBk!3f9~nBRR?O$@2m$IN@g=?j%*mUd-WPB@swtT8~~V*_3C3J7-I z$O~G(5U6pw+5FnYJFpkeLe+|7|69wtd|7*j>j9#@2mwmMU*jHsQ(X|&-^vv-x@TQ8+UkDg2l%$ z)$CX>^fNvBfY2_0cmDn%Ye}$x-KgY6u`2k7qy)jzDUUahAC`O@8d- zNjR4SHaNQ~h{6lUBQQQ^0eVkUruh@qM*L)B3RQ=eD>pJ~P zZ(|0htRLrKG5ki5vZ0G=_bv;oo_AAmBLD|u6$LIla0qTStc|=$hn&y?sICjJ-in)& zrFl@y<~Qm;-zbsD$$qHSY2y@mmkraRD)8&WiZfpw$9oSqi1cBVyJFi3JsPwUHLFuS zfo~_tL9Sk|Fcv(~HC$+qrCiX3>U9`cZCg|zsn31GbkVod5rEeEO573Xf6bJ}2qGc4>t+RI``A1?}x z@}o}qS6b~}^s{v%#fSb(8XSX4y89i8Mwpn=zO)eu<{#B{7J#+68HpnqZE0(#g5B5Z zi^f4Yp`p$j0mU-_;*;yUS@4j$&$Wm5c{TEO_L+BT~Oog)u**;k``dPHP9QMDU zu3`^GWWF!udf?l83^QtRj?+{nVJog?Gg3tmjK?!NR3)n=H$XA}WLkxg!uK_p) zWfaeAr27f(C@DBv2O58>=EfuJc*v8@v=6UCt2XJkIe6kWa*C=9#G_jjs&uo4vi+?a z`o!*=3||fwJ}!*|n5=tDar`W(*;l;3)t3UwN(F!hss~i>2bjKB=#`&~ROHz5EV1x>o)!peoHm> zbGqux@;jeQD7p}JR0Rq&2Rll_CeSfU0NcToh9oxp4#ImoW#H%ehWcqYtB}T9%XlTN zjZQU3gDuljRXA`MP>N#BOZ1Qc@9V1)^VHQ4gs@L`ZZ9Cj}X zAZ_lAXV7(k(R2n7#}A#!`@&e$!|(BdorH=X06$io=eC;s(0 z;}tyW=F>tbOwh{bcuQ8s0*0k~_f=f;lp|`>uG&EBAmWdLaH(T}y2;5}a4ImM1I#u5 z0@rj_l$}&!Gbxq1wImBqmtG*1XoNvc8fQm;Mwq;k%oWYDp?g@e6V3#)`yos)u(teK zK(sJUQ#%nK@C*q;x!$gLJN+@HV6x-MHJN_7>@uKiJV**WVf>G6a^x4CB@TUGh#n~D zJie;Ag#BLRTbpISJ%L%5y(p&U_Sd8m!E6O-?6DIsB*l5R8hZ5Eb zmjr68r_?S5*6bz0@W~7VJKL@SbUF}jLi~9@V3A}9mLQ8NKN;3{d5V%4zCLKf+9(uP zjBK9`55X5>qS-6PPBWp8N#CFB`gUj#^K^6G7ki{5ue{F8U?ylfu^!U^PHh?1f1C*` z>wtzEO{NPJ=L%edTr??aJ>OWBSJ$DHNrUDtHeK0&aSi#!QqTx-^DVywh2;!{GI@2& zPeIB}f>d0;c4jGy9p2>z`TLRw&c5Gx+{bvYq7QqeTR#RY;&$WC0@@ zg|b}Wtv3D8tzEgh=KVTA2~Xm%@}t7Y(h<)sLyWpGV0pp*xLKsUNN0P!Me5m*Zk-`L zTi-fuO`6v>Oj%7PqI~Spr*%Q0HDAoOA1Y4sEJ_nIH2zQA6<|0#cCke7HcG5H5B5A180KzBV!fBX@f?Q?HJRaE z!s!g38=uLCu}wHeyjx6F5?E4rYf&$llVg!pYF35dCBpKMS#k?A4(#ZD?sh1#K*pN~q#M%U8U8J1AwFbF~ zA`m1I=&W!rg*EN!7^-d5=^ZVFpm)FTiPC_d#G=BT9^#8rn7Zzv6H9YpM z=>2s1-rtuOK}jTlD8XVi|Gh!lA04IX?)YhdM!AX;4v4%5qD~s*;^ulzTkDfr3zly2!+^EyfRZsNx&|@}cad%5qgf`#Ls5R&Ha!o$<7Zgj*OU)?8Ys6h zE6NeWpy_bV7Qy}sWUcGAH$R^k{!e`v;C0Ba?jmc^vQu%zyJh8fo_=A+%!^C)%yCtP zI@Lw36%=F!j~&B!{oq6rPMB_Ubhu-~ZqeciHt++)I&b)ByT4@f&Sv(8Tz9VQGtU~q z$OrPe7d&fQfb;_7oitc+u=7DywK8L_du+}VT=DL1?->h(2JS&{Txv#v>o2?AmimqY2Tcq- zTLDr}8sxs^FcEIbe34`>hAD0yA%`?4s*yNBE;shh4Y;a9kH)T;+Hs*yi9>J-Xb^NT zd%R|=L4H7s#0QuP(?AVWYvak*z-@Xiw<>GW9M;fDavT@OOF{^I&0Vv z6=3x9G^v8Ngff&qzSn(1AFt zbCYR>(t)Pe-3(sCy(h|QDGw-)0f@Um{|I~>FMRK(F0Wv#;6LOT*{px`a1B(GAVJ+D zemm?_z@^=Re>b|Av3W`?$GMORg3T|Zef8BJ8*7%JYG8IFYI61IEwkfx1v$U`y4kMx zl{LrM0fYuJ6+ql-G9{Hf3<*YI%1|;v9!802Q}P#XcjC=v6oieT+(>FAXTnct|L-nI z*dD{!ep@2>N0LTN7EvA4){iwBT;nwNC@;SAkbaBtG7k zSbyEOUK70pb0%(X!}vyRU8A-d?LTnqmXV(bqfoTJ=u56F{&S4I)h(%;0W#|M)!=n| z&xh5f;uswKvu(pWXI~V!w7`u29ic@CiPxF7IYpz1LV@~sV8sJun$&}2W%zc?UkGHc zm(6%xLkUNKWIFpEHE#={^SdjO&9Rh=?z-DmzPw}6hZGsHQ5(0>u51jhuMa1X(_-E9 z{gH`lPy(X~2*8}6^vct1OX}rlBL+0$0FG=6AeJ0lzle)G^QBu%Suvh+#(R8`I~~i5 zhT6UclccZE;YhAcSrRhy+bIHUV*0KEiYQjyhJW6LoI{tE9OKvwVyjcdbDma8*5WcK zS(NtWMlPzaw5)zA=m8rh0?{UQH?MSms8aCSsr_$kYWMMLcRE#?F)WYT6$JRjJAS^L zM$rJ_XO4I~cE5(vt?dKu2x? zCUF~?L%NwS7_qrv1Rtet*BJge2#$1GiEXOmVcN|gjsx=EIi-wcb+t(2xXbSqf7g;j zQNK=iyY|%L=BWP1nrQ25Uu!8UOX^0GgTtc_U+2?MBd=!iWYBz81$mJ9JVh zTFt%Zs@u4osRieIf9U{b0g#JQ-A*4^|D7cU9W>?S0`8CS+KV3N&EVjU3?3}Sx`RioB|;;LLpUv-_!D9IsAQfs%IBg&OR+hcaX+o5Xd!{Ob0DokiXRz;%xNkB?H@ z%xk-IhrNlC)y4CLMa-CWi*L{Pkizs>{0VxI=qoyr9MmCp1C~dWvJgl}Ziy~c;}&2T zmC7^&^0j_GIq$zKzS9?N&36_UPKOyt9FKl(F{#scV$A`swN))0MT5SB&s=W$$c zW>frj2a1?ffqEw4U7SsED;ufc>o4izuYADj0mP{gW4FQ%fC!r=u(oW9^Ao0uZ=|n^ zsx1Q`wJx)3l+7R1Lw$@RqXz!lO|{mP>WE7hH$nG2T|A>Rd;NQw+-f|ldxm3{IIv8n zTjfS4j~osl86mYk?^bNMNaM$17s>WA|XexDO^P zpnD1i0s8UeZuVGIVqNQy&%k&x#I)O6hicN% z8quMz_UGh?O=SGmVG_o$-mdrxIR$sOfX6=?Z5+PoO>ki9VGZ`b}5H3T|TnH2x9b8E-k_ZBa)YhPkEJs$$G~aYh&dP`v{l z7Ei2c(DYXwZILBmB9Ds)z+Qtvh8t!Ou9{gkY)co{m$EtMuAkRV8WM-+hEhp4kq%YH zI7^tF2a;e(`KOZsV3|jS0s1CsX%gn{&n!3pL6)Q6z0idD$gvH#a4H&DpBTt@g(!k| zl<4)?r#r*uJkhW#p7`d0fPj*jrD&A+P;kK?I!O!n3`$T$*||J;N$xrcB*hgGgz8QR z3PAILSd%)H{WbSqae7pus$=VeF%9A2!Ib9Ny2Cx8bL$TY8B2KG8g*4F2(CTr2EKW7 z{}ldNDDz>QvsW9UT=>v-wD+_AB`!TvXmGGvLqy!6wxmtm~of zg2spDulsy$+(0Kx9tBO*h19~kElKe0&P0VbM%A?!Yqa! zM};d;jhh>cV3#0@ipH#D;!?Fzk{+)=TX7RFO>}{@1W`bB*z~jLW}>{`#TO2@+bCWZ z2g3OdLd0~fp}_wtB^z?h4Ms?#RD}4XtZy{G-s!$hxM>aE{_Ko-y$HT8FoOUgC$-B$kF{AHb7hD7pBm)%y@GU)bDzttA0LM$6+4AkjLoiqa*x-j0#oK;;fB+%d>Kjs&5=tB!@_4+PHyjBuTAk zCc`{z2)Nb*nJ9Yx3M>qXi6$;)CtteK_{N;c!7H%&#D8D^N7Om?=h-xIICdH}wr$&X z(%5$6#x@!?wr$(CZKq*l=ee%?&GQB3_djQMW@mTLox}YS8;O}2A}kL}`9)uG-aRyr zo-f0WpqoYd@$sQ+oX?c4SE4XbGCMH#J5uq3rN()M#VEJ4v&~$=IL~_-AjW}AlnP%i z<%$dc0x)rUY6#9vRsOk(i*}RDryGl}o)kF}$qc#lembIWc2K^YV*T%79DiNO4Rd`! zh6S?TDEmi+)lZbF4fHMSUe`;RwhvnR;fidO1NHEL^EeSO&puiEr1~XTFQDnI9}ZA#W_9Pqh>-c*Z6X7Z}u zX;$mL+CB?nI&3o#s`_6vh}92ef#om|b5ga@H*X$G%RWuS0f9%$$q}~TfoBb$i|6Hw z7dwfj*ZVhpv_LNsW5Tyw01|ASo`~hoS_D4aQs<*9gGYa@eHE;3kG|jNFLtUe_->G{ z^FJ>2n@WiMtY^St9;FkYU&Sk+?{uJ7db?Tsn@s@)7T^)VJE&Gsvlhy_Xt? zl?7~ni*`A}Yc4bSuU$0VP_p6n<_H!xTwBa~#Q9TF;gLG+35yS=IzB22nv&1vIHUip z&jPG#bcFb;=*UA_SlbqxsXU5YRi+0I$dF%L6(VY>Tzb{* z`6etos3G2nQ5~2qlEHWASE_a~PVd*=s1mF%QqE(xS2W^lf(H!3Lx68yU25|DF0u?& z9t_&*r+La6nvRhK8~$n+aQy_s!pk)dZbU6vIK1Mc)uho8!R{1;pyv@YX8!ukM(NPK zy-_qgzivX4F~FEs^Wn`I@eo-|51;zAb%qCY%`-5C#Mzg=o-8T#89eCxdr_%;%J33K2WTBgE2-Lx_;&1^Ajw7pc9)uF;Rp6q>d0(pQp3(?_YV($y4VwG zlia7wvWxq4n+CgPKHC!f9icw1<)A3mK$^+7Xv4x8JJ=bg+-_1${-$bsDx> z6ENq2u#y^7ql%I2$szm~w@vP9P0%;|ZNg=VjbB5~VE6$W3ww$5tI%kTPgD0KGF*Jr zO_KVMPk2Sl5U{NerCCGaOmmR@Ls1fK6`Ild6}R*dX6$uKJ-FZmzzPnCDyh9N9tf3; zpZXr0$g?^|qRUy>0f9R1f0~&@a{(0_#t?|QCqpq(|1Tul#oq$yOoJ3poiP=&zQmv{ z^D}Q`=sdU8=wq14kw%E&hr%SBE5`c62-g~Az%ssp(fRzIUH>l7(JiY-VI;5LBcJDfH$F@W3WX$ zOq}4J`1@txIe(DIMEorhgS76F3lWW@Q?=n5wsg^@w$Y80vHE&9K0s;Jki00~VX(8tEUE?LU!!HEcDU zYa$%CD6qG-m{fgu6|jI-f!tP=Hgu)2gVML~NVH`h7;kp@WbCu>zsyF~`T zQE~vNR~Hsy1%r|h(~Wda)J9<+8n63sj5bIDBS<6~cF%G`-m_ekS}xy{pH+t27g*;N znd;=PV{Pu{o=%E}&!WY7Nv8`g=hg3_;9b0OhKf5o?kB7~0c_?%1Atf)sn9P$$@a$; zsM^WhH-si=WUP?z2mMk}n2aA%pR=ce7g!!1hS>SCTWXM1%v(s5p()~o?b-U|BVD1; z*e)*??X0d}K9grSeE)jrfA}vzf`8Rf-2I5VN+;*+t@;Kt#!qI%q7!i}4Wd}N8TiF> zps(U#9OAWBq*t*0_q%p#bPwP%8a35_RRi+LAnf83fd&~R%MhHe+Cd=++KL=Usw0S! z=WE&gC=iACe7BZknGxP-;G!UBDa9Mg!LuXNnY8BpBoQVg+?DV%g#S_j8hWZencP#H zW+a{oa1{u|pHL!veQ;`p&z{(pxumAnx0P}Eky5Kq=;cok`N`&BYX;|LGe$1zXg=01 zW(r$ScZj!fyCREHREUf`Qu6UDhF9gXW%ANBQEM(Vk&3Zr7SS{wi39d;sJ(z&M&uji z2^e)`__0{u1_<={J{`nHwrL22Tf=X~3=S5l=a?=r=0TRq_z0NdYt1JMXx{%8d-b|1XHt0!I? zSP~Fws>HFC_~!-*fHdl%vF+m5tLM@=4KQZeSIl2HWi7BFFg-Ybw~3;-%DRoxWKwqd z>BMxd{^DZIGDQ%r1a!zLATZM^m7RuV<;J4;K2Udjo6U)j!^zo}zAfgsUu^b^KH(43 zIdZ;rPjDS@)7tqmw_Y3Ag_K%`begFwP%;zP!Q`{Ob9gk#k5aL+<$L66 zl@^&W#;ln^G1#@`l~=pTP`Qgk0bRL5@JN`2RIdfY$f|(J9-2|HIk%g#lr{5 zfcFDZ9PP9JWSwVKmYi<{WoJX#ds#g?#X@FlfeWqia*?preDJgP5Y7P?!s4P^<1={g z7%SWt_VLc=HjSbMdGCz?@SSL6fbX2jm+xNb4=?n*A2A8$4TlR;jhGML|5JlQQk@v; zu8$hRD)XceGk&TD-YgI;)SrPbCn)#>u`}F0&EUK#*7rGmXTq-s%J_b#FsR}K!X$aD z*5ED+kWYZ9ld6pgDFGBsnP|OTdshN*?ae5X5XRIefS-`{$M4i+I zDhk8f_v(6-YL2VR>&Jal34}F8+l5BSSs67$i02VLZp*5kBT(vP9dBV(9sDUl-3|R@ zi+Xy8q?Y6!NV%tW?QA?)ZvS_w^x|zgP8#{wvif5|&jP=Og@-Zk)L$bc$eN;N8*bQ8 zYo`X!pj({Z{>`w`FVo>P_I68UmDD7^&!w2_4hkJ+*CfVqX$qyKbt& zdRi$heCHZ}o5!OG_Sl3`L}*BkF7^wdLpfnQiw>1VT+}FQo6nIl*9c7n}Ffz``O4E$XvK3oF$(kC%&A;Zjes zqKK@)2w>5O>}$Ry8?qaJtA-h*{xZ$@B5?VQc2}h=4#))`XDYY38i$zunz(hlcu~oP zj(Y!Rni%Dt1iAvt7$DN5c64)f+r#&77jz+lAdV@*qV4?Czsp<%=S-o)rZP9L-y?eV=)6?kNh+4ckkX`e;mN6d%R7RX24rYo3UHQpRpiv?Xk zi3g;V)LuqsY`Mz?-S|u#^P-Qf)5pWXW4%;O^V!W+d3rR|VtP#*H>et;<8s`^vZDxm zOa4Rhr2%+=zl_E=ob{V6co(|-p~LQ+HyxwBd?PCM#V9nVO*%iq^}0L zi$507s7<5efsQ4!Aahb?IS^;u7K|ZA?)qS;4;W`4dL&f%rI=caza3;J?(N01|JPl2 zPhPxXvn%AEE-sOwwsj+3*Oxm%myu3aG-k#}s+LizlnkqQa-u_fYKK~qBU4cXQn?cJJmgIr`$_K!?c zgInFor@p+6ck{N$G#6;mxlm0wh%Gq<=MT3BPl=6tdV_x^-6`jTuGVX+kpYGzBEW8QVA zZFtDqqkLyrA+fmJ@5(m!DS@yryrnmT&&41yk-)E)!1~XAG(dkNtWOXJtNno4lW#vsR6@ z0*kHGJK0~Z&~NF<14dyZKz;{=y=yv_b45xdyem;|pLp7({(K<4`fC#{+^8%*1e5-E zvs3Zge-hj>HWmWV!w6owHD~iw^f7rlk5Y5+IH@-U4#c$r8Rcz9PWjHn*QEYlg3C&I zzzZ`Vfutf!=kTh7x6+Orb}IzYS8swp%GmCR9!GZw>d&$klF>}FE?>U)0#vX=LD#6j ziq`MCku`725CkH}nI@U4Xk|Ud*(nw`Av2d)`h2o#`$ld&yR+!kB;t z+zQVWP)UPnIV`dQSY|d80TEM0n;9R3zsY{B9XStV0>5(;AOx2vYuu_Y?c0q)RHFSu zwfshbIF*npCe~KH^}wR(@gVfND}PDkO3Vhki%14V&i3j=iGcuT!R7Q`@E88aExeD8 zKlEGFSdptSdT|-q4?RG)CoQy0z{xkr4ImqsFHMU{V*YVujM%L<54lmou|AT=(eUh+ zT2q0=p8Y8zEa^dd(>KtL{btsVPo@Kg<3RNlyts5uVgDs&(2V#^_?hiteMdVD+r6KmRNCy;y(^&H+7@e%7KDw;Xz}k^`k>5251qx4%^<9R z6)x;Q0tt(IU}A$+!MDY(57pazg@!h8T-ou$-yce!z#^9hW6f909=|-x;Xa0Da?}6`lG+DF8A?9 zI?IX5Xxklg-X*YJ8@FPwOHd964P*i1mx|wY#E@<8{!>EdzY6C5%a0g|MEtA8poT-7 zXl2n9d&?+}E_8RY;Uqvzxour+Bf@jm_3aJnch;{5a}4>3WK8M7Fb|Rs8`%hkhVnk;bX z-lGPNpbW-pYgHrqI*k<5B|1kNGdg(N2U`b3Tw}c{`rmNa{UPzuZ6aXag8l%MwNx?= zi0aToat&1*us0#zL*!eV+=%zENI~XE11)}Z^Dzz-CpOKuyLve7@<}lRG%#3f8U~VX ze!0RFD3-(L$|2&&A@l7?4pCf&XG4`w-lqD<$UoQsMKh3XB4JK}J3pL?9r6Z+(Hmal zDk-3$+)&$upGnmE=4UJ)c!XT1y_Rxh*24d74c*}RP&5O%CbHt33EKiHQ16T*i*cTCSE~w>gP-47ckJ6(W>XQ9 zFe>WK3PY}iK@OOQm{m^1al%(pD$-INE$c zYJo0^0|Z;JS>okvQp$-d-xMXH=xQsd&@P~Hr1mV*l~JT5mHgv;>So1`+}o2ijmCL0 zxW}abMp~G7kZ)GQk&&BdcxJ|oDBmE4#AEDHI26&z9NsJw2|Cg80Z@1$plH6-phtXE z;dPqP^BL;NYh2wv*{KRd@aqc(K}NIK&R5qcv!gYbe6+}gMDt>{C{orS%#;!pU;f=P zZdVK@v8(QZ`%dNGgXLp~dd`N!e5|bYJr5YftpMQ(XW9LQYNGN+t*1jiOLDB;cl$68 zhqSB$22i~r{g1O2Qo;Mo8E|Ctl9CG_ZZ!+=+9_#uxmS5d)koZ>0YydESK0mBLEWND z>WYgit})UtxbrYOfV~xvXi|N4%24TF`;sfZfo*EgrCb;FkegmJbc7l(`KtghdDxu)bqOmd(%wW*?`58F|C1xFn-cLhU!kWterO|ThIgs4nND(& zp3sFfvOB_Zt>%gV?K%9U%Da7^SI5v zS|Q?d?&UVT4b9YM=0)NMt!KgBw2Qn^^_LR?FC))OY%AQZnLHmB#9DzaaA7AEPV(KJP6;AkSXSL2#SlYq}xij9- z4!L=k1nNle!H}mgw$IY(b-c3dtY2I~U6s9}HZg5>PUz{d$q6jKfnbyB7iq&C(-S{$ zK}y{D2iG6+&*wQt25S`dw8NzQ$-T&=G|wDpr1#_ah6}iWUF89t+ZUe6=Du*rg5+}h|AvZ*=8KE zKZ<4av0$SAW_JO!!9Ax32{%ka`PSlgC0eIpReB`fW0*->045W6`=eN{%k&Q(d6x+C zsL<^liw&*Rg3-6*D|tisA+Km795w9-LcqhQ;b4ih&9Zp{TzUMLg?ThD)18|r-Zo`)x z93-H5^(QyMuo4j8YfbKyUp~WFSaT5VB7|o&)|QE-;{8g0BIK#$+y|eUVNxb$8+r|| zUvKMUqX#!!>jA1SAf}`?ajd`M7q}72=**9yR@5`@T=#jUYa1_k(0Ry|YEXwiAjX>N zrRUw1O6g7rP#=Vuzgn2`tUuF-!|4L^f6q4KeWF|a}8^Tb3X?EO~o!c#4bkM_(K z1zt=6VI|dP`-vOGAm`7Vy3^FW4g?3s4~$W%Fsmn$1O?jhcmxRyA=`Eys)SxIFOD%| z%0tJe1HUuTk#YreY#~zvvlX~%H#Ga+@8~CDikC1`E6*B&1F-tzu>aHl3@~rb(-6Qx z+=RP|p&?I{Cpsr=A;Da<64t3wS5BCVi%VO(K>EET*?NhdrI!k7(WgFphRk6g*c~I0 zz~by-XW5C9d!KF6uATkKa#;GW$p1?yFpdUyqsaCP6`Hp1=stz)pHF_QL zz_Em53HR6Wqt(I(lnm7I)hReNy`iHHY9?*4?h@Lq9G&DRq>t81oVHVqn8dO=Zzu}8 zuxy+ocK8#jLDrXEnS0M;ECCjy9`J+&2ra4g*dWzO4vj9VrAOkRDS7rPNs=# z7tF`Prj_GU%SZ78>&t=Av~Rh%R&jQSciWlYJ*-@qlzp3~ZY$W=RLy{z;ZW?wi}161 z*7!Pe4e+ehP>MZM0KH;`qoHj!o4L*oJH7bhWxTmpOQ0SUtdGE2PpHgn0mEoBik4m& z0Jwk)`HyiTE&cHXm35y?kv@vHQe=U@7*rv)|DY5}KrrUg``u&l!O7yOpU9P*tG^2` zm8h$E3P)@%rAYC3ecnxu5JioeGoQiOW_!)tkTIw(((oNj(z{y-#XY70OGh)XT1jZ( z9=U_V*z}R_%p&+#%%A{oOJEhO8*4MqM5~n1AWHuRAjbe{DB@F|2R2KfDY$Bq!QcIY z#=%|+(DJ0_#}q47!M5M?ujDZ`7DU6YI6#DJd6eA}kFHB0l|2i1?IwPEx2_}SOMUfN z1Mo3&Fyn%prN}=mM@2!BNM18ff|0=5E|-!f1a)r{l^;HvQy{VLL{|OXp04beTPCS=};tw7Jli1u|%UYR5RXk)l*I9=X{iiQ)R@($^W> zd2C0SG0#wt>w82bCeOEqn}@f#5F^WWEt)eV$?dz?x=l%OJ!qN}=+350P;|Zu;0Zba z-VqF#ELG!bDQH)m^j$dAn_j--&kTu(xYOM%DXW^k47gYlD;!=AF#d;lk*i-8Hi5@SvL^`~VoAHJZ1Q{xXK18W;X4{l4$@^oSgqnDk6=!;+IEJw z{M<7!xNZbIq`2lcNp0|^+{LC%{GMzFF8Fb6Ii3Y5eu4NC^{-i_lyuMAKKx2df#Q4> zJlwFk`uB9NRdPL>zU7c#^myo_e>5p5X&-fdlEUpofgo3)E3R%^GG|&C1{Fa5V;|?I z_q*ZY@Q%L8GJ~L(RS7Z#)M7yRNga!Q2C{BN30#oWk816&a5(=?n_~+3e7FxiH+Mv0 zL2J`c?6DBu;yj0son%Is7sLIs{^oQ`js)D0!tM|x2}lR6DVBumTF@2l*fJE^=N{kB z8+||~1+q`7RRo69JC9nypo%H?6V3OQ#pJ1l(pN!Kq+iJXZqS@A_xTz}#5lT!^7lwH zWlshfk#-Ei^%3jqwn7E(ttRSIikSJ>`f_Lz!8q&dL>jH%@0>)-)t4~yQHce;|fjU?RFa&5~si=K;O|lO*viWjd`hud73uR@41t+ zZOzv7X=<^CTX2q;18!9<>m!bublXdBI}*Zh%d-n7;6!d-7ljpdD8g%^t`13=vSoK- zK1RToyk~<_%l$vo?*Q2WS^EZKHH1%)1!)r|43b1uh*} zAQbI@maM}rwD>+|>(jzqoll&xLH#sDCtn4BafRh%a{#%lLL38kpdOQ=CnW|%8xSs1 zZLX(2t#E*re&D~d)#eUeoyX+`O?Y)IwrB*;Rao#I|92ZLnQX1gAn#gNy6{oNKZ8`6 zGtdg%xXDRrp>jFU&nvN6h1UN_$>+FQIR=5%eNeD2TapCe6ChlqHZbkCNiza*|Kbj{ zV6`bB2^_`xEnNx3;sj?-b#RY;v&+pwj(>)5gu?|}cs3hbO)47-Dj~=j9Rw_zxsE5O z0N;%aoWYAf0#RD=v3rxTdL|_BwJZ=VQmta8Er%b^d!{x5vfqxOzawR3Jew4B78gC1 zM5QW{G-oXTN2u%{^N2)zQU?h6KS-X0_T!!dQVQ|rQna7R29QdjNO7)%BsRio6pf;$ zY>xZg+~UA@ML@Dh9dnOM9d-z-dfCrp$&nM;2+1i90avLpXcbdM`!da~>T3jC`XT<1 zSQuspKVG_lX4V-|^*ymr%X^gf&VdZgR`G_(T&sk_riy8@o9ClJ>bWMAX92z}eqdj!k6VP6 zdxeAY7(Ox9{_7JBM+QrN9I=)*a?6?~HjQ$80X|`0R2JVlRWv$C2dcr;*6z1ZW1oK! zB9!fup|2;9zC~CShLX zI06B*=2OMxBZpg|^eQdrDOER7A_eYnxlR;Pn1iW8T>Oa-*_mq%d+2u9)Zbq5X#vu7$a!;V`66C}n!TJPP_j?wi{WmLQfqJvU{J`^0+3ePnnx zZ%9(Q|GT_EtsCJuC2=WBs}-6TI8_D#+Am~lVtslW{n+EFDI_#c_GI4?%9~fLV&qaHBpR;;Lnuy2egJTtrGvT%8i~^uqDWzQ+J$3pHIgAnVdz4(>nG|!L>;t!T z6!*c^?v+DA9|A(IGeLKwF;Lt0)S2u9q%cS63g^|%1y|-ofLQhiasFmqgwS)4LNk|CI(Zp z@72lY@F!p4`mE@f z|K*wUM0OSozuF${lgdFMxa?^`kaT^;59w635%Qq5<+`B>ju2!sXvQ z-3E-$6n=@*aMF9auRRWITk%gxbutDaavj)Bh@SdGOF11=jJ&r|&vTBq=-*;(L|L{j zYnf=5+X*uCWTM;5(BfWzr3i@rs5*fdE5r~_6Vw{;Q6{=pNV~-LbN$Lr2@Q6BH$qyA z?EIUxY3PR^OfS2w4^neA0}4sVY9EN6Q@w8L8}KIV_bWpz{!QZbcNW2{T=6dIyec}v z2`^yf2f{yOp5IWeHcBO86Co0s|Jg~~7iyDLIk?=BbA5xwhh*w4xN zu~NeUg(YOP|7!oEbOP*fZlu=b=_4D(-{7Ip}cZJ&J55lupXs_KZPWHB1)>73Q^BZ;FwL zPTgZiF@XmyFmpk1N0$f-K5ny;jOX?mB>S*AON42J&8hnS=bc9X)e*>K5G3EwQMmS- zPRdlo?D%%^r0#iA1w6=buhP7cP*; zl$`{wx)gya^gdB?B_B4mca4$rW|M{NFyNIOkk>IH_6)aXHYbvkDQ%Uz*rYCG-;FnK z;`0!le=5#a+T0%Jed6`I@bYcvg;vAfVP_!nzP+UwecSgf?&wyk7LkV2ei!i5yVX^t z?z;X+)ObCIQfVah7`&D0=~2}Xo5?>sM)Gv~nWuY5hWnE_Eu0w{&5=WK-r>ic)9u<- z1Y!SpaGK>1KvD(LIfgMTjk4<%QXEDFJ0UXi2sAUEPM#v2y zZ!CNlE;`K8ietH&Dl^7JjOq6fF+eS80>R$)WH(ma;(VS8m~=4`g{e9eUYlFP_yG|? zUMl3lCkl0-l(7G-*#J12MRVl#lh&jaT0S3J2W9^DA_yp_fOrm8DC4k@>koKv2+&z< z$%gsRTVdsyGUTPPXv>iy;}q79?^;Od90X-k*+E*Q|o({jDb@0w6Bae@STr zy0(og>kXPnTVN$F_wl(a(9>dprm+CBoe_LQYs5x68~W(171jRv-Vub1a_KVi%G|mZ z{~-?8MxpYwtg1u%vd04l6_;yQeRXnBBN( zhD`MV@CcB$Q7uVFwC&g#ruaOQN@NXfr)OYWHU&)te1Ua2KH@(gt#j6g8&6=3h1x$Umt*=fD!`8_Qt_8 z=b-Jy#NuK}N^%qHT9Bar9QB0@#6{Ep0b?M{&4PMNuxWlthxOY@)d9{_*zxux%qqvKxb zhHe~%1#2KVTLhh@suA79mm%6KZp87yUyq$F!vz4-Jw&11t?fbn1`3Y@xZHC#f1Ea7 z$SD9VpfWv(E%Iz;P0T-8_oiIcOmzuM z?rQvl%wKs&8BFVxTA(UqJ_^=~4ZPgfDLY}Qhmh-KzsetVj>KP&u03N`3(T#{l@G6`*@?#K+{OWQ47i`vk1?m?YzD@ax7frWgZ1+rX95(FdQh zyp9iES4ffDwlC{$ zGZ27LEw!Y(Xd)WHJRI=OTBYTsRH8F~QTFE<9lqzjOm)b%!a?#tk3nlwE-GAz0!cx{ZY8 zk;tZ%p?=f#-b$;z^6&{WKYw_xK@h-uD5UfI7xLwP!HR}7hG(o?8f|87(;fFe;B#xY z=rWXk##gD``k-n~LiQ5Oo%k|^F)#fm{2pLBW==T!onyV6q5IiqD#s|RnIElLZY8w| zT%bhy#sei#?4w_-$X9zklQy3gPwZ~X1U_$W_OR( z#2I0!fd;I``(P+B_}c*FoLeO8d}c zV8e?^61>frsbsqusB_2Elv6L{@SerDZXmh8QE(z~TLAfLK1@UjZq5&u0EvNaK4)s(HpAX^RStVHoTpdZ4 zVmPf-@lQgO?*;ZsIy#^G8E0J(yj8BtvXP&hIKw-?FBLI$JZjntxUu~j)ua&w1y_n+5;oHDLxW~8e{|D0ZC06V)~PU(a*(1M{Fl$DP$XU z<6m`|M*>HjV{4@7Yrx792&#~Z=Py_7m|eOsvLjDiU&63sQwk)OdkDSdDFx{hKer(k zS-4@La}l%SZpNJr?|Ayt_NMdMuowoTXu-ja$xcd-^qRxmPHF`E?_vKA1trgXV1^4= zgaAnuRonfWUlV!I!t%C@8@C+&nT^9CaRFJeIro1#CMbS!ZDN>WobP_mP>bm{YDrK|))Z9Q=MYXbvs-=bt zOh8cWP#(X!70ydbSJggXL$Tpx+|DO2Q0fV@wsr%lWYo8=(l3W2Gf`eiI*-m(!BMm~vmQX-dR(|xBXe{_<2c5dK z=R8);l_}Yur4be?ENFJ%rXGl_sMc~qOaVPK*WK0^;l9V~q&7Lw6 zw>@$HyL#YrAGo|Qa`JA}Qj#rYLSL3NnCyc+$)6x5=~C#xyyE*r&`2R&=fLy2OpUpV zum1)#-U-ZI69OsWxDBuO1hjoF#A2GixJAR7#lrLFqrG6hcivCRs<#nv82)xajP(Td zhz{yuZFtIX9|=!CSOf8pD+W(7`3ZNaFez_zsO>vy(xRu)CFqy?1{~8_fN@Vgk@Tsh zfow|<2l^VpU0he+5GI=y9C(JaeT7K%I2Gco2lBe$JNRVVq9Npqt(N8M#5M3Lb$siM zD(Y)T^0NUNL+mbI^j;Pd#28RCCB{(gCN|_ZpwABh)`P(n4m{bi^@@emf+M(VRQsvHI|E$nxO9eD6rvi6Zt&Z)ra6TGE*{;d<>UM`4A<*S? z#0q~~SH2p{$m4z?`%n2Z;CkPHVe6If2aS=E)9pG`0I@rfWT6&e&#U@LxI|xDl2do3 zDDeQ6$v(oK@;}d3%y3pJ*#v`UkUWO)&pE(+t2007O;%h^CZSb^nf1S$A~z zNQ8kp5I@MyYN#4?=2i6<3=z_^5c3*0nR&2+Z9m0rTJ>M-kOvA3{n%3zZE==MC%`W`zMB-$)r6HD6a7X_?+lYX~wTsiG0 z3+}&>o}_?%D3CS5p4c=$<-;#a}+<68T?Z6-o;bfmF6W!_)p-hoYKC$+I4^ME{x`8gHFYtyP9a=DHn_`poZrU z9~gY;An80bO*-(PDm-wEdi;IS4zUT=Jf2s`^y17A1ls#So+av?U>_iJ^-*=P$)pXR zzU=F57w{Nx_ow^$fB^Q~ZDO@1oQ|j>g=gnSlwEwW)+0B?3Mdq^X89;3>!3DC2qn9{ zvRKY;u<3Y}2uSVUCy+R?V`%I*n$@x}p#K~IJ7U@>vtTDPgjFMqcSf+{JP%!o3=f;9 z-4ZZd7yq&MKc{K6?CX@jqWb&NURZg_!3Ab%(3kwmGHPL2{upuJt|S>gUBSBk^KE&r znllUE@N=<9j1K`sCJ;3-G@G!k$|geilZ~-rlA75?E+NXfS--nDdrpsBWI`eSZ67pM zicEQUqYcR=YFhu&jZg96OKm=;f#*}}xK$bR)ZFYSL>^c2DwbviLjT)_7iB_CI(-lz zsQ_6M1DWG5zmY6avhhZ~!!VPE_V8q7{7}L4(f>?~zUNh5XA==|=2s%~4>TeVY`%RA z_d}-QZ2oBx-|k^!swgI4w*BeKNm$0w?q}ZGQzn>$G4J6We;EKYUI~bu;p!4oeF;i7 zLQti%w6>Y9L%XPfeVe(W3zW{)acsYGt%94r8Chhk4|n|SENbP4+AQtzfYG*r`^_lR z<^iX|ls|=VLF!mSzGxsYkSc#XH`G2|0*~$W%K0wyXig;05R(uF zRo>10Ko9dITh%p!jC!3%HR}*6InOzCU<$nftsJY3$f4@~nsnq5!;z8nn#eYX`2dBV z0+V5=uXlSV9PM4HknnHa5|aTkw?6|y$s2QN+6Z>rF%}`wLAEsOtrCiG!ZWK987Rk0 z&EK5AH^Q*3W}K^?o;7#ZVatZOC9~-3Lx}k@d#))_{OAS>e+QiV;@iI?vTs)FimAkX z!@#u(z+jURuSctmnXw+S{*2RtA?$meXi=MwSRWm$_7Ggel5d_{A1(i`tuc`bJcEYi z0!;D}#UNSMaxSS9f&AOo)AdhQa?TGSTy_4U+o&!@Z}6Fm*%}P@dJ)5lQ+n8z5Bx2) zd{)dKKW>MKh*#1JEX=12H{oN4z%aIP$}Z_L7+kL5B;-Hu*5vA9c%t-670y||Iz{3# zXj{wbIu$*+#7Ng?;qSHVHNFw7?3hXg z7Z7hRVZwWU0Tu9xZZmp5AN<{-#%3cgKW$-?v@vTK#uSEHJtOBt`Es>9D*iJ}8GovM z{UbNIO98=r#irFZ6=>TK@QD;5(U_9MLfYLn-k|%GN3AxvmK7VxA=n-`m86aOxRG#- zgcFEOG|LojE{mVLtT0ehT0(RgX_8CmIZORzK0i-AL}&M%YT(NExt1bNYGk=BlrsPs z2ncHk`R6$p$Fubt<_JO~b_SASX}P#)#{Nyt9EHnVRQ1&Tu=sOj2V14+1i4pl;wXua z3JLNnQeu@RF2DgmQV#sqWS{*!NB=0H0n2DavL#gVjrOXez?!!}DD^*HgSW^iyuuQx z8_#jk<}Y;N&aeggg~Z-@g@b{&u*Rjj@u<;Ysb;!Z0jd;uNQcGk^d9Z$jBCdAgtys7 z*}mT$i{cFHkr9k-tfaCVYIFzz@&#UuEib2&&Ha+7l9^ z6wv?vn($bv{J!Zvt7hpf*j3X)pe!jnhu%8kod%M5$VG#xz}+p(#(B9xB=;Ffi~5_f zuA5ht&7DQMecF@8=2MyW0;5Jq@+OkL4X`i*kq_k62+u-XKR8cT%1&)Wjs{vYxwKzSNI{i*8r!Tq>k@;mg18 zyZO%fc;t7K_>qGEE=I9}ibn&q{WN6bg-;w2c`yP$>B^Qb&$rZy(qxY0Az+lQ0^Uu{ z?lPq-XT+r(3aMUHmSq|7A6bO6>C2YFR)jYh8;oge8%Ue2< zEqf9s)E4Mt%SUK;wHaImdt*dOgQ)0mR_)8*p2DpU=9-T7S7W{=#}I@6^^9FW*^*K0 z)9wYXx9a5Cy{nr8`iDMTx>BmN$L+3oKzoPX!E5NmVY| zK8hHXnAj>f7ekhL3)6|PMmYiLpGSmVVKe#xB9+WsiFJ-+cxtj@lfZwXN^I?9a~O)4zAlv6=F{j*>P)GE~~ty7Kt6UgekzHf}$1`yRJNxf*1f z<9u`kx}KG4TBVT%(VuTJ5A7nKWB*DUgBnFzxA`X6y#DMjZvkwbfP9Evh0Hh<%PFTE)h|FS%fy&3S%0U>}-;-J` zM$P4Lp3>yQ*l^(hmm?q(Vpxz!w@)7T`IADG+03M56)|={A=`586fNs>XHLL9AO88S zgnnkGBLx7qdZ$gTEf@AO;CWa1&{_%En&h?p&j?0v z0JefDfKWrTkHN4ZO_~zBYjcmb#~&r6@HdTC*qkIX5YOt8d;1{~E0kbRbZ>e}OaP5k!X&e~@68X+NWhU$F`5!|~sn)0|+8VG$?=g6d#!y^L;=W*eTjO0Dp(0!6xc zW6oH%9RkF$MtRMyVhrSQVuzlb7qdH8eNJ14?oa?*0U*R3aDf_=ZOcIWKFFhWN#3ED zZ){6cW=GbmHntKLLtivG#ehZlEkvm^A-8mj%NB{{9*@$SwFEI>L1Tjl@~-KFJ9bIl zc#kB^`|$+sGbO6FGLnn=wv7K3LPnx_| z>ibEl$5SE?c?mGA4O?PIMY01*AcK9T>M?^(f+qVx1)YZeExK zrz?4IQS!9cYa_U6oPlrnaXmmRydI8@5ZW**{)opkAMzOV8or17mhjSq);26K_XWsT zaJhh!N<}wY$w((Y`6dTqTlHXyF(>$f&_ppyoeY-K6-<-~tqd2+@Dnko$_Z^R^WfdiQmT`WA&b#M_#ZJ=20bqmK*(7Ssufc)-wjO()Ba> z#jkaH`(1ukubBgW$~cxGGr7zFjb%(T+)=PWB|o5LOV!iO^fI< zJe|8Ll5vUM{Pl%_XFm;nZjrnLbjK**3b)>Kw#Y$`QFW3Ti_&f!!=3 ztD%I-Gsuigs-!(^(@PKvlwz7#vN(9FDar04)HFvF`|^RZ?J$xn`4SoXjSBnQ?mSL4}+uF8#1&q>EiJ%}+PHcCJul=X4 z8~KU#i&>ESp)?k#QHRTR34<|Od%Ti;77{0(Mxs$By+oCfe~}#zk2g4`j)ZL znKwat%rBwr1KYtp;cF8ISf=B+6v@LB{DF47mI>!Q*0%^UJuOPNVV)8WQRla-Tk;(5CROnRaa;UaLdGGmvK?EWg zt{^`+IHPmU&>woXT(DVpAX7SFb{(4^>W0MV?*QqYwY_by8$83cwa zKT-16Fx@`0tnXDDcGYPmrp`ynlPfObakV$Hwe>B=L_-U{*6S0{ojVo6JyreN6g5q{PGPxKFfWyfHvN?Fvao9eT#Tir+NDm{l1HXJD6 z=p(p}o`V(_Z|Yv#2!k|G2Cn>sJ$Vl9x~x|QpHNzgSN})UIdJFsJPkOu zoiw)Xq_J%@R%0}_?KHM++i1|(c4OQB=lPxUp7#sPnR|A2W_EV&z2;?o?|!O4)2E5K zdYL$$jxtF(>|kTJGz##~|n`dAig32Rxw>Y?DAW8b*QI{}mrEDvzy@)hQe6UF+5;ewBLBS4mfXUa7+p-XrfY(G5Em`S~cQ4^m2%2C9M{z+(*;EVHrA8 zFK;Gkqn^`cLJui`)-M8dN({jfcasHRl-8z1kx6avX~fld@1elmQ+uZ2`S7Hjn_P<6 z+3n#-zK$cu{`!&f*|HF})n^1LHjpCTd!FZ_n|}GA#b5`_$sGRb&@UPTF{kYV`gt3m zwi2R^hz-F~k8u08_Fy#e4}{r-###wg29x)2&7Fg1H$E)KxjQ~55HC~a8b0<#q_?Hc zOAUwG<|($Urrrw4_tH5nC1!>2Bd%cS(xO5C4u3_u5)e~>z=B{2i%Ae6Y;}GRjaXd! zslL+B{Bbt8>mgS$O|~RR@)~@Z-L-Ia0;0L4);6$yNK(CbNCYhZ>cP&xJr}P0_OPko zN!cSG&PiI{lL}BE##Dr$zCCnRK)rYTS11{njPk$@KA(BguAcq|lI#Yl!+grnN%jAl zNF+A~nbCOEEGMpJr^C7idA9$_#)Q3AS`Nh|;18zQL996#zJ2MVZ$DOp`t-$W&{9U5v8C_wf=LE-m6G^_5%!VG;YT@rx+HMgZas zC{u&L5&b=<)~K0XmW5e(y7Nvxr&gQ>qvcA6B1&t%>>N>$^I=;-r3a~6@<_Zswj?`7 z%iTxu&_XkYUc zot8kNW&H6LcCjrql}EEb{D>2-?+B#KdN97;_EC6_cTq}4?r?+foXN|$VH7MdR+o2j zEN#Gk;bN zRxC(*pd?XGMz1j5_Wvhp7qKTUXROe*6JwL%4OwXTp^~LDT4=o(ytEP$A zw_iZ}b@{Kz4KY38zft#cnL?eNz^n!E(T6yw*pxR3Qj4lJ!pDP z5VU^$2Z!O0ByR!e4D*`535ew!E4F2%)gy{h8z1~Hs!4+s$RaNY37YXGEF5bgD0T46EaFqHgEe(Zv1ml4YciWfxdbG@YOK*nx}GGlgIvSrr`>dX)K6xo{6o) zxjDMdA-j(+Y{=Io-rEWqGxMtYMU)%r&DarrS7*TSmgg7v5nb*0{qXem9{W;5d znAA4?W{DCIdJP02u&r_l8nzm^s|Z(u`v|Kiz0khRoLHXXG4QV0bKS8+AMy9ttsbeb^KK@kzxD$|rFoGBT zlLOU8TwSFkM#Q&c%&{7d0({?!6mrig&0LWI6~Y_GO)1!tURFjXr%aO#ivd9hBSL6J)wmPwHJ;Bs+6IZs zO7-5_uk3yvS#qJ6tF|1sFbcd7j(g`4rUrrs$Nn9pLyRGvq#_*~!|1|dF(#OpI80jn ziecHLAnS?aSa=jMJ^e~!FhJStfc}{j-Y2R6LSYr zY^x^vGAcqVZ4-P@DHt`;h6n05Ne($)d0Gx!kiR1_QE+KVY@YLVuqml;j>!RX1v{ZJ zpY5=KV>u9iFuXz7+l+e4X^ZxaVd3+l1i{?)_^(4kn?htimVkG1us(hXXEs5}LE;bm zk$=n0ogF6n#MlC`jD<2-oq3`fqfc`}XEnKlqWei%YZ<54F`)tX(P=Y6kpJnf3$P0j zJ!bOmCb?J33c+jFT|M})@ee$en$*Y1`Q)lL6O55CMYe|D@=85k)Qp4Ov(OEph+==; z1kB9pz4gWwhB1`LAZ{612Lcfve5oWK7A^m>5060u?cx9kJt9|`7Ek%wdITj$<2P}75hBZ3mi~z`+X5JnypKjwtfFa9ip4Lmw*f&f)W&e!z5g_ zVT3S+sI$$|-6!m=Z^{sX!KzIkut7(6ur7L*Vb9C0?Ktq%5Zag(q39%ugZxK$9q6@b zfR21d!2SnBMW{fCqqhE#1|OoF7ep-h&JZ6Rp&vhd#rqc0yl2P|hCJM_Nq8av*~G zp-?phckI$<{wD>sE8HLP(yD5|kwQT90a6m`k_mNrB$Ci6w>9}z8x`k?Llkz|1{$Cn zU}%1ln!c{Ztkh73?u^8m#n(7rg{pTWTQj3^K)9mFj`tRUQ1e{ zE8!@b$^50iPB}b`Nyt3Cjr%m>^dpo;f=bw^+Rv!4ASnkIysM(W);0p&AT=0)_Y^=z zLiKLY&(R$$yNJTV=^dSJLq9ahq`$e#X4>Izw^3R zw|_7ES<-dvE_uOy$9MM&t^Sh$-KhSPIJ~E=cshX)lJT!mYj<||flX;y+li+yDMYmA zMWvspX|wg};UzL!ooia_WpJJ{6ks)hfP}%SRx=B&h}eiC0YU=DQzGIM|1@Rd1?_T! zzeUC+(=Ox$UPki8!}c*nCvj{WL_G6{h>AJ3|4@VvrqEy$2VV z{am9WI~{NUqW}R3gHi?%n!%E=5r*!`vphe;#vwvI-N5O!V`!#vAFVHzSa>s|b|680 z$nw65LJiG~2*tUtRIB&BhPBh2@~X%{f5~)N+C;$ssPaq&+ z_^RuNrO#IJ0ceRN`>-W8Z%j(cIG>(M=cBClq05f(<&q6O0{_qh`6WaT9R@hmoU!TU|B3Z%9uK?FbJad(du&I&(k@>euwtTEk zzf$eKi0Y+`MSAr74QBBTqu9+&6iLxL?y(Nplp6XhD`zQ|#uY{5Io!a)dARZ(PC0G> z{)5Yk&5@^OSNKOGLMtG(AsGS=#~RN{E3y#Fe?36Or;$}^ZTgayvRfYMV}562H|`nJELp znvk3U!Aiz}=Bo=`rH)U>2Qykqfd2Iqn<+{c{>3LBNLH+s;UO zKcI1W(sjZw6R%(=tdK4=VdHHv=GC+p-OQ=wAON)(ADTAr0}ouBaKKnH0xz%NZ5~HT`bZaozE4;{)`QGvI)<-uS|A@kaBpoRNvb7k9eiL zfBYqYd%3ml3^Y?wF>cSlQOxgVc7^1v6wdvvP`7CNO{|(;v>q4Vuy~cB{3sUW+>lr zVemt^X8?cu?_;E05@FJ2`FVv1bxIWVOO^`x9uBm%peilX1a-X(pzsxdVdm8|Mlo7B zyK=>$BrZ=vhsPDwGeTKOBv@Opv_Wzm-R6>G1?}Q1H=EwOx&!_Gl85~yzJ`43lIxb$ zXIYbu|CL@mPGxUGtqXDtqoj7S*zJh(qR);QXXnFo2dX*J8(qKT|j4a^R@CS!Im^MKB@3^nq zG^*U_o_d&$j=>+m&;jB;kc`0bt*zPnXty;@N1-_QwqcLD1nKSd;!+;R6*YH`xR&Os zXiD!-!HfZ#c;mHYw~QXo5f`*lux86t%5v}JN8J<}Rr={RGymXBzLt-WY&Iup>% zfm{T7HqR#?I2Fd^%}6tq@}a_?yWaRXo@n)Dfd!(LAZ3{-zN6Nl#gg^t4NU4r#En$=-2i#|zXmGn6}09OHG5&8@W3ccbzHmS_F zu?tHfRD9;X>q7cWRV;ATpaknOX2(1=+GH@aM~=W{t(303c`$*jSMaCgp_5^~I}R2I zWT02c-zU=$*PAE+)5fhPv0H}!QLfc^9*k0x_1m_YJt>X*K{)1D4W;=W zPB(j@J+0*VIvOVzP`DC6^%Z!=cE>6qH0%T;RJ~X6XWu}iPI6nBSr$oI5=RWVZ&k%R z%FAnRe(|X{Ns7t>BXupz!y{;^XEEJBQJ@|2IBP^NH2mI53XJogSn=Hla~eiD(OQ8v zHwA2e2!f3|W;`2STirx37_QpvYf2}ta`(O)9Yzk?b+$c39Ol}GD%XE@mMtEim$Acy z(F;yjHY3z}=CoTJt0$FXy#sk3fAZ)hwBra}d-LLc#Gj&a0&VUNuu4a((}S)}V3U(` zCz-F|56zK<2kQ>NZwZgny>sgwN5=#qw5XI0k4EU*f`di4G-m_^j2-PtIk~p{nK$Q_ zLX&wzQ%K`MBFe?P%a&$J*VTK^s z*;bh$xelrYqh*jDb^FlD8=47oQ}f4l*a%~_==TVGv__!jqrh-3zx6DySd2Q4_oz(Q z1pAhMUk zpv{q2u06f|s1b6HxOFfL#`s6R|1|3Yk|9H0FDsbc{rINV~qNW)k&g z>st)s6Zp~`ci7Q8t)dvcAH>0ELRvjxSoEn=E2LJRrqvk2x5I`-s>eybLtU+_OVK{W-D8yrf`1F_Wz!qhXDNl z!8(^R5V%!NqTYeU9Y3=HxiqYJ2UXR0KIT)Q{R8p?J~vkr1SOyOtc(3REF|LwSfs(SvIBQ zA3)#-ybQV`o#cY2>`K=rLA*{9U!amiQmCO{9Al7W9=mIqP}3m3cd;~*(I!Q(e1xo5 zWTDwBYGgpdTP>T=?RfE^mo{zBh`i&<*Pa6s-p65#vc`V&Kae zI+C7r!R@+6fJ-*nnB2Z#(f7;Uhy?2`(qHK$M8@~a_?9PLN(;*5Nt!~;A^-kIwprAZ z76_L?gQ2!Ku#Ik9UO)l0{09aa@DwwS5Wr)BK!Z!{y^ah3LohzA%08FsXA%odpapay zC+#=gdkcEWSj&@KCCtN5uxRtuUY)9&YTiXQ$sC+X302=yNrv&?2#pobA$0#b|LF*WwTHyD*&Yka225$>lm+0 zoT+q2e6L9w7IU#Jub49Py*5^|#BW3KS76!vMlOedz0(o#rLvs;4|(sE=(T8d?3(k} zaN&+$<>=;#@BK+HN)1wokC$GFE{BOvdF-<0?e#FEx3m~|RIN3bdr8QviOu_hh+XyC zR$$X1D3hA!-D>3Bw>%e_*mT}#;ZyG@9ChOt<5Pa<^c02{DzbZJLcnit1B^^;o39vD z_Fds?xnFn04W@JQ@g6Os8rCC(pFVTbh)8j@e5prs)>0?ltBEQye7j`hNj*X0$}yf` zPB$5X{bKr@`PO;P)m%5vlHK93wyD3E@YJBq3}}e}0SBQBJZ3K7M#j6DN(xr@Xd?uM zG+tu0M2>#KQiT0f-Ou^|%KD>lZ^V3`rLv7s#$&c8?$1KP?Za>q&Q3+`d%!1&$w5F0 z=^T1?LNTM6QOAG!?j{!TWNoqn&m%y@K`05^Ebj#vv|S4m)0{mzoOu)ePc*gt9hN>r zrg3fBAeUagxI$aCy(_M5T%?pS;h<~co~zhR0nJ_gB}o-hjW?@(k-Ye0i+n1484E9_@hUEBL`a>x}mx7Yz)KztAZ9 zc3f@^M1_|SZ2LYijtOY$n_h4ZF%G9hJ|M38DC)rrF-U8v13*kRkcAMb5u5<~iG&`R zhtm(+Bx6HhD@xf2-SM_ijS)5xp8n|oiOBpVos&Dwd$1Vf<@U}Ca~z|>E3OGi;<|Ac zP5xrpPM*&NIv)DN^TQGRe8&yL^K`SW z$+iOi4BtAm5$$J(Xkp)(W6?GC9p>e5in5@PiI_x$0votUp-^T35TtOwQ0O3b3+ft` ziU{qq5a9l6>!hkP)oS<&v*AIQ>Py$JUwd?=F9K<7GrhvszS4In zJ87P-(~fSE zYfzJxBJ3`2sDC*=i#Rn8>EAtinfR zW~E?`$mo3a2xiyr`9LwW>7#9vDS6~UVdY==_5|1=Z+-G!b%RTG_x&6Z92aPAcoyIs z3}iIW6n3;=c()5n&fIG1hxceS3WIEH?Vkt@y9+!?4gBk@JNhNQgy&t~JT@bs>q&t4}%4dTFtOa`tsT^8 zGa-}is}$SW4$!7d0TE^pBE>G}r0 zlHq+z22#4kH;cnuevcXvxx6Ivg3*#v$yG3<^;%TF5^{5Xx0)@D;toX`5dzQd>Y2P% z$H7nz=ioLKbk7fk~=~zVnHV+@*U{b>s}ln?S_EAnA+)|DR8u6Ja6fMS^rXhU_?z zPRG;u+mL0cQCKEbVK;$1_zvj92zo6sdI&;$J$E*p3rtK4j$^H;1#ih)NEEXL{etOa zX@R&O``XEK4obovlYlw}bq3Hhrd10lUhc3 zTkvcAAu#Rw9O8P5*}pX1N-Ouzk>?AmwDz|JGy4bWToo)plkopw3_~=n6707gHY63# zPh0bYU1uu3^jA zRpD$-JF8QZan<<+R0EktOsZhlY!~GA~vkj!T@XpJjsr+|$ezXuD z$9{6Y*s`88pnTI|xJ6mblsH?iBOcb96PG$p{4U!0v?0@uJ zBDmHfHf$KAyZo3bhz*cnqXZ+|9sWJyU~#5@_oBMV@GL^(#37&lu_c-@jGxm&SBoY+ ztPVRHTgA^X>3xuJe|*RBAY|62sV#der~z~nAcf&_z_4VeQvP~5Up{W|@RCCe{)6T{ zRvuqVoj8taqa47JQTVHWz#3if;l`*~2GL-{dN%`CF&H3O)-!XgS`sps3vFP~h}P8iq>Xkz=RjD03#Kza zg$VzrFcGN>c()l5S|1vfkhxRrmUXZSjxzkR$%a4C!OMA>R5+GYWCvblmj&4mYFm-N zF17f;YhECyLB>v;5=pH+7hNB8Ee63*DK+AWHuE{aP{|0l|8|P#vlg@Bu&b5yBA1d9 zO*y%n6PcLv5aY)mO?tF+16=>WCc!eqF64=b0kWFAfhH7iyqM&YR7SJ3e&+WJlgwF) zB`n43xDB3m!~I2F755)+QP*p;cJzEr{vDB`<~K}pH-K;nggOMJCkj_(9lCnEMt&q) zy+h|-@)926b^qd?wFq=lzh_HY+t#xh=npg*z0k3li~TP zoG8rpSWwG4q(QRiTyD*42*|!PuSU>}Sf92xtMN{8T&{v6ITTW&0B>pl z*$yL=u6E;K>qv>Zh0;=U8^G*q9e`pnJ@?EA1x+|p3O zMimZ4Wuw2d{-EYnSa3{GxbYld(X{dR$s&T`a`_Bn7m_>YPhJIN5+L7UP+0-5Jb%09 z4E72t{H}ff5(Phx0n9{camjPJl00k;jeu%fZN7*XG*$qFmJHJ=--XIi#(dTX{9B}I zQQrWsFjct_6kvMMY72XW#A|45HNj8+C3_VRG=Y4F5w3>Jn!mj^H>$qGW_kv{tSCpz zROXoaRx##w5{Qf=ECZ=z^u5_tca@yIFj4(E=8I`|7Tyu?@xD3MjTAD$FeCesS)I#) zU44VDH?bR@Cw+s@AJU zXB@74`9he^-XSJXE9zE?Ewm?t^>sk|c@h1n53wV9ZIi#V;8B~!|Fi7TuRCWeokHe9 z8>l!pKsKvPG_PILXNR5MlKCJC>Ev~9=geYY`##Sz*-#pM9Paie$l^<*oA z*m8=E)irHJ{K~A=6(uz=Z-*58 zIFr6g`?m6osrwB^a5fC%# zvpMSk>4R+V8n9kj_H)k8f1^$?i8Q{pd3XD|*~CC8pU?2~0a{ShyVpHEr?<}q0CI&L zG*dcc`EeQNyQU3H$3XtV&_op?=yQnP!oAr!QxR<552;wXSlOCO_Mj;}s}G2;sBT+Y z)?zPEbrWc)^8~yv3Tdc}#*24ZDU8|v@Na3pyw^l@!EGKt;i(4$?jPgOq*o1?i2bTG z!P()8iHl9Ld>~mO(xh~mcHH@c6J6nK$|Sli)1Sjo86U0>*oBHyD8EE)(Qu`;Es zji97s8Mw1hZEM}np{x@|2L65&S#ymSO02MaSCEVx*=g^*2F@G;ISt-u&SwvQ;Ny4x zWcU=uhd^RV@82pbejG!E=}<{&zpL+of-CN;E6plKWBg@|4e<6x{$~0BCD+0(YE>y< z9d%fJ7hiCa?wCrYF2DlJg`&l>$Nsfx@aNZRz4V+|=F;Q$d2LARbVrL)JsHuc4C z-FTT8NR_KvS1MK4)HRL*QE=!T5%Zp-x=n|e3{-xo6^PCo!Br2aan?R^XD?Zd8kRAo zuU2bYtZ@+XuEB`jB5QZC{OTD3O6CU)nY7mQf;srwMOD(Gu7UP9gw-jPQV@~Ayx0dF zIc!dADq++HJ@xiQ#Z5gr+*uT1p8hEaAo^j3%vO#NReG`cr2F9U_Ql%8dHMv_a!bm^ z*!sg9C|Lp3+R?N$yNEPlXnp-55YOl2=e`PV3X=e7SHV1*h{yFY8F^ z93?>N2iE?OHE@N%!jUn;b(TWjfvOmO#x``XAv-gP9;pcvi=EU0x_~Lb1v){`+Mp$R z;GlSi5tNXa$5GM+AB5SW(;A!_3>}vcV$=OvJNpcyMz7F3jIjMG{;pkSH~)K9b=XtwEVr|bFs@uIcvaQ zj&2IVDt+3nK+(~FBP0WD%M&e`kqpG?fNa4{{TTYYYLtmsy}LXLPf#!!i!<}#+1VKQ zY2M3qO@Jeh;UO~?g8W@j?{&AL@#5o9Xkulf5C@Yg!#=8@xe7K~$>`aX575wgfL^9( zE&bjknrk>MhJ^HX%21J2+MhRqcDS&@yf5Jtl67>V5@r*Vsj_LbF?~No0Y}5>A_h#f z-4%HgHOq04Z(oB(t#*~O%F_S-Y^K{qe{jb~r~xH60SxULd$e_C-1BOi0$|8i?rGjR zXDNEW1)JiUraCX+l}aW_9=Jto2}Ksdcu~$IUecAU%kJ(G%(LCuP+bfYm8;DKM!AHu zYQfV8YPytfBT)Y&21*_U{Gl}MX3aw6X1ad+^+>zRdL+WwJlM~^;tRuPgtbe>muHWg zN*;tAH@LE#Vvx1nWoQ(yL-}Vf?KnzhOwOPG>7F5HdPxmT%D^s#q(=;QGP&%c`M+(v z0qC}9!zCOcqIYnAQTw(4Pg1h1)&raH)Uk;ew8t zZzzbI;+mi3vJ)g)8c8{GsN+Np6RN66VR;Ry%$71XQ@QMiU0)_Bj zp;dQg${Uks8dVg9yKvGN%OqOYj>hEg4ajO1PF2v7n|<`s4g=2<)BJ(c8keHd%TMHy z({J`*lmP}B!SV9V-%hsAP%o+7x74*D`H0D{)N_ub$5wqJEa<<204EqLjsGHpjsQ#6?LtcL~V; zzD<0_$Yyw37(xU4QQ@^XGz*psluZwC|BMw&B!W1Y`O1N zr=Nsjg$`F=e&EIp3po;9)C&u|n4Szm*k@#IHc0%_y8WkKT4I@L`hpnAIsg=|1`rVQ#3Z2(qo4RqZ1W~FQZM_G_Aa~q{x+W47H^HnvOu8LZmKp0)gk>3S0f&H2J8wF|Q+ z2Ag@z`dH%{S!~F^0D|G z{Y{x6A6>uEwKY8J#QOWfD>f1mS^^eivoIvB8>xRYc7zv+4CA0NsoBRrFGe_Sf8lKh zF8nN>FILaJ%N@WX*LQFz^nN*&)ICi()t4h73S5?W0OdwW^yqmO1e(8#sjOL_gNi>G zKQUI5?u@7%?ae235WI}7yFCrSXbl6MvyluUgupd4ORJPh_ zyHgH3!l+= z!(VYszaF#;S@}B<0-K)OK7TjW>cgzhLP83D@1G7o% z6S6;gJ2z}c#=1`At@tD8H$!fzFak(<9NHr3R+9=aY6H0rk%oYohgUJv*E;OxtU5u< zJ~eC{eR%5Cuv;Eq2p6}ci};}&!|e(O z7kKZLu1`WZ)dJPR8Y0s|Z06C6H(OCbqd3F7ul@x?zdx?fS;dD4;^g$L*e%z@smVW6 z2%759KcaFtCMtA0`FnAU+C7E+DIvc7pl$~t{!h1ifNnZ1VZ90XxAPUA8&**twH%?f zSnIXWlBiK{`(^4V-D2AjZ3{-J)VXXGuo9gTe?%l!wY4Pn7mPlls-eEeY1@hX6Xyj> z&FRRn9|XzI&QDDC`JHL!hEN_8__tgZ#H6~j$izaSUw5JrhVWT)j&3qG^AshD&p9lk zkEYc=iTLx?Q+2NlQxl5uqsMGv86qpEOau`8fKUkD>j29#Up6+HPuTXbVlyJax>52Mrsf;h1M-I}(v;@9bDHU@WR^v%_x9f%giiK1(=W|K#F8pn3as zL$vA34^X^I(XFYXICaSUS0CvS&6lOXRS+s}Mo8&<_#TT_@jayy2~Q`;fX?U-IPQ|G z>V#~G?fG_F z?J~-O9;3I+8OR>)jE|M%_zK7i(zm2+;itZ)dy3d;p z;SKV(F3#vYPV0J)vpCT}k$*~)R@&oN4T8jxW=7;rXkHvn2qMyd#B68hNfUh1eU>H) zTm;npK-xr5WjHwd_lkdDXfOoDsY?x|xu~d{nMO>AT;K6zk7jQVYiWAbhZtOfTZ{5I z#AI;OM&2 zVM)<7RoVb?20TJ?{5})T^=Ww)x+p%04nuhXKbO0O-}5&Pdd=$u6tuyqpJVs5RW45T z`-ghb^o|=65<^E%OrE94JKKk*4kp8zhEkAnJ+_z<`St^Yg>G|zb{P;<5%e`plG$ki z;{!)`WzQ8qd8BI9m+eZ33~R%7yW2PJo;u`b98FN6YQm;q8m(O=VZe|-z~X=P&uK+< zjHk)55qjp1q`q3}2ZkN<7a}aV+IGDN&lIVH_RN3L=^60#%M)G%+dSjelL+E37(Q&cdtd)6upuOAmis)VKXexOPgFDUn&N))H zqB=faL1@A(oc@G5@zj)3sPEpvA(|J3GxYdOY-qmj-#XGrtC*?SN{qN^hEUdac7zEp z9=L~==(9nJEvX`d<*{@62Ma}USvI^*od~xDTQN>zRDbk5C-Bw(Y|+32cwxZ zM*7VcC+}A}E)5t#cvL-16eygtYLTiSlN>Xo^Rr&a>1{39eMflRk@)?H=`gH#HYNC4cQv52lf9tsAw!w+B@RgNQU75mg1Q9sjQexX zl?s{7O$0u!VX!%m4Jb>sQX5c_(&Q1z0!p{JG0^oW9Qba_6;Q0kA$Fp{yY5cIUcQQ8 zRnh+_L7I-=WmbkdPJyQc^YLgD!fR2M$^6!PvFM7E9ivo2V#$_u?S{V);hH@!1@K2 z72fNUQr3xV8dcrqY~+2dSD%)+Mn{iY>T)i?;>I&XgZUK@*?@oxg#0@d zt+#iAGCFDNGB*0^=I1cSbNqp!R5rVGQ%@`o3X(5_x@>h zbwqSo)S(y<+u%3cdD2UL$yqMcq=&NkG&)kdT!0xE2(3WKMmsEC%L(;&`xLBX6j+yQ zmCX$H3VF(KpCMW@mUVI7wk~ekm<*~t=dE@=jZRY{64IYoPET!t9})2n{wGh!Z_;~yn}hRDT`w_|e(R&*{W@xz=kF}9 z%2})!_idWMZ>;iPA#)dcYTCuu*A7!fJNV4`BV7(aw^gU+%Wd4pTwd?e;*;u59B}62DOX@U@RZDweWah$g*IrX7YD$yQE@hLa_rlYF&_)xp_g39{&D`A(qP#{iS0r%SAfAH!2UKCumNm2Gejpl-CPQd!~&S8Lvg zQQe46KJy~}y_1f*N({C%gkruzT9=qf9=Bjy=$da2dgiX6*$&H^oJY`nK_mfXGh?5K zcBnT5oM6D;0e69Bi~@8GHgS={E)WFmf%)Vk6BZrty@!UDs+%Ie?Un^7dD$@%P8H@( z&a(t<`8I}-)ls?eJ-o!anJ1W>G;wQ7toh>&gv7DOQXl>=C2%`kV+Dk>Nh8p(*m@RJycroF|`7645Z22 zK@@CB6&D*U_@pf&%=}hUn25s|6D|`@MjIX^>&4l7a)4ccjEgJ4r0`8`qIIsTEnzJv zMa<#yOpqM?bVgcL(cYBr!E<`<3#2jJp6MGCj2eQgb)0P%oVQLj#VoFURHNcBvl+?H z76dJ!DHP-=kf7U=KjPb7+(Z8dxwzQ%_)a1Nqg)$q{POW-6r+}ii=IH~;TRu~Un!jh z4!68%OLR~`7i)eH6T~Z*max_fl?gS@qw`JWkHb;v8r=Z3NWM>zHnKYUbq`@fD-)Qc zl?wTPW|0HeEI%HhO&bRd&S*4wk8$*-Q=I>)ZU~SbIE7n2 zw-7u5y@RyqSL(!fFP$%@=S=_6VVUiR954ZLyKc!^l=A?!_tPu8b|gj%LEZ}eWJ}U) zP1RpmzHWxc8}iO->t(ZW`GnJGDd%Fn8cIWg0`S;6ka2MqqrN-r@LPX$Y3KJ)RNHK# z@}&+~odg9x+%n;Q4&}FrligVD|_b|+qWrOA0+~oI#^sTCF8pz!PFHG z&Gc!*sHD!&^y80jmr#FEjVKG<|I^R8;fdL}p6n>wo}-OedSY(H2h5^Ap_9RzjZba`*+}R{h3;SZ z9f6*aR2^MKo}`-A?6dq3bBt)wxkL&A)IUb6(u&r~h~E|PpCW?4Vxh2_$N_;LNTay6 zMcYLf+-975fKjf;Jzl5s7Qr8MzA65IlEFFvza!oXVLO7(F@6sUL-lZ{j!1qu2=$FHyK&;<89WVWj%`{!(d3MhOC;OW>C$LWKv4O=NaA5?#p zYsAlm!MI#RN5dVAJ?A}z*2MRcXt+*I+S+0`SQ-k^G}3tLQEiOEcXd$Nt8EY|GAuTU zr64`Z2A2EO)cV)UHY&KR_{smX_zJ)%k)bQU&op zBqW#9lrKbX*Chyh@8QqXg1VmB(!7XY9RvwSr*6l}1C$KM$38;iSI_rAy8uZPXGdb| zAC4oNl*J}AHx}ctm{+yEY4W02R`kx^>)c4Ycv;**v<`4v?R~^Co%#79X;s3nszW~o zUk=vaLe!ZCa|rAC66EWd>y~wFMvNyG)3%zTP00by0_0Gfd8&`g+_Xln2_V&|VqBFzOP1c<#dNKM7_$X*_W6up%V=wW81ck#@ z2xL%Pj0YPQNEdtP>&1t{?M+uy4D8D#c84@Wli>g29DDUV$LgMcL)zY%aV9{Mk+q(v z3f=4b+muG6C8o|oUKVy1E+j}pxTFa$q8C8wu{5heu5Fp{e@v7Bjwezf#nJsM$TUFND|bj(GS%NVqtBb@pNKH&#ze9yirb?j&Q6iGzZ>%>S~U$Rnmxl=QxoCr zubikI7;+#6!7)vhwqWTok|R3N^v8j2n5K|12Ef+X(vuN}Jgzc{+Lbq>)z=D1iZw00eyN zsa^s3U#obu;3_9?R0EW=QV4Tcs*J5brSRzoY*#1eAbaYq{BH|bnwmbZ;_wmtVN0}H zcFNXB5A!>d@@O&n3FgNnf&k1a0&7MMYs&)o*?LM~i3|`vq0xTZBt03e3s%Klq2KOW zB)nRMGCkn<4|bHaMX;GFrti(JgRy3yfELcl@Y^u1^cy}}ePOyX21xwG6*T0CF^;VE zrKnuv^(iWN2Q=IfLHMgse6KqIaA9LWG0f@O?B3|ExBo0Hl%=4~jd5vbzvw?grpgv6 zUByGO-lPNU69-ujIOx2%>3e$@X8ds@d=^n6rc9{f=S&HzjQ*{@xopH`STq)2Dy9%USX00@2->2Epo#S^lrn22 zd=Vx+*i;}p!t)39bBgxhZUySMX!x}ViP|8LF3)O+Zi2!FO{1+|q?IFQkjCNx@ z!qwV#RU|@w1>T4`-hU}&o5J-OXnX^iKBhJpDlYhSlT>+v8Tj|ZLCh{Eb>PM8ovfs*a!D^Kdr%+Sbc034O_&n(Jg~qq-GXpjN3eZ z(SDp{J$JsP27Rfe@X70SdTKS3{iwV0IlKS7#i7#LzUGKch;lTI@&{3op;_2WckP!F zIdcV|5CF!3#EHNsm2VxkN(%yJj%~;l!gsD&H1`XFX$y{;-j>D}%O8 z7EJs3V-X$q()4Xgw6e7%shTPcj~SO2ET6I3U~>TII2~{}FZ8@q1APLU6|qi#6A!2C z#o|JbLj=)4{7?_ILizIGSV;MEWZSzoJN`K{R}i4&3+7ZTsQ+UzRIZ=TA`p#R8rjt* z6E{{+LDvUArDX5@{te}_7of>N>IB=V?_JE~2_tiY00q8HvbK!c)_uZ{S!L_m|D^~v;uQ$suj3~d^z-oj#PURg0f!%JNTz0Or7d&`rLW2 z21$@w#G{e$O?-+uq@SaEe!H}ESx02AWZ2gu$#bozlwu$zgs$h8WQWAE>KD;Zun zjU(yS#D+sYw+xhx+j?y<{nU*71FqJeVvTB@HpH$~-S^+0r0H2iX6dk>5H3EqN15Qp zz*il+l;%kLfoT;37<$sHlwL@%yh+MNzN6B!I&n4qS@V(dU#}d&e=B-8vSPn2qC(THbi{zR3jiW} z?g*2Bjv$!Ez=maZ9F1R3n#@45y*^6$O}#5?C7*OJMj>uS&Q`BJ)+vD4Jv?!!RhXWXm&Rp_q4n{&n;X-YmE3&Ks z+RKpd+fMv}?GO^X;XJuZM|=78w}mp3t_xHJ0yAVPqR$w>Nqd3bMV~iV;^%M_jg>0( zv^9k%xkk*(cXoLs;N=96XW^;V{l@f4SK(C;s-30K7+Kk^5jNC4 zpadNi%Lp4qxbn&?hCJ<#xFYOGBxrx^h$o0rNc@f$lI4$+Mh$Dq~(anco6 z+G=qp&imGff^470h3rE~Z@SwU%0CARzo@bD2pWnGfLs7E7}6`oF{B+m@{~-?ZJYIl zBUs=Tb(myv&JcFDwb&#<{LOaMF_K<*@Di}jzsk3 z9#qX|7g%QKEQ~;ggZ3V5tAVER0Z(?hgOp_M*A5_2>y-k#hcORj;5mH12mPFghJM|( z8L{*_w0EtmVXJCog=>dc^B$`_;!*e-v8xDIFm&+tAbK4cVQ82(hW`-OGY(-SSNnM# zND4%;00|h~vwmz0*w>LFOXP0BpHg_uHlm~LVId7#+EXTN$)u#xDeoHb{yf(&EC!jL z11;ut=KoM$uIWB2!c0^v=w3j$4tR(PH#^sP%V?`J#VDwuMX4qLvj~X4=r-;EDKdyD z;L#GLODLrhpPC*NyO?J59lQNewh7g`a-{@0;Kw>1kJ<0eWvzXZq+ApL?6YfOc*exnB8&xJ$+dh`6QSwP=I z{O<*t8h+2c8bXujH34mPusIf9&4Kylp$AB&p2K;nd6}s&`Nw)jXwE+j0!Q!qu&~#B zLJ)6!tX(BF6MKMY0ofORUw6NZ&8z(l{-iLBbvUz-Fy>9vD_g}NB|>o<|9s-(?x+q{ zITE_k5y$Xp`=F4!UG=}-kXBEWl80n?`Gde|${m*1?|&5B9cyap+8*E1NcR=t!vc)9 z4?y>QNKW0d@>RD%(qQYqS{@lSY5%?>fq+yPvj`3bszAt-+f;mh73EWXXqJl9>z4CJuuP}W?@UZ}vuID@c-D0AY#b|LV1&!!fo0b zYpmZ(H8My6iLMgXf6pasq^psAcFEB@R1Y?p|VfW)%(8Yb=K~ zvCj{`o8#}R3CKPqX0(C;p7Sgn<2IWh{s*rL53ga+@46O9ifzT#x@TvIi{w97(U=9l zfTPn6IKu|X;@g}r+gF{68Dq6ryvwnpV7wN3%JPzhT4E9yX=S;Z^bbK1Hq#S05y@M4r zO=_{?ndonXt1a_C6M6Oxj^ucoW0NMSsu#Gn{u{MU{J6Aa5D0II`}5M$-C}KS?)sk0 ze=r?>R$$i?6FhE^nn;;bU-`R*m_7n-^BA}&0|^=a{XeDZsyWHCV2_=jiApf&H+QG~ z!50HP2Yy@H!|)OYER?~Q5&W(w61pSA!gUZLCLOjsa`i`-u3C19N)I2kfy0fwpe&gu zq)L>-{Zd+2Tq>`^rPO8jLo_>-3ZGwH7i z86(J51MnlC0i)w>lpS}YSS&?j53_kIy```S4z7?*d&{$o(48Iy9X0`d+ClC2FGSeD zN!`$n51`GZv`8BMSS-<06r$lmzqo$2C&N6LCGDhBfK}Wi^m3GNodRxF0lWqT!0_N> z_UD`nV}9SQyWtp+seR*gQt5t5f;+wW?L(ZJs}nLHSv1X#@obrHGvx6c$E2tq7Hj(28TAn{C0K zd$6&^nnXwJBWz)8|FL;dO8ccaTrPhuZx_A3wm;s8xez|SBa$>HtQUCfxjp071xFJs zMlPMKAx~IbU-r|VX{q|bUyi~a!PYEXXmg+=DR%dz>z;f_v(GknY(0_o7oiX1qATLd zi!mVDK<lK!-3VanNJ0Om zUcXZ`SITe%#YpZH&h+Hr_U?CydA^NbN-LI|)p(}vfJ5et9l#m&`{;O^Vwu0mPk~#R zDCs4WNTv$2(lg-XSuNG`J^ui1|A)Ct&n`e-f!vLN0^6O(+^+e0r60Oh5c|kWX~Z>) z2uhcq>XpwdJ z)YCPAZ9@JF$xLXNSjm6#bF;~dWkC9{R_PMIcnu=OzGp#$|Mo)O2!dGhj8O4^Z4i*8 z5hfgT1xl!_Ih4VKb%TqDnAf`L_^Kzq?qXla*cSyVU&Dc0>eM^81!6y_SZ{k&r`vpw z%Gp&J^sv%72RRX^UyCcNd`CIcCQflJStt15CL*S3T*tCE;-Tdt#DYWh03JdLCX+6E z4H|_hvdV#pi&9&6ux+?k07@-VqoYrTo&AyBx@VAgAJD*=jQ#ef^~U@w)EH2s59DwJ zw0o~G7e}-4kh0sdTvmI`m-_@O?KG#9U`?FPth-lQP8W)ARh{-I=LUC#SIt`&ep`x{>rwZ;Ye?+qU6 zl)94!@{QI#1!X;Wl3{C=ezoGFG6Shbbdh3zCo@*se}~yKz$0-~H~0nOyVb^A3wgm1ZA~3vOWVGN#rLfcsLwWaBmpE%5mLGx6Cmq&&}qfytzXUpWg@0>SKT(l_ij9hLa=i{1{dIG&@Ii zNutkji>cJaFBC2k-cTFcic+M{kS;L1)?*qYsa5^FSOmXq+&_8BMA~L$32^iyctFTt zGuu$7ziKN~o=^EiAM6DGAINvWK=ybQ$vtEukYOtg_NL!T@hYg+$L^`}pEK%P)O63r zX-E92MwvzbWfwPIOOIq1(OK&QuLk}ej!!J-sr0uZxcnj7%V`LazobTBShIzY>El81 zzyzqzK)^>3qn8cnSO0)8?K$bp+;Uch9|nT_*Mx?neph93?UnDL z} z$eyrS2N?|8G!tS$*xQo!jXB^4AIJic#SgPW(auFhchn1A5BDf5k`9L3RBK{K`(?~7 ztp_)d%z{py#7F^xCP`gPL>9PCQF!TRqVLq1)B~F@EamR0wAm=Mj||0_AGeQ+(KYbQ z=L!%-Al*ZfU_QS?=1$}Ll5i2hXxo%)ol3;%FMmBq%}UreOQ~chj1elC8}ESO?bY|_ z3(UvFO^qAq056|7gp-)xfF{3svF6934_|n`3-JY+wv%Q9)CoYB4FM(1HM238C<6R7 zKk*~Lf>hkL|&F4tJ=%%V*;}K}s5wIr_=_Box@ncEc^6 ze{!e80W=%}KwDJclLr2L(!CYDOC66Q-Pj@>aKc*TYE1fyPITHrytN{$|J=v>w_ym4 zgo(pEgSFF-<}z5)57&2$>;B7S{pIa%Z9BhE`YJ9V=DcS?M$m!_&~OHzy%(bocD-1M zSGkzrnh3~!_b@MYw-d%m53}_*^h_-f5FA97uvB>OKP`9}Byjd0nR4gUkeI7InNm~emG;Lr64l-b2;eeg_s`#afik!#3bTJr8kv-g(N^XrjdQj)AFs4oKx3ocrv$7x0d0Y1Zoyubz&Mp1Ef{ zDozn9$KiEP5zCY0f4FU?(gG<6eaW1cunOQJO{qafyl;B#XaM;r`X^$f1dP5u0W@i z0GXlmx!3vaYh){+YbyJ~!L0G*h4UeB{s0CU$~d9M;5jf?{qC9OeR-lQ$Voruu~~}! zEMutzE2bl)rchvPpJQMql7U1>oa_0SwVGDPwEJOW{}>o(6Tn+fl!g$jN$uM0+H9I~ z>$z{e9qzhna2M>AOw5#|YKZCMEfv>jY2*U+6dxp!qieBqp$6CAq7+_jn*6k*pi*kJ zBaQDRJ~=-}glAmRb9&+(N`TRD1-uvfhy2+%vi;)@jx{!us;5W|sRp9nZSPxomc~0c z1bv3%tbnYVc|XfNsC%fM{=QX2fJJ1+haPMo5+72Kz(ThIxFIqf2pH=WQj9_JdG@nz|XK=|nkt7A;qE-p(#sGtH`-RIyPaz7Dsr#yB+fUIiU z5`m~r#8o5Yc<5X!zNn@z5jaWesbc_i3(<`*D3) z2Unl&Z_%Rg`Px5mO?;0m=$sdvl|=ym5I}H+zt**@B!2GBGnVwBO-VSB3Ug z5LNGPeHK{hJ{>~bX26rvX*KzJUfJS%pBU?Ew2mc>x8?cfna&BVQ{1TrZGna2aO;5U zVJtr^>TQTAwjFe&z@!}c)(4j`NDX_5Lf#Ocri-;rvN-Mj1mWWz`$=Lv4v#pw?o2Wo z>U$_oOXS}vb^Qirvs6oBYv{Sn(7$zeDOVVG>NR-nDFLXcG+!XVB22w)!I=f=2kT)n zT;~CT;teZIK@gAL^I=Z$Ze`LOYwieUp5bw)?~^m^$Qo;tO+MvZ{7%+~&eweFc-Dv@ z5u6oEE}dblIw-jC_oY8F^%q3zn=qnGj^kQK*n^}AC zTAW}z1sq4v>RT(kBYBs2J&;sV0c~Rg5{;VxX20iN8;dAs_ix<2u4?~8fg{XC)h_UJL7L?*1p>gIUzTB66#S1)mFu9*q4ZqjauY4qVTkW|KFt=2@C>%7s z#b&~v=F@$N;K?z_Q9;t@j{P@@D^aUwpG&7F=H2(Xprk`#_d5^ef;i6e0NDV9Ue4D?)&SpPL zNUN`$^K+|b;C~#VD>w%=h0if$EQFult0(71RQ8z#?mOVse3pM}g{b z{=8l}IUm>f?QzW&DR~RSzCJa~MH5|0Q20j+DQ-~r+(gwDvD5ZcMFR!HB{=bCkyjIR ztmMNayxzIRRB!}91%S{Dx#DRr4r6+^u=SY^Jfr?wYJYM96etz&cBJ@+7_yKDI_o{P zar!X(B9o^AH3WQrQjG3B5ceK;GA%FkF?(G1%aUR1 z&g01>DWnWxt7b$jlInE->>W_?n50UTsKMA={XL&^0+d4mF&Huw!?V&BYlDhn5X2B_Y#Du|QdOFIXqo?_%DTr{QsGhyJsm=T&d;`q9N%*= zE0Pg53mEHW;JfFH=wf%GpF%ZB^V_y)76xWp$<@#Wb0+UFp>L8LnQtf&d&Wz&}P|$L#wiOYX!Jia@!<@L(NDNM@SI817&!9KJKZ8M3tVtknxqm?t7GT$A7Zid0w>uv;Ezh#re5b87M=adStT)q+;8qU zp0Ypk3|r$;k9?U;?vg9D=AF282O2US5CK0ri(Y>JCBZ)p5+L#E{N zlmM7Fb)sR{B)xZkdnt>T4-g^qs3+S+Gib$+Y%LI^1-^2wCJ?%X`4C|UW6pT#%^aBL zh5#bM?>T1FA{y41fAaDX$my6;g4q)Rhbcfd#dR`~0nF5w&RAfozPByz#OEx`C;IBI zs#})~sS$Df`0!l6MP_9a}*iGA$$DT9=S3skcfn9IC)C{JJiKHdByq$9w8jSI!yiah>r_ z;d=MFkUw)Guoe6ac^Lgpz2R+|2pmcuz?NE*Y}=F@y(fNgXk}t)_6PoT8HEz#G^1L| z_l!cx(@E4gy9(Sm79zo9{)RJn_2((Uic}uTDXX{05M((zJ84qy^(3T@N&EJ#b`0j9 z7O}x1sF}4uw-W#XX}!LvyNq%>39}`4DhV1!grVDd(m zF)WS$lva4Bbt;qq){*6Dg^T@c-(p>WvcitVY2a2 z7_?5b{>4b!X%Xwk8h;sC&6%+NIV0`=c?*#d4tkWw4eW~ygiZ`{9CEh&21Dq$oT$(0B9%sbT7xX8+h}^+u4MdO$p{4O z&ST*`lxDOid){Hi8I3j#N53DY3=e318sL0#r%?DvSfCYwsgS}Vi~q-2ys2J%RU|=M zw73dx3pRW#eKpu!L)iu+(b^k&38uZksPI^^2V&{Hh@hX#xd1vG8uJThZl-Zi{`{V^ zoI0Jrbd5UV4K!S6AK!3ks$gcRuu&-Qo)ql+5*U<nV2%|{t*uI~AhiR|e z*-^4NtmJa6^EXQI1_D9&6WJys4BCH8E6^X!C_P#dF9`r+3gl1tb3_Mr1s7dz(cKw6 z2!+S*hTAj2Ct`z)%#x+l+use5v`s6w@v@@IX=CChc?XUK9R<-=>9V&@fR;d=`VCn9 zC{&@R!5Fk;A;ouJY ze<>y^d0P6(z&rD*a}#G&|ITeAl(N71-WZY zaym&Y;>}ZG8UjppAc7)@(Kr|JH#53a9aamR9U+(*JEi5pHo*w7tmyZnx9kUGm|@aQ1hv@QP~Xe|=4PTj&(LLK5ah*q_)>wRCEE3lks2VqCig<4$o#VI^H{q*8E+eTd7ij&cv z7AoIW`0jIScp6nsKZU~y9Rul6q6#!_2e>m*7uMu5ZAN|w?ieyXik){I7k$>K?O@I_ z+c4b#oa$e!uXcmJ$uOs|MDg2Z=|q_3;~365QB)lH<8{ zE?b5X(+5umJ|zMID1rzco+t^YsB-W#277f&qj1?khT3to@s6nB;mXT}ex*c2+tHq^ zKMz91bYSe2LU%`Dln>{5)KlsG0s|-fNd(hZRmEkv_CWFBT;EUi1V-;_r7g_A=L@*; z0uU}z0D%vetkS$6lIhSXW!MQnoaJyvsb3(t*z?Y%df5G@=8yk!wG=p!Ltq`O`HvFm zrkwjjOv1G=+7ldpCxGJ{IugixN8RFRiphQ2H^xAuoA~wEl_xmAC)mH{cbP6zFPv)9 zgBLI^%8qSXX0$Uq{S?vrlavD`a5rVLHLHgKR38n1bp;5a5O;y1kHx``2~s7X(u;0-@hK9EJyDsq630-P4d0N=05 zEptFbCmJeo|5^)iV4&{O+Y(SwZz6#2dn`m_s+!&HVZ6ez^GlIO5N&S#Wh*-&j=8E- z|2+Twk5nH_#cc>385cx}Y-M}rv1xMjeRz{k}RrjOnU4&+7@D~NyDC{sG zilB52Q@-c*s?@HO)%0faN#>j)-wrdhwCIH?X{FnLd+M_7(Oh?tbA){B@VW49XU9BFi@x(l?UgpGy61}TEZqS@o;Ws$_Z z-CgX*AC{QrG2_-Y=Kz8|)RI^km5EzN*L>#1at1QWlVtHxd-Pz#(f=t5Appl&;FBZ3 zmz(fd944Q7FrM;;dVkPnX=&?+N?Jt zPc$5tK0MxBSGA;&GqT~Gw3Wa7GGi&^VF_prf|V*2(Ls%h@|Ei;d<`x3<*OSmFdZ zN-_|0DGE@M&Nbd=DLgHDw_j6#cS4`WB9o6AKJY-N-Ktc8*{0P?aSs1PRjqV(hSaZZbA6SeQlXo+qLatfMGQkmVphhTsrI;?d+#zZ)7H6C%=B_J)E7rU zO7}s~UES9|?w|{(#~Xu~;6r%Q#9+4(Pw2>)7h?lxD3C)Ti>ON#&Y%^XweLM|)pN~T z-A|kXnuUkgaQTbZ<&v8?dr!W zi?*?G3nge3K3k~lek?xLA@==`|6_O#@ElCn+IrOja@#`^C#N|Kqu7OSp697{`EIi4 zq;IFnGl!<(wArj*_|bMcd*GE@6kCn0<6mzQ^2WFzdioG6vP4Rv9NStNV|1yn@7;BxfC~&SFsEV4DJ8S1zi- zkVZjV9zOenELbmf((S$)DH+O`j5&-Z)7XD-(WG{Ih2y=8MZp5}7D%q>^TmhY7)&yJ z)g2K;p)eK#+iyiLprQf1{rMDRzz8j??XI`BCO;hx)yo`Cr<7$G8_dL5L?o)`L}M~9 z;JFUljC5@Ca9A1+@a0GQ^9Ki-Scb510S2&C0MQkL1e4GFqjn9I9L=Qwi0r%}M)@fD z02)8uWRQxJN{L`?br~xH`~syHB@OQLY}UMEWcQ3Wxb3l*Gd&fWpN7`0h(C%9??)ep zCaGFpR0~*9WwNcALKq+cfar?82(sTi&$ue6dheFc`^TTgbWK0sO|DI251y<{@0)1` z7+{iMZHt*GJ6YT_bu+L9xXrQKO=y0;bZKadA*W=N{aYS53Pjna#Ve!!Ng*G}{|ls~ zviuYtc(DtlSNJnH_3<~cRckf7DbUAt@F()FJzYf_UPN>fU&W2MQF9+9**{1|@teX{ zc9=>=^v8yN6&oB^nN|cPE7=Ur1r`HdfW0xyS%RzjElJ>6sYT0COUT2Y{Rz$dpn);x zUaYSzv#-i{DiyzQCrj?A${9DZ4JScWB`%##KZ-?!8fokS{Nn;i7yb+1##$_*jM6@0 z2ttEDAfvIk5*tw={&EHuJp3d@%Ul-D=tk(_` zNq^RCJ9AF9=a>Ud{;r955|m`2-VIDGSAc1$9==oodIf(GCpwl&rm3<=6UE&PqR|Wc zWa>x@gdPFS*zVb62+WhFfo)eX)1?q%>S%c9IH*~M-pvivLi*9lGyHO*weqf`UH2cW zG*o2i5UYTy+yGzX2!QeLE{>Za)taUG9VAJPx2zItipe%V)Ct{5UbydBXLim{gzp`- z-u@V99faS72^c?%aX3OS5U?q58eI^O*$E*A#`2cIVNDT^TOjLX4Ls-bPu-QQw)n0c z3u{_@kN0NWesndsLumE~dnk>i2!$%fC8WISv`2jOlhyWslLaPW4&Zl{LYah2c3Mki zLEls7W>!) zCtiXx?>)iM{-srv4Q0|meGBp|%4|l{0(%;g&{45TC}=qBQ}UF5mNi}jR>z^zAhEA*L6ySp#sr3xB6^LWvKwEYY(Pra92k(M>__~+Trp0mF9y84(Dz(O7^Titb$?YA4d6S@`jz}R@H|fC z7Xo9CH{#|NrjY6fsB2N!a8cZ**{0t19PKwpe0(cyDIdZR!9N}el5I>iYiK`n=|_mz7&LnV~{B%QK{2_pnj%}k9w zo`=xgRgz9weP&N~S%)NXfT<{#PA^k5?C~#GLWY|${2~5!kCUx_A&MN2-hbAa%Khb* z84Y~)0)$}<5;@6A83&5#)o9Q_zMMDRlhYy=yanE6POo&99qlX$Q?yflS@PjsG&yr? z#C2pf&ur9mCbn{V$#RKB)%7IqQwpngYyG`*tT)b`|J$d|Y?K%p3baiJkT$8Ud&kW8 z7!WVg-p#h)E-^(e*fco-mX%FHnOzMwu zsezSQngD3mSRy>{D>B#iQyGz>udaV&u^~X)LIA%RDZ&;lbrcusp*Cds+9_~$Mn)f{ z=CYeo@HNoEqHKnQ?E3#WJ@j7-fN;hM$EN?^{fX%p<#{- zH9*M+GBF03%4sli%gkzaqN*3d-|ysqW_V z#aUWB2XUq_==1^s`jk`d`l#of9rX(c2DOj>hIQn3th+hI%^_}OJU9z!p26UOL(~kA zTMWlAK15OdzYvR7>N&x*>%Kx=hfN|U6}gVSI7%>-M6nkGxgnw=b+3J}pFJ456N5TQmToe@*qu@nTN0}T19&&P@q?l4KMER{0RJmM28KTuqHX2^5`K=5 zNXh(e+7C}b!D)+-^j^0c0K=cPh|%KtvNd3PHr(47;uC#yib33x*x9hXb`JL2iDG_9j+!`jW=s2ybbhW9_2 z7tnwnR{{SMFr>x*(W*PdI~K0eHQ>>rgWI@23U`XB7nb@|#m%>=VHRoUV8=v=zy>z| zz5;0{6E@Yy&g@I%y9t{q*0f!s%(>u+DDgeZmS#i3PxX2gN{#o65SPj&&4}Y8x4-fG zix>hk#=-|jLk?h-2iT@p9<8!zkrIP!P1A+}CWmqVfZY#YY$DhPTV=nK^ zwuCTea)$YXVb^)a;8HrgibeGGaUrVyp6@(g>5%|u^W#|53zSQ7T{aor8lDdBY>oGt zT7E*gT>LndZ=bL*Iw4f_wetrBBnpspF~l9l(SBFXe#+~DFWbD)9!dAu6b^jtg#TQ$zR)+ zZ+Vs{+{Ons6)@jWnE-Q{wcP=SR*t7!Rt`p^v$HRRkFoNDla|w;X*EmcK0s!=V>nGVZm9I_)~$A z5d&Da9*K=gtHtS@q5FYv4(|Gao6k$%wevrfd<(N zG;_5|9+Fj@yv)4NNYrBESyr$eD(K~8dpKJL9C4WObx3`JiUxI9i$a*uF? zPAD#Xr2M&7r_u|X>Bp|*_z^s_zxelNI*B1@iJkN)&gV{V&%C_b_tAF^C#Q#jvH z8jTssN|yakqxK1{V9A@SWQLf50khm6A61j0`g);k^VavH!XE^fg~-qi1DzOFmlrNb z-0^U5xcwto<;v^!|I@31IEp?|0??hJP|ZmyBpu{1cn62U{r(E#T!c;xbsUFI%g4!{ zPEZgDskQC;I+X2qp~eMLo-G&R>}yXOWZ~#Ip{#mKYvvNMG(*GPD$RXdtOMVYsNEwG2${-C6S87b*Cq7qje#IRAiAQ@*%&9; zro>E}3Cuh!I$tv0A7?(y0!mt8QfViYyO1OMT!sP446osi+>*Kgbc7NsegP3ODUKNL zN!>Ied_#eapUMH#Fo8Q)$u(ZWB^z$nSvF}P3t;j10#`ewzBh&Yk;#ds|kZ!VFIrZ zfbfc*Q0=?X4p269X05q`n(&|5^(|^FBgHlJ+0vO#3ZEP%1O$c;kFtF`_qQwkL*2SZ zn!o0_3~$lAqr=q+tar}PmXho+B1)(FoYl+FIhuA7xuuNofXWF(SCFOFj({?&%%BaE zp8u$L!e`G3%l%ah71E2m=^c|J#c^2)(TF*(9ex!J0!2J+nit{E+EMiT_C9-Uox-%p zNy~iWyLzUaM<_uO$2!&M^8!Jpjh~S`4b9ky*;}PS)oqNxQ<7fRW|8e(iNP&W!#e&=WKS zKtmqEpNT}S_q${h%k0KbrCVZgd>Oe4@%XaE*<3Xg1Ekb8ZL|M=O%%FI?9dMliR~8) z1;iZWe#X*}-eNml9-rv8NxBcgNk_Mb2)y%FGonhar2 zdReHfw&LaF)BQzE?iUcDb)zI!#gJ}#VFy{01lD{2F&FF#`7=inL9PfULPY7*b#==_ z$wLE_ZV-66t%WKTR|=C}O10FiR_mv331&p%XC~k68!7wv+B9!s$Q*4uP65#B1<}rhkqe<169{?+}|s|aUI zDRj6Qhl&R5V}VQzjhg})^5LskqsuSw8Uf=#5|fIz$I0ELa=EI{Wd?b#!0UMaf8?>R z`#=4aN@>y1Bg>N`7Nx!0I;t zcZcGzahFUgFH!JUWG?M3G|+K7faCIVJP&Kc+O>Z^lT@Sb%YAA*Xj+)xB%tFQ6rmn*7NL#6*cwjk2oFJ`=T~* z=nz5zjRyc6$7iB>Z7^&7_FG!@l^;LiZzQ_Z6r!DX`9ImyqVGL(D}A!kYvm49?!yA2 zmp42uA`#=()EPq!*(RzJX3X>p>A$GS^Wd9ymY)O~;gxc@wr1eJYQX_=0_0cp%L~nW zWGg4aD>47-3Y9k|8=fFU()4nl--n3C9_ifxheRTH@I&d8?uljNuW(vy5PqB4wT(;~ z810~wPvBmrB;uo}?TB8XUNK8&)@bfAxguft-*yGSaiL@O!7T%R)mIT8b_cb&t0J$T z&fFmLQWPT?>okxUDz<2m-Umq?Xh&l44GtCY4DjVP1c(abQM2=Zlt`%pK}zC&v=<=^ zeBIE*6mfI5B|yJS{%^Y*;J0cc*Qc>L^^|~;A5A$I0-Na0mLKSM$Gsij5dN61L@d$i z#blRGffw>&$Ln_Ds+~eI&L6jP;?p(-I8@A-d3onvENZPSKhr?H(jwr$&X8r!yQCyi}ejcqqh8a1}_?0vr<-ajyV);V)w z&7L)f1Ia&w9R#e{pZ*qm;%nb$kD)tn7*s_N-CRqcVZJo7UO|tDIAbKO4$;^wC5Htq zZEN?=a}?0j22}3KG9uE$9?iE{f3GI8ulzxNSbBlG1qa6R1aP30mdW4{Go(*~WZ*B; zK=MtiB6Sj3+|>=Wn%hv%D@$9dn~(0~*SY9U%kv&{!(qEY0gb-{{N^W(x8dZ@eY6cW;U<1#HRQ|dXocr}5Zv2K zo07r#lBeZv{%&vrcErc>dFXz}%f#wrIm=_`B`ozZLBh*@YkOHqnDkrHywO12 ztZvV(@FoIyHUMc9EH5x}hri`E@;I(}R_x=_sV^7V&3d1l0#m)&)73cygiqL?`MIN& z0~{>*`c!k?_cnGw+K4fIaiOPR9fTH&S1VsDEWBQKUo*8RmJC@_<@25L_Y714h9mF#AA+ zpHn;~(vBdAx}gaU6%=a>d!50u`5tDv{FPT+_t=%FfFl^QthJ1L??3oDT5C03eDqam-##*CF2^3_~uBMw*#Kx_rY(`nQEu-v~D8ewkLIA7;g=YLiox!vzf zEW$!Ko+nGtnZA#mi$Vn8NDsnVMC2{fQy^@m+a{x5`dM8;err=2xlR~Dam-FZu}qKY zav2|ZnZAxTfQu}UT457PtlHHchH{Y}b=j1t-@ncIsNbppeItRBOAzby%z=54VEY%I zE`nvw0ZSONv&?`)P&zBSNeAYIEgb{RdV5ETxm>T$yla!CeZ3^DA|HEnGR&E_qM zrA&Ye4Mr+{7C7L-59CP<*3d#3rd(@5q>A@?pHGLMAJ6SeT!d%{`E2H(_YD6zk|K_ScR9je=bE-nTWIokP-PaKi%fU*VQWY= z01ycvRbsG9A@7M1YlERh5w_Xdw2{V=6(`k#{^8_>#h*AG zhJUiEpsSiQ(+B3xYQH3?5@S>7m!%UGQ`UdhO@Jo>?qi_^HGVsdn+4Lf!D{%#c-Grd z*5VfB0v^#d=oS$|W>XIg?$>Z}1e+C`jU&P3B1A|=y~ccGSxsjCY_LU-Q{nSo|5$CL z&EC*?c2Qt1QT)QU6O{pP`;>V1gqZBY;dxi& z?PvxAUvaddbkgb5V9Q41wKU4L)|bIg*Q?8R86Q~QKvLS(^bxpvG$&|+MjcqR`yY~G zLGDg_@HyAqTQ?X-_1bD5wJ8NLdGy`fxgmy}Y$5@fRXvgzQR3~~XsgU1pNwKm%wC~RQ zNN-VGQ=8MzC)~@3e&oU6!ReWJH5NoCf_SE?8s{M)W;fpZ^LzU&k(jC+Je?bBKt@O} z7(8ETOf>?pyFi+S451Y#e3I*NPyY7YcbVZA1q8}^?+lc?^;el-Gkhj~Tz$poQD3H$ zaYz?CG1hI$QWPCkGt8!W)*A5E!N1>PgDaEv8$O|!6M$I}fpQ<28SGRdcH& z>$p()8l}LHuqjc56MU^|q((oNfgC3A4TZE1Wew(s9=<(#{wMb)pnoL7VN&8PYH-0q@Edi?}VXZ>z5^Bco%FQ6tGa0#TV!4qdT!mv^?&y2Wr$Hm9G-VD>GTN6u-P)i~pHkcbB zw6nh&u*I8tE5{;dw6KBWZ$YjBL$S+p51)A$@fj#}Oghol-U_1>xjn?^T3oWi-i_|z{0CBWg3dgyeJ*~XxdhNOHsD~QyYN3}?SryN zd=~Ch6>YbsKJ!+C#d3Vq9Iw@wO>-iUh%syK;k?(1+mt&Ax=BF&3sKnV4C%DtgM==L z(a^NappD1U1rwJ6KLlmC;jUP42v})=ssFTq{Gd<-vtap-QB0rCk(}+NnIDAUizFQ= z&9uXWnQQ%B5nGtYYPY1zLP+hY!=N{8L>!e6$2s0OTRIAv^I9i^s z`U!wZBWFnZZ&e!j*#QtzQJ+U_k+(s^!G@iKtmui2d{boo*dJzF4L+u}NOre?lUMou z6W`mJeo-Xs=n@~@LCU;nK*_`(S4-M2k15Tsc8+X70m_=_e8mk)7dfgod)a!{*}5{ccS6($#gt`YAHVgTILo6mu$uTxD#SZItgK zXw*77PN;jrZ;g^EyY$jsaS)IzUx4!V`Qr(-6GCPaRz&f63~+=35fxG~X$Ludv)d#j zC994L*fDkVKgdnm(MGMiTrF}3F8Yl5o zFPuD7xz2mui$FDDP?xXk-;rN0Uu2S~jA{m|?gMCVPsw&>Nrknm(sWN6?c9z=q9J$0_OA6i*1$9x z!dJ!OQR3|3^ceQ8!^HA+l~kgj-FGh8yK{2vVP4pjs#xTc8+1IP3DedhF`whjgZ2`r zC8C%MzXQc74p^(XYm2tlpfp1?Ya1tgI@@$argN8(uJl8}uijS~vqTHdgkqRk+Bfq0 zgi^w3h9=%a$7MmYjwZR2L`MyCp5BT;7a?GGXp!^dU*ml5< zi2vKe)DnAJqVSp_x*w&n>U6v@lc?BCpke|?iA&V_!7tiwaWc4X=lQ9^j_|m%q3SF} zHVU@hMxXVDc{jexLYym^2T81ZukJ;pm-#>>V5pJ4zXO<&Q-G?r94@E@CgCnkw>Nzu zRB{*0MLSH#0Wq@H?@L|+kI*BU3XFn9M?*YkCK=&NluiSzQW7-fj;rPO=)-<+Nz9o0 zQ>Eg-&obI?Z+=~^$$_E&dy2z}&zF_vXL%z1f)%8DkX+L-t2U0Uz8{ zUN`6J8}g9ay@#8S4TsX4tz5U^e-57yltF%+6$OsSv#@Zi9#iypEVe=sC^QE^EbJQc#XJf8oA;(l2Z@tw_Cag&UY~6Iz;{mQf`?jkcBRacm+#kiLFm6Aooz(J?fNAYTESg zVyFcyR3M=tBbK9wx<8I&R)Xgahi{&93148F-;2!Dj}KqaLLR-O&;=Gs@z$UclKyPZEVx-c)O9H-xGSGdj zoUP=EPJ@Z>3aV5n9sDr@QOZJ~KQc3lG)pbNw`NUd)L1+lAqQs5z4 z(#Ep7k(?0hoEH(zL%4MwoYlO}bW}l$V}{^ic3Q zMp1h_70SDou@(9^TkY9+DLjD03uv!apkni$~BQrH6#F?ZA1jjlR zA&5@=9kSE>g^j$lp}2ot|MvskK>vTZxFq>W zRmmlV%$GV%9o|9OGyX z!oUif<7)Acw@ww|gXV}DOs2Bf%VElv|*D-ni11j!<$2MJW&?!*?&5sl-| zv1{ZJY4yj+U&V%u|8wRL@VGH6fZ3CWz3Gwb_f%1*X&c`d|HUkan6tOIZJ|F9s zG9x<%<|?@@N^yK>AYS&zn%|7`DxT;Y9g zv@FuW`NJZv%|u;-#Dup=iS3_V9cQ(tuilsuwl-7m zH;l)3!yDDm!Erht+iM+w|K7v?gFtAJpgVK#95_9vtkYi#Irr;MUwgU*@mdRmph}Ps{r3u{jSP!gpElLk`@xHxLjPtZYlM$)@ZA7Aue! z!9Zzm6dqnGq$?ZR98&y&OQ}Y3{+iYTkDrFZeWSv#f8i@%U(i#d5zYH}`kMe1xlbAT zs9uzo1iu9yP2O3)Z&S6^yooxnj#e-(ok5z)5@#ff)CfY925{_vO9J9)@|M?f*R=ik zV8SFV{{2e$n1=SL39n+`XT0R!auMc(am|m|OzZppvLbLWytuQAdK2E>)?bQA+3nFt z$@so#ZOeA=<`^+Qt=P$FmpWZe?Q!0%9qoW2(ghql2>P@msCapy?ZueqNN^I2P3HfI z@2MV=wv-`H`BIYqipt5f`}(d01ff?RE~hrbfM~fhVh%kn>}F5FU?M3a2`tFQKlaN8 zt|SkKSEcK^<)Sk=$pMW!09;S5-bU0LZJT&hBdVa>;r@Q`6LPi`gxmHl_qBW&vf_XM;<0h3d;{w&XZJTE7j0#G_dj zaJ>Rj9Wowz48ZOPaN#I3KG6_sT9TM$xD(4#2?Jl$3mI{EoR^0A4TK5}6WxZ5jr0X+ z*o|#8rLsDIzn@2(6@N%oP&T1j_j z`}my#^GSBz9xB-qL8w8ZkHmFKi~}x^-}&ic*yR$1TdAphiGbw^Ag>`idD?xuf1v`r zot=!2sfuMmdFxh$0?THu1N(ufXk>}&9{xJ`*@(8GyB`1Bj~Vg3N#XrpkuB~85r(wT_4x@=9dU8>+_|M(Uwg3M-s)OKkxrmIBvnE z?u=#i!!h5E`kj0QTtu}~=zR?d%z$H^Jt5lq!^hMN{`@1StB-;0Q&Ud_X8ZD&l^a-z z2J#v*9=vEo_2QLSmcIG0F7$Q%<_0`b4f!5>iF8T(jxxP|E_+1%eakx+uiz`L6&f z{o=doz4=|{r-T94a$Lm~S6*$U7qA9Jal|2#ouh{!(U!1p%h=aYg>xU0mVSP~fsvT+-&8c69nP;9^Wk{)}A@?>AW z8BM@fnR`$R0+uI)A;9NU<5lH9#5W&YFbC+`tIOnFV%Du9p$NhIY#>hUKHFFD3kp^x%{LAh zO&7o`jka|81S%J4A=S2rl4sRZYy?xdVcHl|*&H}yV$>}Jdhw#WJ|UdaHXTuzPDbGd zeDFUu87^K))Mm%g8EhMy!3q4j8ePSXccygdYtwJ_I!0 zY{ehrkd}$YVDPZ~ekELg2N(DY9XSI<2MSS1AcSc*sT3!8u{5Y@tJ5jSK%38OJU(s` z?|>9WNuzYG@*6K(HQk%VuMT4+xec@>I@_yp!ynba_DF~|pe+A*(CU3LRy9RPlxhux zglNqUiy!HSmqkztz1DyX#Q&{m9oxZ32-cj;femM+LTya72Jqqc` zNb*IF${d|r4{9;%RkuMyrxx};S;6j3o|jG0_;PVc71bZ#4=+xT@-@iGUMOWI%*pTE zpT&7!lU^OzdkJJUr0Hk#2)gmAshu_5%2)sVyr*JKneRwk_Nt3C&3p(cQ^~7yzmxls zShM>Y7(!(NvX5BvifWn;qi>YoQ<(lM)+JsuhO)qXwSP*FfJJYMOV{=&+(FymKlA87 z-*cQY8f!SYAb9LRIJeCO(Kv)u-lsrT=65!O)NMmg%!Y>~$^qONt0b}}dpsAMg&1+! zpP??6o!O$%)h*`wAn23kO%_X>ZGFbHFuq`M{PYNt+qO}_+b9s(knvDg!(p+Ta&V7k z>saL(d}dhnG``BtH!W@sUn%uQ6_2gMhB5I*GKatm*lUsj^AFDgUyhC659eF|dFm@VAe;gr*k8^W)Y0q>MGGCaMBs7r zfl^$G;1BhahbN`|6v8G#5BlThmymbqkm!h4Bl4H)PR&m|s*%r=J_~cn`P3Zl;Bl&x zHy`T1`zWL$(0jP+Jm(>ST1 zm0(@IouPjM+$-I-nf?8$F0Mt6uwoxl!g)OT>P;pLZzVq!j1llbAh-=PthEgq51?S_4ZR~BUPg|5OF~BZHAQD2o`(`HT9s~UNoai61 zwoLkiHBX=)9H^!E@YwT0o{DRys_Cd=(XD=Hz22}+5kBp1TRQ0DoV5eSMxk1E?f%7-;H8q!^4L@)VQJjO90KF@g0}3_`H}G0?z!nMw zN7!if5`Yjxrzea#*Jgzb5BTE^;!TRKW&ELx@h*Qv1B}}t3&O+Ws5`wOR(&cvnkC`( zXZQ#R54-zWKV@ZZ0ycYKjT=snAG7K?BN9#xD;R;_pYI6tIv-FjeyXZcVx zm*+5}E{c+`hnwmQsY*-cu5U457Xq>%Mg&Doa3ki^m||&i3l5AQSrEg$dIPIFj%4w!O2hHzQ<5h;{q%qaZ2RPpygR_(zn0Gv~X{ zX+t#E%z;{_R3u;*0`edRIs97Z8UGFmSg}zKe+&P|Os1^hEt)%7eAv!29A6Y%+Bo}( zBE>yU4Ia=V=)}9sL}Na{3~fEGI+Y5_ZnmCgH@a%17+;2=RamKE(bF$|K$mnR7Y>ws z6Ii6?@u<^e3iz5r#;>w{3VpGegu&D)mAFuZc?ILF?&~MYi&khQrQogJT*rGTt-Z>Z zc3BX2{;Y5?^&JcgLsA#%#Et*AC&{+#eAB1He7nRj*4F}Dm)8MnwU?2C_R!5B{dW!9 zB#7VYK4laFc9GvkI{We~xvD_wDGQOVf3A^WMnaSeGHKtPF70Nr{fnC1mN}e*ndy66 zsHs{P>1Qazgyw+Hf#o2d0N z4kF81b!b&(9QEYXI{~UgVFL=(YabPfcs0T8e}2G$Ie;VKv3H~8^fplhmEjunzVxJl z-;F`*eP*XNS#vn!S7MakNL?8AwiZ2#hhJX?epA2tlS`3xo)HkbKCzc)8kJK!$UMd~ z>?9GRCI56BGZ;FXmGX)OMB z==yJnd2iGoiZsrRQgTn|Lm3k_s(e=%PHrav`FBGwD7)H~$4@bDpe%yG-6~y`^qA&! zrBvJ3f9NN;NNYZsv*1RmUU4q{lWJy#&zA+ks;oVx{+;(8CPf_s7zS%)hR?eLt-fdb zxLNlOR=nqWo1yOgHv+pqs?s#D#bceO^tXq)G|Vm~c^8H>=hIZSPK zQ>CbjwsjlaSR8qargC?c*rWyo;(_?=Og<7nOgINoVi*=f&*hum;$$SkhX{;tNp)Vc zVgeG{4-(gOORk&+n*Xd@07KdtXW3wLU+as=w|ePrUup4fEV@(spdWEw<=^t1^L}{a z7jHrHFOnLb6++s|H0g1MU_9f3#r*KwgL*AY4JTyu6Fb7os-tKcp6NfRn_v?t=yJ(C zK;L};A)T&beA|Yeni^gZo4|F3V8u-17Q~1cgkSHniSsrejT>%Yn8%J^JmP(%a5a=J z*iUksf=}ntPk2&Rt`PlV+uMq%9T0c0PS;;`5oD3)Wb}Rcmp91+Oqhg#wJQJU#?ZjF zHHt{1?2(d!YfgiUe+NtUUAY64e5grIOOgsW z6tv*CJ!qrhLmwxozt2h9U=K)fzI+G4{Fd_uOqgPTFcaXaxN@mm0vuPLAQ)VZ5)l*C zr56YqgRP*%^~HIG=5&!8g)GOh?_Oxbq-&o>xtulcdFDUTpm<&$v7?RQ>C%mOJ!G5d zh8(v$CAKIq33HSKO`-TN7mVWGG8eH>Pr)6Af5n-c9! z*_Zt=qvNR!LjRwX;Wt%j;b0MQJCI+lS`DZb-$Zb1XSMZ0y74Ml5XGkqNxY>Ng?NFI zOaZ;-_J&0yS{k^|NsG7YNLuACF%^@|B;cXdJ`*E#T4piU9ymmhY*v(ZZBpN~-+rD& z+xKOvq73Ew!fRlS?;mi(Z&@7{qUo$4Y`4P0MslD#{(R#D8s7y(^R0YTD?QN{-X`rK z*rf`B`-;HMkcL$=*-bA&9%tDs6GmAYO^dmyV-Mp$ABfI@ zajZ~fQJP1i*W*d-f9oyd%$~YD90I^pxd-g&)SrqxcfJ|xuZnX||2_g&`rmPiA*L=7 z%w@5R;8%N$-^s@UWy9cg!v2+Xa?kK~xT&a;ujaV$G4_MO^*7E3CjGHoX3tH!IP2iK z9WZ1iHAyFGA$<;x=Qc8p0X*@hD$INxu?#dybxA`o+<9P8>CDd|NNnB0?Mq`Zax5)Q3GBfU88m5K^3D5UTR=U}q?>6gSgS zk-Dbq3tyRopYjm--;-(r0!1g7V3=IxQOi^{VsmYzm>imt6E=0)u|V_eH<%*>(mdE{ zi@j&Gmn+84ib+iQHxh(1467|H{k{wT*bwsJ@kYzQ5H5}R*{`=rDDXyvi zPKa?F`N>=|UugFE89GDdT&&ulBK%m#o;ko9oeyLDI;FH<}tmX0$ zFRThBLnO>IJEjg7%5UupPipN6Aw)#|k)q$T4JZy`&Gyig00+{J=hM+st`{u-%n5^AsRKNn0pCKs+!Jmg z695Eng%p#`>erE^p9s)p0lmn*IdCmtZv^7B6mn0UeboShz-o3)k9H+%64yY%q;PX6*c}nR$ zm`NUjE;f2*7%3xrBaP^g;A!#S-G)QUnJx+iK~qhbYKPcqx8P!{EyzEwy~(;_dXIvw zR};u2J+RtHF0MH-dFDe(5vO@*f@S2D4@f8$A2lZjavIS3eCjxX+5y{Spt}LLbM;X2 zUQLB(>Ay}(iJ4G2_US2HRdfp81HFP2V_zcb1#y4fg7d*IM@4r|?}V9K%5P_J9u6oX z@<0B;l0L0t{_rRJuJRWBC`Xdn=2~u0+}K-#YAj=%0|}zsT{yPZtsy4yxSs&4EH{TX z<@J}EOPzb1`5<;k=WzDEvbWr~6Zn<@L_~<~2kz7{x45+<%a0==2JtZbL}Qj(`^^RZ z^(36Qym#0DrO0N9(k`@vzD8DQ&wE%Pr8u1#cCsL2MEa)_9j}l~$Ubgr(JR#GyrCM; z7=_;nN@47Yc})F2iBF?vi&mNqQJ1cwhT~J_eW~a`q3D=r+6ZZU0e27`nYKsQ6a|=3 zhX7vJ!4h2en`+vYpFv380O@sDtR2nLZM8vHU$&H5ZiMjra z;A55!C@c4c2+;etZhM`5l`icHNk8QDv&{e*M?ii9EAq~_>M$_rm`8o}0%bKLx!ztI zvxx3=4QKYUdT65C_bCiR9whm1W=ZvSM6ti}}bUd(;Y7K;i0X=uQMh){Ow%S{=j zI|X+AnX57gDv8hsx~vPx(hUk)Sk=B6;)6<#_kp?0pBJcZ3&AF-Tms~J&Prhfb{ZPv zn}a&4ADqKkTE5oz!}eP%>+{d$nR3Q?B3>G8o*I~SGE?J2gH5)Z20i4ikNSY^2F3x9 z94sXh{umJ9t-gf}Y)u1#N3SXL%%7vgIo9>i?CIZ2 zA}8dcGXGhU^b#(z^XDRq?ul23sCB#^^9Q9xr&?-$4KDz)8c1)j`n?%p;{4-_PiJlz ziHJ#z4wkveT~{pEtcP(3C2Xwa?8u{J<;ZjF)z52mgv&C*3)fIz6Zx3*mR%@KqVTm& zq)XRV?u&lI;hL^Co`YlHW?_36IIkQ?Uyw>*%dv_zo&7d^?Oj`1Q}_ET+5AL8LAyN= zUhjg7SAA5d?R_sq_ZI7n49BfQA^MRR%95BF9#o&=Rngg*UH3{iQiL{y3qMY?~5GQ@~v5fZV~ork4lLEdxbFjJ79z?AL>%s8BcML1v4 zAU5fb{%MAC^;s7QZ}bT0|I~@8pX6zMy5x8pu744laSh@agoMpWJMC`4_>s2PuQ^Y% zZWwX#Q8P(p_jeODvkCg~-);n?c&go>WE7y&OMrg0Hf;IoPR37W@y+XG)V*ff*Ix1MuWA|@nbDc_0?mJ?E$xb<*9P;i@0pYsS6R#j1A^Z`Bu=r z>DXtDGE@gcN}@ogPk;#`HkGx0n}9ASc70u5^ikDv@t%(cMnE;w;uBUuG~ekoTYaY@ zWvp$$r(^K9cu?2&T@Js*JWRk>z&fPd@@mhE4Poj%e1?#Mv%)%>s(8jsx)Nym9gx(s z`@0K#S+94eg8E4z92z82;ZB<{S6yxA+?MPRIb77dTyR~~Z{o@5d=Pt=9n3X95rdG- zUkNDd^~D%6w^bW!_U7(>UX_5Z`-wMBPde^{&=&#p0Adk>S^U<1k2LI-huQF|YF2M$ z$7P6#;Xr~yoA(oXiM~wCJPr2<>mo4jHt{D3tM)c#s6tUa8pZx{@T?~rzsnB+A^x#Z zX*W1kkaQ%_nv$XXWX%l7J0Rykx|?kc2@+Rlm*9I=;KeSqU0&=>`Va7!9Bnd+rk3U6 z@<05qA?12Lh^C>6UQ3j>7a~r57k4y$O0TZTusz7rDIpgXTZX13BM}(!o4L$cWUl}< zfRqD?$@aX3;U@^ZkJTS7caH_~^f)+UNdbRE-py{!G%mrg5wF)xTX3k!ptd>Xkmzbn zbadt$hCa#R|CXFDwTi`in}Lq1MeeF!sm_<`QmLB=HLY3!)*+B{5KKFrL@7lOAbj(l zi$a`WoF-s{$odd9P#RuZ%~UJ}8#z?{3Tzsi1Gx6+fVXy_7xxbtL3J)`65ZDr^GA z{ya@o`kL+R&_yp<&Nb;VhiaE$Xx%@nwYpJ{TzZq7VlD~qm|^8^Q`#8~`JEd-0T!mM zp;E9{6N{nF2K-1HkLl)RI!S*jv#rN>W<9u zmZKO4Os0B(cKXlXblx3D^8P$oen)H>g}aOhXioMht@6zGux3sA)EPMqKvNdTDwM(} zXdRxW-w9mrMfi<0<7&rOIv%@8LVn3yy%+^3072=7H|^ykH(3Ph03m}wJVF#>gv{m( zC`dz|$sqieihxFxVOGKW{&t1$%x>&M-S*+c!+~m%&+UA<_&u1H~+o)2DYIpBc<#47~65qGz-zsE{P zc$E^Qv$qauBXIrgj5QNy?42e&8XBScDQmR|<;1nW{ehaEe9ftak#|pU-n8!3j|$EB z)&Oqg+pmSs#(@S|rs~494DK~fluZL@?9TcRu@I%9=mcK2zaC>+c4%6bK&?xNRov5c z`S}PXB?w0F)l(87BiqR4O3enniJo*F(_wtEI!uIi;Ea6A5QT4;LN({R<+-z)5&aY6 zk!iW3YW~OL*l3k+VajZW8Dc|syea;bytZ>=#;gT69>9;IZ2@~v@g5}U6Xs#WbDKhGj;g7VMrr_3Q$${+lD z8VsNPq>l8DtLWGWe1STAa*OotB?)}*FR`?03iU!PX|U@giGPjFDx>LC_=aw`7IOu0 zNdQY0h;)$s72r_kS{Mj=Wg+sA=*Z@v_YARAHW$H~UUA~zG%sCop>L8=y`V&*`9wky zU*zrD9CPDtcNlJOBQIzW)q0!#`%uFuDMKPgJDD2}jME$*46w@pkq%PZKc0^ZGbqx( zPqnKc{-j&nV*{z0gFY6w1^=AXahDnAR(d*v2F&y~_+d+~5FEK0_JcwXg8s9&=1Jpx zlYt1v;koPV4(kSd>+sF;L zZ0)F~2O3rc+>N^+yH8&mtQdW8#eEM{Q2YpDm1WFFV%M|x?}?oD7xJes>!^{t8cCd{JOWkIn_UCA9;>)^}+4VwUN#w0IUv8o$G zTX^D2D&xnOR#Q$n?r-QenAws32JQ*^i{|J>!Za32MV3FrVo={Rv*)8d{;92!{tO(B zOHt6f@~q`9RNSBspx6?C_-2iMun=sO zsJ)34A<*x9q!XD>h|~Xa5DOxK!ItneQllHeE9?LvD|#%lWP)BpBm{IhAD{(kJF=wf z0PX{Ki5y%4Pt0lEX|Ok+!s&ut8}3!7n6z?2%ahkfVa-^r3@#t!+?i6B?OE{StQ=kD zbg$ow485w$fya!SC-FR_nL~dHh?XG&&~P)5dIC07nKGg6PnAkNdna>h@T94GUT-kn z2chNYoefL>H5-aZBvUTO`p$$4jyBzaP1z75IE|cNC`-(+=nP+{$X)YD`<**(NocyH zy%4m6W*WGC0#Ob=ajABNT>e}HIVZLeLI(xaBWoCX(l9;hwsY*~fe?cWxFJlRm(w#^ zwhD9tm6O?frmjtj^)xa;yak&hD+j-FzP?01y_`YI@Lx@(y9&~(8G5;}t;lO6VM2cl z_15kpU5|WepF3$o%fSn>>bc6}m~|T5GtQU(VQ8A`2d6a?{dt^`qgr8OE_EsIUQE}( z!oCD}DG&P(1rb7aXy)R^*WvqHcd((=ZNc*vGmdws&FGlI&p|mxx>lG;L8zgG65)qs zO64=nH$KlFD?M1%@9or1@Tct$5^Y2;OBhOl>s~#7&zn&MK-i&UAlaWhC@2KOjB3$j zA2Z{Bwr!=Ori7j;s;%K}FB!cSgfm`&#Jz39x~9VI`eaqMR1(@z(0rJX=`I}8srLhuF79|9sDg3IzOvI~65f{lr<%=~W8f54VW(t)L1W`E6R zpKbK!?dd`tcln{6GVHVzv4A-UC_bh6T?YfIbI-hE0 zwg$K40gmMWA|I?i_9voh>oV&T^L%4pB?OqX4;-#n5i$`@dE_#jC-S78_4iK*j&#+F z5&TIHqv8}5Kbg)GG=0v)FXyq2`b zZ?(r<6wmK5YmsxGU?aCs_%pr0L8=RvhaMgl339K^O-AE%N*BgGO-~6{!?~(MhpHKW zqUf85Nc+T1o|!yfe5_8WDGv1gb3kPL^(8{t!88lFEdZGhV%?vjZlPS<@OeS&EP@*v z>3T9lLciIQ#}n{!<}}NL6MVzYpg+_`K{XQ1qV-$ahA6qf7QOgo#;((GRaO7}LGg;N z&r^-euM~)w<^SHUo!?S}19V#zP;bRGaB~??F$pA&_vWZYk5h&EE?@q*l=it1hVYdP$+F#Hngm zrcCKxhW(*V8Tp^-Vt^tn1jYxfEf1O@AHVPo6S8&okLmh(cVohm8U0MBg0fVm=>K-W zKL^UV#->F#x~jz6t}1VFh}qA>g;oEP_$o|!-zi+-1gSv3*h|B7sTmb^+Gc|ZSwqVO7hrX#%N80awVrMB}06$yqk!>PoI6L1`C^akEfr?B46u}$x&Ju9;r?Q6iTSng1 zLVZ5+JM?Wn^!&7b3|Og*)fH|sa|Dkx?; z1gJ^BEFPbc{V=VqtG@Z!wONWpiWM;hm1QoVN>3lhUgTzx+V|h$IJD6L6$g?WMsOTd zrUV|k7Kgg3mqq&J^&<$&No752G7vFtG@}q(tI{MHeE~1|1e9b# zZX7;~#Z;z0x5OXIyN%XU9R0bN&$dw#7tDc>4Cpuz$Vr{3G$5;HF1g?`X5nvcTG66n&Qv;Bfn<%{xNVY zOtYYEiUew)SI1Zerktt@5o!nPkA&hi+#*&J_M@tC9AHFYKLapAngA6o*%|taR&bTe zZUN2DbcR3V`*ZXVyH&0!G!Xw>sE0VrrVPqS|UX~u2_+O`3T7;&p*Kfof+%?UC+OxaR)=XTuiv|cIN z54&HRpau>iQDSlB-c#b6WrZ8ZT}^85$Ww~{2U=~mVv?usr}Y(&nVG2^ZQA|AMM%Dq z?wo-e-}eR}F&IdH=vT$44!o9|5U%Q{;Ay1!3)5(hJ1$eyK+?4pF_oN;yQPJ=YUUWZ zUKdcVT=`mQ_Y&cEH)K7tRqBBT;B*}NppW}D_lrN{kw2jug@ZreI|aI)wgPRZ0Bp}A zugqw)O3cwVo@LgfVU~>c$~oC1s3vUvagpZqp4YX)77avq#zEAB2Gys}Bz-@hugEzY zuY)$zfN1e9GNj+v$V7vr~QvWe`2fefZQ_Q7Wt8j4vbN?m}zXA&$jh5`0D^KJvCGbnlk@`*)ow?jkuN{rab~}nmVv&1&HE9M0l2yU634=hzzO;v zQ|H*9XVb*t*ftv5PGj4)Z97e4r?G9Tabw%I(^!rDT-W{T`2zpnoU=PKyL-;=kw-=j z7F=AC1EZp_S_pGW4nHpXw_PvNa?XSRK6VtxCZ7k3Uwtxihs5vqe=a`+xO|30RYFA> zrEFhJzHn7WDcir}AFZDkbhZ5N^y*I&C2lp(=Dz{v1}l*-2a1W7B2n1eKWU0gA9*OE zJu(^I%i-r;|J+vJYv_?nYDK0$A<&bs^0xsK#WTS0SCwhw$Qa~N7DUbmlLlOaEHL7- zVEW=wp%RHm_4u6=#XNzz0t!5Wktn!k1@DfA_TF1txJMN>L%3D+nE32zRGP3~{%Q`D zd>lo;lJjlN>I8GiPuEK>LQB%#OrL3hjgVS%2}gVyg&XYKbtf@d&6iG7ec<`6$7bTodm5;{ zD&>XAh!3Ar*>m)1wvCo8&t)W^FX969I1v0W)V@13;)X&I_ws0}=N=IIhOvMe2^}G2 zqsd4)TZScB@U(4y^PBMThZ|3oTL*yKIlvlK1)pD&p&d6&`k=oyoO!+ObJ%lCadJ>g z`x~v&u_j-$1&}%;{{ugaS}kq7lFu(|5LjwIS4vZM81ZD=tn96NTjiIJ@6xrV!B;#R z6@qcqq@^f?T6&~n5k-f`hLtcr!(K)71Ej5^^OpT z+X8YUf(Lav<_(F!&a|-3VWNt!esf~X0+4b-bMEzDI@j0q=t*8sU!7GP+#uv+9M(nD zRLn#hoP5zCq1$H1U2ku%dMrN%20*vO(MJ;#>dhJ$TN)i1;`;%=?19vXFw&e8JyL}x z3y?TX>3`I7YN)@kT9~+T4=l=LCD}N4wvn=bXbKy>NzL(87bjpE$?2uFK$Y_=wkdac-rbKLSiRZV{<_H-|pPmUGlD9>01Rz zoj(k>gkmr{be|TgIkl}6{|4*r^luonNx+>I{yAzrP37E9v6ozGOTXLvamSvrk2w36g{C(@SU zcu*Rkjf4Vl%y%`u!jI0EU$MH7B#}vQgkQnU$foPH zXjv3PT@AT=Cz@%~?}+?NMwFo0;0)$cja93oa=1*vF>xO(Y8of^{XlJUfLAyVvA$#0 zeh8b>r(|iU#fYnfGBtjg74vp?2Tvcr1noFN^@?^dZV&g9rV&xP%m+CV{C3e6i`6K` zz{QoHPBD15iN&nrR_(v=<8|7y{t;>I&(mKdlobesMnq|f7BIbzN^^?`cGEbuHX^Z| zDhJc18t)}`F=&564y~rh65?nWVK_&6DFxIib6d=JZ7}4Lawd!NX{VDkabJ4-e(@dO zjgHlNYW&(D@fuHVDEKv4np4c`zYtN?Uhyo>RPTcW0s~dTyM!e89UIG?j}q%X$OIBa zH)n5?B!;Y&+c+bNT*G4YPnIn3s$DU9di82p9el=c1;or$c=d#tpVlH6D=CHnJC9>8 z!H+4wnI_C@yu2QPe$EE8K-YeI56OpNc{h#wt7UG9qoJ@6pgA`n%%03*hLxhkw|xg8a)yYzPVXqndtY_@eW;|uY!ffrOqZn0^k4; zsUF~F=|uLa%FTb8XYL?X-%-y~i2lYm!ka%zm-h5R`%DIAq4BJ+bn8Izd`I$fZt^w0 z4tGq~--y{?*_`?`!8IyZ_4*|+Sz%^REPuDP-RuHqHVU+P5Fq>o&UXcV&o!Zq9OqI~ z=AmJz)Ws$NF=}OI*=f4*Sx9=OJyq!FtmB^;605Yq#$pCDnyo`4US}rLiOkhtbGs_t zY^tHO&WbJGU3wDxy&?j9?g!B3Rlt#R)!9DrsduTypUti0k`$u%5@8x%9TcHj?WI2* zs+(S$=`#PKG!-6+s;Ljq3iP)x^VFOb9|=cRizW_wOy=g*-vkTbnDwC}8r6jMEl|kc zfxnZGE&w)XQ;zNuT~Imd{<&H+1sxGrd#Cgv?VW%7jkIZ1BT%L>4Du`A;ZfU6LsndA z%%5(NjUJ7po5?Z;VwRJwwJ!W9UtD4kapjdK%8MnD2+q8JYz7@Tk$`*&=?s!kRfO?& z;}}~3{KJRZl`{FgNO!sX$9XG3b-9-x$ssZUY*dL09@ZK?yHKmGX#Eq?Ji2xMn6Emm zf-uM}I_}2d9Dz8_fh&=dk(K0U7;dz}KGo}8Vv#R}zDIF}Yitnp;};%EQ#yJ5cQhdC zxOkU6X`cUDy}g-BLeBw-5D21R|7Hn2~f#Q4s@nLMHkB2g3^mn4i>GDQ+S98Bm(`|treLx7s< z6Avo^fzC)dPbJ_zIiYEtQKX^|Mr=EI;8{PH2O$)lFBjzwIM@|MPcxTZ4yg}ijTzip ze=ITn>sjFj>BHYxk6fO|;K73#<-JFrpZ`t!I94Yjfe{j;HMfM<&LvmBQ=Dzf9 z6S8wT@AjO|fdcMmx(k~w4{Be^Y6Ml`qIa)UOmJ2VHa8;0YQ#QKKS% zwE57UuhUmw&AE*;_+$y3MSPJGGEEhyp>pN4k8JEKFIiphgWFTdsk36SGT4DDOd#Z% zDV3St2}eDpWipKHl;(1^Yi-*|iqr_Fhf|UdO>HZD4VLO1T|Cd53}ESrHGS4eBWeTv z*93^+M*$632~tsbZM%Ij*1m)CRf8Bmse5vMXA@GV*p|z>2by6`pcdcL2SDUuLco;3^D< zR)noCVI458_!L#9OMIzAYTJbEHgwS>v2Mw}@d&g(4ZtiYNg3`_+DZj|143Q>kU0Kbd?sE3@#ZN zWuIUW3RhO2mY36hX{B@{70^dW8^OIFi{N)oCJ3QP0B|@EEfK8#K9Gf`h0o%^K`3Mzi}O`Ij?@fN^k?E=>gJY$|aF^y>3>=4?hhhIZ`W-BiEG(Kh8g`nmI)g z^Dq8c@J9L<&js zY1;<)WdsCENK1Y0x(kXc?d|)4>h=Y9(sDy|53g?)xhoK!2TD@52Y za=Pe`!sU;G9ZQd?n34~;{Akk&dOp8t5+r}&kR?Fs>W}qw)d~G(@F!-oZnl3!ujOGN zLv;kf)hTjI_ojAMVSK!H=vKLIIz(^~E}=*$`#+|{1B4Ajg#$^EymQ(~jAJ}Jxv0WJ-4zWVREjyPr)ixz02{yPyYcR(AMn5cMJK>o4mH-?1C`QFA!C? zpf2L z#eURj%i~DJT%aik);qR1hQUS|IkH1d)L4UspWXVgOV^*o&KOEjl3n;O$Jbkw01CKX z0rDtr28MV=j!Ic?#IAxR2~4SYq0%*`S=_0HQVtM>tcd@-+qUbOvK9T@-D~uLQ4tv} zA#2i5Y00=Xr)XFe?Ssta2RAgp{EX?b+H#^=Ki66)Nh*y2gf);baWjM?16~EK$vODAI(L(`DrJG^0Lm;R!6IP)e+}-DKjuk((RFe z-E9Xex8pv0@?wCK;=JK7B&^*NW|HZiRFTi%_8P&H8gFF5h$qZD%|`n)3JO+egmzo( z4s_oxpg|VZ{XjIT_AjiP;O{wXaL*$RuC#_aUG>Gi+^RT?C7G zekO!(Y>=cLw$;!n6wqh&WXtA!&JZ?ghe{W^xH2TMa~)jca6};Hx2@~_4pe3aG#Y${ zapI#6K+(Cw?WvBPNr&G_XW-O%M}1&psc50h*VDUzrYftuYtu)QJO>JP7QXjU1w$xo zA>nP3A&Gr=De4b;)-B;NHODvlbxuZ?Sj=Ue2AHWpN`z!at^TIT?iKRU6Jdb&2%1{9 zysiTatTflN?^O76m>|vPFKrivaBXkcHsV*yi!SRvtcD9)OAYZWyX(|UNK!m*Ev8RH zc9<4|yZBnW_^xWpHgmEXps%$8R_WPsS!yh)ci!^Gb!M5~ow}5j-7tiCmsOcA`suoV zqnINW8U(%&W25d88gr4S@yDsc}KL|$g z7=hAu0J{wxAQexszY>fY5obegTvUe-V zFMrLZN9z&q4_+U@H!U4ydRqjc9|6ZP8E|8^r%Kl!Cs?4BLQQJBL3@q$KR-+*e z?nFr*Rnjbykl0*#>D&$oPi}BD;7?-h2zzM7sGw`()F|$b zxR29--n0(3CCc$yS_NrT=!Utm1v~^F@lkY&0gavo+^TZS7gY;AMSqbc%exIT1b^)J zRgLeoz?$!vb$3G)-g$|}^Wz!~)1#);SFB=!p}x!_w7-jHEvU9`NU)`KCT4l+!Vwll46TN|b^nV>vc`%^eNTbje z$ZA*{m5Nc~&0Q2DVomgVP9+?;uc@DSg8IKJ-ddr$%jqzAWzh&}mX1w#hRM}gx-MN( z0;Qh;w^9Q8@CK7}313}lr!RFdS4oe^gPq=&?aDp3jJvvTjv;vZDBqS&8A!Zt4`yul zFd2K3xnH_$dnc-W6ZQ>1nPp7J+8~UW+pCYwzKUtH)amXxZ2{6iAOmIMiFs=a;Xzsy zxTOf%su351R3fUy>fv3RM5a?UD1BTDE&t_^xLAU7xvL(7#B4rjO2+K<+Yb*L%Dbkj zi2J4dVS&7u@rMSk=A3X)xyKEd2M@s6DUh%b+@U8+(|Kny-=C`#D;eu6VtXTK=+LXz z-ossyhijA0d>|%7!~)i`kk8rB(Q1DU&98+0N3J)0X}Hgs06Sg_9nPEV>8ic6w{b9D z0K2#G`Xs3B#uEx~A8zAzJj7Decrha3jP+Gd?mV9 z)+BZInjOM^88S#sytz#^o@}P?Dp|Nn5N=}b_UJj#`O~R4haO;9Fg)shP$XBadg~RY zNd~xZZ)?+`R{PZt&9p#Vy>vrF)jc?0W4R~iYdGceS{*z$3ntWb#^+j7(+~8a6kwZ< zak*}Z_{n=)!SQ1&c-9B1OQt{2Npn&&**PlFFPFXM8v-RioyXON5`BJKuANo(O~bO2 zybKC7JhC=b5`YjHbM^5a+w$#Q4Yjjn_v^D~22KGetp_L`O!eUJK2mzPel9q~A$P@b zT>%Oyuu(7=s9T9z-+Ph+xSXI4rl;0)543OablNeWU6vgBTHvO+Gu)YVvTJ)4_V86C zU>5_|(NHGkFnqoYMU4J?m){AH;j!%g9)?wnk(1)=KN{Y#5$6m7_o z$4++8G;n9~m)a}_4covFq{qc~k9NTS%lOBlLno8f%cB|Q$6VfK)Dn07EX@tf(bvRQ z4Is>bjD;{fkXBJn=3P^KT-z+Gdk; zP7$8&?KYaW{bhU-?}NW6Z6g2i(pm}L)3h3g94ErO{b_)=egTlMcm6{x1S_t1Iems` z) z3jmpWdYJT}QQLaBGXb21zW7oI^s8QBM-apnV%A-v2zaFq@S-tDfDSx`m=n_)e**aZ}?mIfUo4iiX+c z;ixy-jy$`U+Zb%byuj6L*0Vt2O!|e*dF{~JZmjLSbNO^=7%3%Hz|c)4nPz}8ty*W6 z8zBUA`ywFVc&m#(a=-H@$TzsBFz8g6@bK&vXepK>uYkl6azb3@NFNwib6r8T|-V8Al}V=Y9fx4S-E z4=rPhrzyKJQZH!y{)q9?PMT+-Y#f92ykF)~`q$$NAL*uY<2^z~{F`Iw`@4WbCE{F- zx$2jqHzw?u&_RE!aZf`{G6iQ63ikVzn-1i-z1f@qaT2ez!%oPlf=I3o3ePsGTIrqQ z9Ie)y$U0b4^pHwEYi3a2wLvfbMrc9Yw^WAqvZg*W{ylq?_XSKqDhT_J)c|j-&yLE< z*wARcZbz!E`7p%NhT+Oy@NM0Qug#~U?3R{8yMZ<7Ei_3HuL5O_c>fny8ZAaM){46K z8d&J<<$6k6mk%15&5U*qP3lV;(!|)+WQ>m!!Y)pbI&fHSIhFIjfuuLGyP3` zHBRY=HVqX%u4c}Tj^}%$V?pdJugYMu`x#mlVpgE9J8qVj1_8*-@U@Z8abm_K^t(CdWU6{f(Dvt$L@N$xY8MBCA-pIxm9sQN&t zgB*FT2Fx~pY~q6^$n6y-=5j-ZlL9T?&IezyTnBxE%>K@MZ{hl|6kLCqowDeF>vt=% zh+p6qM1shky~|7YkWc{{2c~abupq9Y`pEn`T#EipfP4gmI!LRjxAwb!ygs~32ku}E z<7-_uf(|(=Ub2+OC?{UQefA45*t4oFuW%+^z+;bIpQEY4fx5=SX$bCxZoox`(J6kO zC4qSEH57fNxH+Y5L~ePJvI3>$fYK}~cF@S0=z&kmpwa)9vORbcAnMbMSF*p?JIZD@ zf2MoDEj#oVb~z1*oXsiJ>fs%Q{bjXPWf;L3d2J2cr;_#fqz8e0ND?eVN@+-*7~sJ> z0Yn`T=rACKX-ueHB(FUNI-nrF6R`UB57stRX5Yu54r`n~E5n4b(bcF}yELaHj5E>9 z*v>!fWR!{~_Q8JB&&<+TnS2|Zh&7E1m;UA7sKX~Sa{EvZ=wD~R1>^Alm<}>6ARf-} z;IM_=5sCNOchT>6W#N>`Z0#3tP#{1BdkeZ9DczpOB{A10H2$(i3@yObr3#JNq)P{84(=e zA;z&z-w%3yJCP4=0)tYo6(}*k{y+W$!*NhuGq9-_2!Qa}iht2{qi2tx%U}B`-9KLE zBGkd+Mob%_H5s>ly|Cuwedvx!pVtogIKy(B#&O4ZqP-}ldH7(Z8WzFge<<|F`sHu~ zj}u+yi>};?xA^R~7D40PUcI-|vGF}?9D)hM1V0V&PII|4Lf;%$<;d8EZdTBP0a=nQaj&l8`wLSM9;m9yO6XqrJuim zMM`aB8k)*crwkSSgW|EO2;h0M!@eBk35UNP7P_H5}W<}2{t5L#Oeu3nTs&k|9O;Mx!@HYiu)oG3xltQ2%d7&{)6mt ze0Wpot&4u@gHAwPBYQhvp4lOS72c`j0)zmF8KA1+3?mn%8NVj{n?DBOSRH@{DNgbH zyuUuKR-TFY=wq+L2eUmR`j{F<+?<@Md_SW6{58027}LLF$#MO3UxFv3PV&C3-&42a zSXh;{If5NrVrarO4;1$TR5kJ=7Pd-AiQEtdnG|u_5GItulUPs|Ad7YUw*p&v!+_1T3TYatOEb3IF86#_r)s%Wh;hk4Nd{7boN zNRPEeO%}iuV*6-$FGDWT8 zlw%wkIB!P*$yK%*G}e-x+;<|pd#t4Xkm@k<5So}Hq5`wz$Xkp;212=gw@_AhM&kU4 zrR@2ZyHXsDszCZ)inuv%fWY8^pb=3k&ACFqR2J`QBJ}5z5)|@R8KAEcWE0SC=+a$` z12GF&z2{l6s&gqfew!2Kd!pBj;b1aQE@_3v(6bnjk0iD+`mh_$yWB&cI_Y3Ra;Y9) za9{T%>PDy|(J(_Wn*}Y9k{j_5t9~(igtTIu7CnZI1Z*RKq=sQqg3|@~CHeZk^u;Lh zmkC&A55e@7*9Fm&1&Rbh_|5Fy&W({kscQ4=lcn`To78ZfL7r%!Q5LeT|zx(^+ms;SG9Kg>Wp} zmJbs?kdbhUe~yAj`3~{~Qi^(M)@42Tt00wT#zU*r1xK#vcSJShG;YLPzQxTWRk59 zvvR+1c-o9-8~)rF!Xu`FnP$iP+mpao5r$;#(4`;f@j`(2B%Da#UboAg zMTn~sOM07_U{E|*I7!IqvBGuRA4T2?Ph9Y|$b3_@yQ%QnNdm)biGpoLI#lv3)#ZO- zLa6w2^n~5hW+pu!P?6##->fn^Ymsom`T2RxOtD?zNK#weWwBh=P)o> z9ZMB!sX>iY90_vl6M>@ScGQ2U39{#U%fHR`F0ZoPpOKXOJ(!UESv^vm^d@C{$JUDjwus)`ydDq(` z|Jp($YO;5 zacqqRs>cIDeK=0Bv0}ZUI=)vFe511uqa?$tCtL%=Np5cn`46*5g)Kr=r_yb=U9LwK97 ze~8VZartnjl3;Tuna4h5Eb2|v30b>f)TO5=rADz3gEg72_ZSqlJJ)0TXCM1c4Of~| zr@*0UJZ2(?y1I4#yj|;#pc{gc`u(J08#uJbpwioZpM5r_cy6qv_2lV)QMC)mH{>}n z^ECmeR^LVQJ7FPko!KM3k}4*U&JnObNM}vUB5c$QKaG4cCBK2Cl+%&((HtyY+vi%@ za5%8kaB|Z*boTy`!B5BuUqM;RW`lOR{Q5ItNHGTNFa!c02B`XozU)&nno~=(U}fDD z=#$#JU!ss7|2>KBeZ}?G5xhsDW!q&dy2f2>T`QXyl^rO_!>Q+>SGJI2h66I?f3OF~&F17V7s?ML64jy`*;4BO6DY~0fw`JU?_%`Pr0Tk8azu-jz(BniyKRnB&eVP*>;)$g!gCn~{`s(I+_4%f6=_FL7hl zOow_~0=6tbegn&I#xWuBz_=Irq95Q~a2WX+UnzXm7;IRSu~j;CCK9qWJ&%G#ihYWv z&0+LMi({Cu5-9KUL_|)>?jt$Jhl;} zqv~Jv;J83f!jsP-qkPL_IBB+R@-%4tixgonD>zs+pp`-WW1xLWI^?>iWNo(`>KS(9 z2B&Z}0R|{;2b_yq#dqVIw?ZrMu;MC=3Q6}hokN zz6eUXh~CL6b*q0QsmKTt(?96ma#_mMzJamiq#&0HtNCF1AQdD@o67uWc>th$!Hk@K z|Do)WAZN*wd;L$}T6*-)t$B02NS{4j&#~@tGhGT5G&Ph~LC}agkL78Kmd&g|0HRnR zM=m8*AlZl+OPXHbaOz@u!n0G9bUy%3VV3ske0#X1=EkzjO1% z_`E1+e|1J5=JS7mw8KylNd5CbN!d{^1*ngs>oGqhu^Oe@ham36ExsD zsRvP;1sV{fV4Z+5l`MftxBI-7@*TtxzEUeb5w!UhzzNCl`=m)P3y(E>*;Xy``Om^{ zu)9!{k{?dn?ct8LglC#KKhl_ta-8mSwDd3^?mCo%4^7TQTtE>UaX$Gffb3MTSwLs} zqmAvz!yAd268K=>A0^)Sr+AaQVfVy9X^c)x^qR}c%aCdFu$oY7Lbyd;-03|F^ob>! z`(igyy9RnRyTX=W*=`5|d|7&wZt~4?FsCX{M6&!0;DQ6}5IEKSmj4}yi_BKZ{6!b! z`+X(%1Bs?8C1l4U#QKL9uN%G}ci)E6uZ?E4V8tlwrJ(kH+nTN0%j2KB&H=I{=E=WY zK)-XRn*J5(JQ-yZW_v`Z(k%MiXMhFz(r(J?S4E~c0#G$Armj&elUi)B8Sn&Q`c%K|1{aALs8 ze-5g`(~&FE3GZ$PH-z1Nc3k?6vsrMlFD+V^c__Qrh=XRTn)SEL2MgHX((NJ4^5*uT zh$=A_J0#}3oscn$(gk&#_wKW!ZMz_6VadP8IC;})|7o)WwEbdrtZB_@|AfXKX}3YY zDkC(rLaRuvPL;1!K3~-g{Y&K!u*rCW+6uU=g|0PJE|RXXo)BIFx_aB6kr|#(FI{7X^Mn^ zg%RpD%q!LuX%pX}4h9FQegK!wcPdZvRGipU@wFI)co8V!2}66(<8dnx{WWcNxiwqN zmW%!aR!KhrUDXtn)YrOsDE-nf8h?aptD zoYCR3t%@x2?9P_O+BXkYwTxIZV&Dj^U(|a9`_Vk(e;x~MrYx1Z7H`g--yas(;ujlY z^i_*V8+w7JR|8DP19j+~bg66t#na#2KCde7na*C20i}Gj`~Y({%RZ4zxGNVvD+<+# zr-QfCfS~-lA4GYXVdv3oMHGtyA)JJshVAikK|{^@6B1Dw;QOH2$lJ-z;!f`K)`-*e z4$}ytELRc~y1BCA0uOji%-f3$|Ej&HmCxm6pq$NAK?pDh7 z=WGstg<5M1GaUjwcmjB=1C$>LjU7A3z<^>lRE_8N5kI7qw0gl2iX&_W9-xQTG0&@$ z5RH(=>?tm;32l41Ngx5S;85-r{73XGC;{`@byweF+$JdoaRoKk=7D}Fs4R|O(uxpp z=Dq{QCxF3TeYIO-l#$bYL`d0+02f63167b%WOK7~ zbcXKun4^?R>Q-}d$Vx`nYM)L6?0`ic5SAdjG%Pl8 zA3bz&kn+(;{$ayoWc8wk9@^xpzhcdRaXqNxVvr)cwnzNuSUFQXP!jEA9Nzdul@aRX zTm8UI`iMkit)AFDQa%RqK!Fb2%QpxZV+o)#7hpHZG&ebKwo998lzjfkzwdxVf0{(I zo@K=LRO%%9AIH8jl8xvZ0GyAZgKVVhcf@p&9@_o)2N*J1XX`l2tx@a7(x~y z9?>=LW}emRi9}n54wSIJV*M7M&kBxVy?iL8mH8Uu)R7x0&oWRhx+U>igUo<486YSD z!Xm2qM1tiqW|A&UoA2~z&JC1ow1)=&*Is{ie+y{*_R^i!hK_66O(vDeN71PW$C{?h4|_ui#Z`Q(u2{C+AutG~{q z1~vJV{_COAO*~S?)koz!;MY8mkU&7EX;1IHn=f!f?I!QNw%=ptTbbb)_M8^>vuivI zfoQ<_sjK~)o7%F&)<=nVb;#9E<#im1aPnPt`Xou=meHUJQ&42J6T+3})Ow?07jKd` zpf|Ds!gAWd8d8kA>gN|;)!9>EVO&#=@>}Fb&P$0d%w#`76=O|b@}R{cj<7GaW(08? zn;*r5<-uFwp$v40RN<%}in%O@m^Yu3bX&!i6h-^UHuo(Z0Qmw4M*#VytI^DIPuYBH zUlY>n<3}c}YOZ;g&PK4*dC73OZ{#%dP~>kVpCnm&hE_^-7g7jKMHb%nW1=iq@2K4B z17}3fa6jvm#NS%+EmnkLN}f>Yu2Jmor#X6RbvoPWVuWA?|({|c_VcdSNl{FguB=3DsOfn4QvrMTW6 zV|reW8D}#S#s$bWS^u#WqO?NoJNPBK_wX6$t;0u-Ax-KvZ92ysv-P@y*3r zBUv06`I*f9vR+B&(p92URujhxB>%R8`12i)6k91XZOc|fodFupla+Orn{CDRd-^iA zgpZsoCR1&ssv1fyGiIIC?U({2NGga|S5a>idAo;L9bHlC*ZMWAYL)Qy*lKycx+y&0 zrg!ydJ5EOMOr{WELIK$fA*Htz{+ei9R(|(Algku2nZs0g#o9*c-Cq34q~9;|bm%&V zvYK=RyLh0^qRQ{=Tk4|=rvg>)sXRMo4UdosUQh#Gwy|KJ7^g0BQsz z2B3r=zTXQd%9k;9d=z#B4;;qcJYZf=x2v1KSJZ!P2bU98uQx>(NKPQQz?mRStd*IX zCA;2!l`}fy2^Vcp=kZnA z%&D?uiy}y6uhVQA7Z0W`Z>?;ZvD{%3;4ui0vk)BO6#T6%d*{v%Y}o=byE7e8wi4v3 z;%8ze2Ndl0-1Y`%9fj;YGWfzGjI_AmZien00@|-X%UBYqOnHp@PLJ&Z2xGVbZLXmZ;vvD#)|c!QV^loV__QBrj&K+EVjqMlstIk!J$@oFa~`;4 zV?a*pkV}i*n?d8Vth46K634E7Jds{D-{BYn*ly@tz4@@ zpT4)O=9*Phru1@cP;14sS^OLd*Ewyhuq%@$WZ_8~O|qXwygt~Qb_YZvjc_Yzx>@*4 zu?hBxXs0OE&IN~e@TJ@SjHE4aIDt^UwE3KI4LJB-0L#N*KLyC}K{jeks(ADH&CpAd zu6VsKc%HN7Fxw`!LA1l+O%tkjH)@uTZIshG`gcb`HIfoR)nIq!p$G2W<3$HBhJ~?R z5bSn&2*!+f#3nLR-m}L50~GonKOx}zQ&X`aX)P-cepjg| zo`kT+53wJ{?{34Bv4KYHqJ}7+yB*5CZhJ*xRVU%kRGeoaZWe6p5XPpTlKVgx<^!Uq zT_?IXoL%Kdh0CeTh~L6%n+<=Z`6Mq_(Jv49@+mN=-e~AN#TZj^vvTo;tv7B~SLfNJ* z`FXyp{|Bk#^V^5+(auU1^)|w)?B&f0%TR7jUXGNjCEzc5&Jt>Cx{L&P_c@>{=wsb@bVFys9)0Va-7z^89`ik9U&AE+Ajnxjdv zMpv})MqKTmz!>r}wivG6sq_)|KhUp#ziYfG20^{H_4xYwM9RwA$D*3!4a8@aAv_IZ zGza0nlT~@;rHeN!M`mnh|Ie$NfW@VlF83oh*END}=z?|TJx)i(l~3X8sP6Y(0=WYw zq+wCJM{<66?u(hG~>N1j29u-;mRO|foF zU+uh3(=c%jIv?8er6c?)FW96oNo9e~JS!c53!eaWoPbr-?cb2?HtD5-M?=0)-Ke5}GO#F?1dRS7&inr^d7vlH@91tW%(W5u`Lb96` zu|5~8zD~Y#CkAtO!xDQ~g%1G669{VHe=tHDyV4}*+lRuIek^r$Q`|Y)a|gfQsd=Go zGGZ;wzRro&BQtEl{Ml6sRb!VZxKE>jURNTD>`_gr{D9gczyuCgYJLn`38VY@$Mag2 ze`yievjF5Y2r#LzafOFj;mA~i^v<@{*@$Kfc;d4kWRWaF*T8)1A7ka97RT!u*7>3* zC$TyU_YQdZCQwd!p%SORsQc#;e>=q(9IW5uUVZ#QDq+3PU2#nr16W*vl!hoL-fOa5 zGg2}1$i`l7Q%@uI6pPCXxbrpi_QmdWJHQPyBWAK63%{-ZlFN%s?)h=FYUD;*3%R|u zXm{8<_%%W4DY?R^+vUEh$wT`DQ+_tSu|`7p$9?K^R&3vW>}d;YR7BgjNOd$1EicwF zDKAR85M;nFTH>66lIB(V7=NK8k^7l0o^lCMOq85YuidQ}qEA5r5XYf`P*wq}nv#{l zErxqa91T1e$GyqHbOWzbtW&A~US{<7IP+{~uXPj>o=0RNkBm~(J9wG&nj9FVT6O<5 zhclRd?brSgGGWSd+k9PGW>%d0xhSaLOa;qe>+m~1*pkp+NC%4q_VwGSOQiNZl`!wE zK~z}l2={o+kUAGTDB0#6ifC<+vB^gy7zP^jO}=<}i?L#ms)mS)8$c z|NBx@hEihdwf&5=qI+2P4>r_l)A^c~DAOr#@pM2_| z>yF#tx0y&mr2$iMjd#ZTtO9n?f0qc%plz=Lq{0-bYDqy|B{a%IPwP`a>0-dEh}Tel zafDSe)lT>8FyHar%wS5^)) z`S#Lex43Wo3`>ajUVh^qLgN@AiPK>mww!{D1^S~6;14P~e>_3y1LcFWK%V~*b&id7 zc1;_O?WD2OIB9I#wyg$@oyKmQ##Uq7wr$%sp1tq)!}|wjpVzFJwP$G#cDwYKT%H&# z32Hp`VB9ofU*=fJaVI$m5v}o1-rziW)E9!$KkKKQc2bNV25d|Tb});QwZU)Sx~~)Q zmytdrvR|swoq@f;fgFf*K4rc)ZWm5HJPdp1;ij^6fdcL7iArv^^(Fm9us zVbVU%(Pp_SN4kDA*L+_layzD_qllb#sWRR|;)rj+-o`)#gpB&-W2E_zs55MGC!`7j zLgw;P*KZ@9zk?J%q~~e`7pG4zjbgt2<{2&%qkcctF{>hK+aA&4P$>4XkB()vR765+ zmJGr;ob+jT@_B)h|HT{|gbeUBkpIA8MaXU8E;Y3#6!h_Ky~3vAM*O$&N|zt;w!z1hbX&OGP>e#N7W9{oy8vcPz7$1UCbUW&}98(>spybU;YE z;SV((OC4JeK?jKKrRlkY+U+J8R%GuH(O>R4Cf3j=o!%pK#d;4k|#)q5w~$L8u$EtIS&bI0HKhqn%t zP2h7qGAsZO7nOtwp#%FwwtA%eKw&lDKsOAF2V+zt(JWfS3Kjy(+-j0$zVzL4QPPBT zqqQihzCux~HbU8`c(=_|yi~uS9-?d`59pj-re*F!L zXG%r~j-AX+*|#a4p`ApS1oX8Zpy?heeZ` zK>s4bGYN>3S=HRSzbxFhitk@_VK$UWbY8~8OK_~mzV}Pvb@J6sW|reJtGYs-b-(wN z4gggj5c81!qafHiXFB_8!kOrKf`G}j5WCToEMV^oNO`CtRvQ-( z?+jYWY`(eL>U{N=nR6yy4iH>+vQ?)#5V1h%y*bEJswCKXdpvX%Dm{^iy4$ExQNyq{i!%B0=hEPy?DuINg_N_w+4sQ8m7%l8$`!o$Ju7*W0-3FM7eW9ph!7B-ToIakz~yXp^AKscq%q zu7}q1?XnN-O^do&5wuzAcaY@}b7qg5Erd@#j4cPTl-S`1+P--jD8i6f!}0vI*C2Is zWPl@0AeSLT+==nJm4}w92QiXWEeKg3w`+01K$U8l*oy^50{qG;=hk2Q*v}WUu$lY^ zDN;{>IHonnH2{e5ux^Mo*sx?4`dtCwR_5I~lV4IUIef^^&g&k2LIC zqFSiglpQgOV*+^vRBct`N}E|YbJzahpW53+LKMJF;)wt73?V`<#Y5&J>x-*>ThrWa z9x$ygevk&Z*8LW1B@7huJ>8?qq(3ZD10(l{TJSHU9%ur31B$#6k>Tg|GK|_=Hcw03 zNA$w&pMF*wXWb?6Z%IsuAG9hj$}8OYs0S(C*UD*8EjK}t1^MVargi%n2ET|A@qkIl z+v!B~VBr4T^kX9$!6gQKDUjz-`2iY34ps5O%t1C_w~^2Aiu)lT5k!kS-Wfd0ptJ}{ zu@MgX2(^v+CiG9^lWl*D_F>r9Ti&(Ie(p2Bl~d9aJ47E%WM(@G%9XPMa(z^;==9PC zSr2HO6^KsaXOaJ9lta69L~1bG<(D~M${~YL;9$;_FFpJ^P#M_vY*?lB3}-KZDKox< zDkV6el1IU56{Mw2R$eclksM_yMP`31eK`eELfD|@u8+cmkUaa*`y69snd$F(J@ab) zhzm`L!F43X`j#0F!dv4b-bz-aRQX!|&gcW`aTr|ymTA+KiwLh6V<3IJa&IWiL~ahN z2;Y_kLppRc0lh81B34p^x)DM!^{3BGM6*A|_$R!_)#k?7s~UVmfdgcO&U;LvEy^A! z(}cYMKlQlDl8Ahl;O`G3pj+$#$}=A#ai{*ZFb~XqnLwt=33uc%`(Np97p?bZY&s57 zanH}@b2E3Og^X54DaX5h`hQHcwur}krmQ(9I)51;nP?`NXrU!UVigxi2GputZh5eM zL7D)K2LYt7$9}x^Zy`XaXIobG^J8foyXihd+}-thUrl&Alc#Ds7o+oghnafX5DRbd zs$u(tNQe*DYKgv*k+_VhQFnP%#M-f~#dV#bHqP)4SdgzATMoII0DYbU^f}MzD7q6< zt%#jxdH{WLjf6>liRSQ1+ECUwLF~?+c_>Fapk-&A4FwfG`XU8*&yRfOA$~RU-}Ayt z2m7r@`{}0im%5!_xYG6`;~lTR99W!#jer$3knkWIkh~4?!;8PtI2!zGy;)O9V+H_Z ztWhhVrimP6trt<1@OdbT)~pZ7-$CAw(V+wN=&rRw!KdLjKdStAR3niH)EBqxCpM4P z_4R4O*QQ7AT&t9?sglOVM6iGoRnT0Z23; z5Tg3J8vKOECLxd6t?e3*?h2`^m1w!aNFmFUS3e1<(FLypwavBS2_^z?1dP^d9B?f~ zucxsvy(5rj7#5Kld9q82jIwSE34!!ux%^`YzY@|YRTqPU0BHR?U~;>7rSLXiS*3ff zqt_29Jm*$}JS}d4jhE4q)!M^aoODdN_ud3&GSwO`wEbHc%4QV(7omtk7h8^uUl#e9 z?P&8&WTIC{K2!%?$v)u69(`5U)noC26xANv&j5@$d_w)OvVpmT@F%p^PFJ+A_z8}10;vZ z2uR~AYmuA2iKsgjt?Sl`8$!3_`TNJ0ozICBVn6h2$Yb6AXWSVOFt05E8|!t0&wRy) zD*jP#pLA(WFy8wnHlMMwTsJqFG~Y?zjg;b8&nHYj*7nec#U$!p*t?f6WV9q@Tjhhf z<^*oG$cbc2E@wUG={R45xmON0o;LuM1#B2FVvdiA{*L0rfeU!R$z? ze@Lbchh81ZiC>DRzvF4XWLO3bUe>Ckg`j99&n*(8`tb2M3n6tLxV&|GACP()`g`sG ztycrYC*X`v<&?WmZoqJ;7(ev!bSGO|r9OE<(=;a$`~T)((9Bz`aQ;Wu6p)Kj!(%ew zinMH1Z}TeFHS&WewvZI;eja7xBd;$U4EAUo(i3^IPdYWOUw99Ys6YZl#ZF{?qY&AS z`08@;FfDg}vnBe4<1~){{R6?SS!)jtlZgq6b#IuV9=<_xmTRWja_9lv4g@SzpG*5TfKhsel5o8%KBs=`sc4BJ zL7tKsk?-u;2p=okxg>9w%Gvy~^*E%;%(BBvHE9xgv=#MD#Qxo)!nhqtb)0vAFt zfRvHC`aC!=*xM?(48o)bcuNSREL1!-R(Zd24*e#*7*ngjbj=DUo}!$1cOAfKz&~${ z_N3klYwOXlqah7g+=EU_}CN zJ3Xj>%A5JB5e^+OGc842u;IMyNHciUSvIo1^b~6aliv+VS?Gq?ei^~4g)~c4ljs3! zX&`l>;!^+fN?Y$o#|%F1XtV?*uiS}eYhv2L?o*u-Mc!+dTa=yHJ2?ZP2qoelyHWl2 z@~F$!tRb)7y@>ay74Pqg_gdxPEyZ znqrVdcpSWfVf)gbtHBcfmH#`;-xR5KX>g-C|3|LPiLU2TsG(tgojLP{eRd>`x_X1& zWGjAF4@ZY_P;QPbIe7q`4>aU$V(dTre*n&$co(p`*#Vzp?iMil(&vU?jstVS-Iy29 zt|756y}?e^y6YXjgvl+VjEV^nY27=Mw;vABlsie8XQCV*`AH%2C2oC_ZU%L%nHRg> zX`=Qs)K(EfYHfcVI9NFVU)~7N2-QoqKM;o1;^|=+uJmVu5JVdp|0zk(a%oZJ<-NZN zx!rRWj~o@3kZ5$92TNlBolpz*eOf5yl(gTemI7Qh^h5Ep_{F)(v!J{__uK$cGH5fo zWB?52dVu~czn~Y`WR8d%yj-Md<3V^$&>o0O7M?2I+YK`hx4T3C^8pzW1#4uIha@qN ziphvP@sFY_o)RpS8XKLKor=XdK7Uta)taey*K4;&GkaPc| zMU)NtJ6S*O6#9*?p5IKoft+HZ@h$CQpk+3Mw{1g)fY}>v9iV^80SK?LSR=fAYGx-jK5RbL`0;vC+oL|irfLch`~v(C^}Ju z3BoUaX$@K;TKzWj6OP*fiF0E|weoqqx>%LeTJDQ<=cgS%hE_Rpe!%WR_?dys9U;lx zyAr`BCc$uIe|A{HmSYNd;Ea$%spD5K9bW6ptD}CBmh5DY3i}`9F>@pFdj}q!dS!;wZgMEYu*48^e0Ch z0}d9|-P9~wIwSn|12{;YD+TuK12msj7i7+eA5R~ZrZj1QpaIewstA9SoUIqN9iUE^ z>=weUKF`}@9YpJgQu4NKM)R+1SR*%a6P)YO0R#<@-%vf>7?6sY%!)U0B%4p6=~K>m4Tf^uU${cShp zxgT0_L|sVp#zrayI+Ag`S?y zOC6i^P+nA0SV6&SOlYp>@A$(P0Q64^bd05}jgpRx6QGJVQ)L^8*j3g(rOSqJT6w4Q zMuMB`Q~BJb+}dId`z0`@Joh4}Y0i3^ezQn5oQ8qTKo3aKxR2++l&-xX{yof!mYod6 zyEornkXiy>unL%WfQ*MKtb<`bw%Sdw(17Dt<@DA~D)Pj8uIFXGBaEK2s z6RG-blRT!%cY3q%mVY3v*C2d#p%Z^9ym<)oCZK}nKcj$KbXhwzvi~;(+khe1O5#77 zD3Q~qG|;ZZJu9EH?W09gsCq$j!+nr68v60hnk5lfa1OtE{w5c~rhQ-Fw{mZ}k{<%i~^ zs5ZBh)ePt*Be^#c(pYQ_IoLdl`6KA-0V-ZE8x8lmWE7iR zKhsN{Xx`RF9TdUeIvZ_G!u8+%UlHysJ3X$;XN0C}U7@ix{Hx#*@guJfA`5Ndf7-Up z^5My0r30b?$cU�#VivUF+WaM&&DBVSafkCX|_J7tH{~Ifz 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 z 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%0A`)CjF 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�WZo+DGBeeO8NnSNN*#!YxLe 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

    +E;GyJ^d-t(l?X4)hi(^^4# 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

    _8Jm*t4|wBkd&R<2pnw3`e2q-# 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⁡ON z8Q;wy3UdQ+N|LQdXd z;(Uu}r^^oN7N{lE53T|Du^BU&dm>|iki%wG;eE|~%w$En%YFb!?WS@{*Y>J@lcPehxDLB0Sj)n6bwYg&mhO z2h%_P{?^{O#^UGc9#qWg8>lfD@d8iROz>zLgIM15Zj~?cNE7n?2~NQ#plJg{YDqHY z@BY=A{R}q-%g>Fj6p$-})ctfOJ@$`^h%-Ia^1EkOF#R^tu~B=Q%FeS8@flhMlGj?y z-eL|q{V}CZk+J)2hjE&1<)pJ&`NgKym)C{#xkNBzgOvw{$vdWNX2`ETu|01>6jhxJ zg*>&AjREf^vcbQGpisC;%^PiX-N>hb9VUqCk|xX@rkWP*k7d!B!?+th@hC6XWBIu9 zlU7E!-_R0L2kb$|A1Zw8hwM+0JF^Y%sm=iFa1AoK!7MzE5oDytPRvc@h941`;gX;F=v>FJw86Y^^ep zo8bIyt)OIx^%{dx`OsRe-eXjSU&;wMs4s7IOp#Urf(h1%v|z>41PY*%4g$cWZQZAt zu#9jkL3QPbns&AHIX`MIHQRce{?!_;Vrl4a`PF?LujI7ra5b8BwJZHs@@UwGw8{3P zcP+;Jo|4S)bMu~Kb7I=)4H4g1Pmz8otzufD2D2*4=UQJ~Fn01;JKuYymQ8P|@ z4NcAn{=BPrMjS!$wsl4_r}n1wpAKx`T|`H#A)FW&bgYrSu|O~j;$$xIa#iT+4|Ede zT1u|3ndfnGf)&{#3XN{nSZ9U7WK5ismr|Xc$l&%|F&`

    Vk_g{QOdb4$V?IoC<4? zGKgwz=mvC2(X~?>rAl0#Vj*)Ns zp?=(*1@wuO@q}n9KJ7n}Q zn8;}xxTV0E9G)cdfQ1QPb|i31;u6DIeP!7CoaAkb&HOO69^4sgsTrWffDE0rK3?Le4O zUrqMxj9}Uinkyq0Hwy6OP~Utv8Qa2$;=ClG{x=P-8;DG;!O`_C%5fo0CVs;yfsKhx zD5mOokYzJqck_8HkhTsaZ-+BDOW&X%1Y%K8m=OO;F6(@I#YK?)t)t%0@Q}Lx6f{8@ zGkYB&UYHAyW-9k&pxzm^pjaq(m1a6|vVa)VLEddr%4UyKt*03WI$H;##H1Cmu=#H- zJF2vyba}Dgxw@j`37r;bEve~9^oO|q5oU`L@)W^6VRTu?jt)w-K2o0})#^kK%j}b= ziMjiZ0A&01q9&1TYzy$PyfZ7eJoeJkGaDV+|3IxIv)=Rl*iS;XL`gASa*QC&Dns#r z>2HxmfmsQ_S$w3?gI@1K=$)w)bGt`ml<*3lWqd2|{J#ONnG}flch|Lz1J>H|d z%zx(oMsgsoQ6?%S!o?aStWW7mqa15jlP=)B3ez_v%Sye56zqY1fP|=$I7grX z`u+xj$pDhuR_J)}=&)6Ff3r|@_23F&iyw*h1$|*)$59C>nhk~4i0d;(Y)y=6tKYy= z6E$I+SGBTtirH7f%NqF}Y#(hP1}R?U*uH`L2Ct8d@Dq4otyuFvaqNUU^nbYoRLQkL^;c>!VD!u`x9GR?KNK zA*z+v{k#t5E1dx2Ce!k>REMXeVym94ucyF2f~cP5jDnNqcrD&+_>fSCL&WzXQ(U6vM!thkvNY-^E$YW4ZbcVY~fyM9bG6$W=0`X*0Ur8{0A9E@& z)E~bqvBAlbAWObRWb_3wcCb)z5X}}5-0TOlc8X~GVM9WYHgEKtQC)vf%2?zx%Ib#y z&hvZ6u)riku(ns+RnB{94#z|QUy@b)&o(|#cHGzIE-&SOU$oU-D@tZR-Wo_Rwyd%# zg&^coqTOox7Cbzx2dkZEp(2ts?o#92MXg9N9BXBa5xJq4{e8D93kfx6p6lvD;2RLd zs~^2t9M`D0LHhzAnoL@0)KuixS2SHZYJtZ~p?CPWqLJ{7_|!_N|nD*;U;* zSZt{-CZ=l%S?F(vRClyFQq)=$d@x4@ad=ewF51FkrbkGOo)krXA8bvdk{g$tjkx(Y zq(pY%9hY&bugBqqny_y?HXz$pK#$}NrTQ;O+{6d(_JwZbBz?rjcX8u*{PRKV%6Pjq zM=z<2T$bQofXCKamsbP8qHQ(tLAsI2*i*n-3Pw$@{jBTVh#o2ZnRKN!647tl6p&Z( zNe&u3AT&%`>GbR83jE%Ci8{J_RAb64(#ty0(U?5c$rOc>#$(;f(nK)&K%cT2L*W+1 zstZ`?y*!R_W``Xa)M#e)&Cu6(^z1O52C{W07c_5 zlND1+5>%Y~%L9rG!+-KwucP!WqGFQ^m?S$ntuShe!Y;m8amUWIo+~W00it?Li{fXVa&A?L=`)Gx87Pljq$N~U=0UBUQ%z6bq|)7S*skK zRe~$eWCP^_#kS9vYc=b7LyKe919F%i8wVs);&i1q$-^X^c!A}|k5!He;I`aq^5ZwG zt5?25(Zs3q=n_7(2^jPJ_LgT0*46V)_5r1~WS?Lb{n>&c zC$F-i90D6#;vL`^D$|Ai2nSG$gC6H7FNXg*EFaO?V7*tZE67>AINQB7dH>OQ5rFNV2ppIo$_pSa|HLBw688Xi`9S{4{G$eqz3D=Ubi|o-wj-H^DWg;-aL710h zo|lZqGw&l_NE^5s9hE#LmaGD2$cEkyAp(s8MkV!7&7th&f=^9M(io`(27?J|`)c`p zQ^!^A-)2MF*4zGV+5MO2X8i+=IpAVDshZTfHf>l*uZcjXfH*GzMzE#}x5yIfAWm?a z;LZgw8wfL3>2SN@+XeO;9s;6lHjML-b|rCTcDg3!OPlxmzg2K);Sd>oJp-?f5F5H9 zEy5iFC=FJRsa|S4^?Vq-H=RN8z->kl=Oqh4U{;U|Bi;G!_Iy+ik1Uq``?uFpd|OI0 z6Jn7cU$4021mY1Q&E@>@?*Y9ZRKgI6eivIz)Z&7}v5Z2G z-S2*p!97keCcWZbZBZ>xU9c1MVZdX(Ur_Pho8EET7(bH3dnQ5*spHYF-lxm0mMbZ^!>MB9YKTZkh1K~RmQh_(!mW!E7rU-$UCk=ycLqs3SEYA~(iFuiC-qu>S zjx3_=5`5^{9TJAU8wi|MUk{Q;OMe^?Ivw2;>^vM^KS9DTLWntl1>4VP?80E(DdC>jn)pq*oqpH8>lVnsJuHtLW|w5=5wx(*M3lHOPN`Ip zl|CZCQp!YXY{!46ajR6)Q5Emw`C?+tYKx|_kp?ug$0iPI6y?VDl7w^jQNha3_s55FC#f`|PmJ=G&kH->^GK5y^T2LX<+`-Ll{L7z;+3X#3@=kL#g*Vh zzN>!j^hXy(3}~$l0>h+zvE_$}Udi@u9q=;7pv{Gjmd#+4t~Sb|A_f@1-sUVxeA7@P z&zBF*s}5Zwp)4#81w-z%(2b!7uu{I~G5uk_);1!1gL*hlN0F!N0mt!8`>rgdqhrCe zSd?whZ6v;(-H6br3+>3N6HG8`1>N=$wsjV-Jc2PpaWVH({uedqY$gaHlbTcnr=%$H zif{-&M)yQLyKF&y<{`FQ-&Rl+>el7LDNEKzSR$n8<9V&q5jqz;;!a#r=P--r18=Ww z86$FE3qP&du?y>VY-GZlPzr2ryJ*YcgYr0Kf#2k}|HH_n-sj4zvq=B`@bxL2>ZwJ* z{3s$!j{obkm1AX~l6oNzse&egQMlZrqFzjdv!o>o&^t504S)~1c6bndWZ}&pI6J3) zRsV6A4_0%NOeuP}xe@6!Ma2Hg7yrL)S`bbqH4t+DkA&DqctBMC=^h>~%*htpKi42z z4bxW=WC@WvCi0Q@Z)(S{rp=d(b&!*X=NIU|yuUS{L*b!?(k+_M4BRe3NpIv0B+`(O zIN42~VP{TL!wSKh)mGV{DU=(~*oDk!66n_O!DGZ5V($Xifc;$U4H=E9(Uk$JxI&N>Bwn4V@Riz1aWz1zF&K zZQ(@gM%{pr2t*~#dz|d4DcL~eBfgnoQ0KIrn(Ea1Gdr52_g$?AN-Jy0sMBP5J)AL` zOyw^LTFgoVN$ohc2sRC!E9?0*HFDq15Dl4%5X7cU@jvoW>>Z#x!~O%w0AvFMhF3zZ zx>!nw0=eO@E)%jd&Od)X@uZ+7iHMn3GgQ_)!n4#DRYQ)VOj5svecjN8c%X8{Y0W4) z^`|6jT#1)hxPf%;5mv(=LpO(`h2hrZaZK1RxFmdf(5E0U+=RkL#og5iIr{zQBdzyB z*ufXxW71{ihMSB+cT9OcE3mD{7PL|YVP`1tf!mR+yO-xgq?@f?z+RvXpl^)8mb=DO z8w7VH>?F8YyyPm<3Pe%g2b!(&x*%j~6TxWb|2%2=JsJ8ab};;5B-bI%dsy!4B$UQ! z`7-N3ar3Y}o-5rZt5XC!Agy2JafmjPrNr{EepE0t{NqVp=;nw1$6?}EX{gGd3cy6p5%n4X;B^d5XrTm~H z?o8)v_XmRu%j`|1Vz(Qr3fGr!q7^8{NM$bjp(3~abMTUa2^N|KmVZIItdq@piL&>8 zoDg*+)5=Ywqy5v&5Pu|wy}C8GLEUd|-FE>U&j2xMk{Kc_M+)F^y!TtuQJAHw^$ig} zpz1C8z#gH{5FQnCt>8x^>I+~LWE%!EUU_IqF2@Rsrj$kf$V9B>X)#rGyRTBA1}A|B z=%)_6^b}6J1LjWhV$m;wRS6jS8sIbvC@Nk0%h@wRZcfzKZJWuMQL6#*+lo_W6l)WZ zgQ!Z_{s9?svSjOtsRIf3L3~^l$y6<%(CqHIFO{|*%T^Rm53Rfkr_4VFA^ozVrnu%o zDxZZ9N!$}A9x;FS#PR8jPtnr4F7PvAMUhMF&pm!&fzr-JXcMyG2T8WS8`o4xCvgn0 zV*oK~l8r*$*YURP9)5Q!oj)#mvRnU7y0HLcv4)}64`)SYjf=I#J7)9tblv{!X#Oq} z(m0TuLL6vpGOZ1Okv=4w@|vB%zG176cOjH^;vs}ttt&EUIt@6(0PWa=NHwWNWGRTH znL(}zH;BGN>NWT7;9c$HmkQ^uvAJ+g!4nh`*(G!ypKYiGosqNsn)W=qMi|HV@Ik5y zZKr5otk{$ceH(~=_CzFi2~NhFvI1&d9U;pgmi||i&OrLh7(KipwG~2~{pY`((TbEc z8e1}jj0cm4EX;d0UYuBvp&|FOTtI0v zuu1>w>Yv;rSTo$#vC5}}+5548`$46_%6I@T?aBqG_1aK!wu}8k(Xe%a!zus|)fG?Z zFs0u9Q_&5v3g}4?-3H*SAulEOp_In0;I+{bduAjQWgk21l5yD${Ay%U_UrW8&Y|D? z?oyGmGjKvC+>Zk6Ejhj+s z+n)t*xI^WKE0NbD{?TK-NG7|=-NZOBg>=XVRaw)Jv@8%8vN|P8yR$ub5zp(zoK`X4 zTa+Hni53*~I`fE3Py`VVs9Q7~@{_NdEFLRCtqh1?lgtBioman#9OU~+;G~o_s(ZWCS#-))!biiuH9`uiKlq#R=0WLVMsv`NJZ6|uOOJBn<7iztJ_^uO zo*12Hoi~>znydKgM~cHSWaHSFJ*2rBiT2=(b0tySvVe6xgaDf=5F00{-5hz6_h6w= zaajL+jWpF|iqc2O$k`9bzPs6ox*r(JGQvyxvBO1+_)Rd2gie;lL^pU@V{S>ZlxXLG z-7;%#-KgE~pQkHV{Pz-dQCRoaK9l!yP%gRwqnX)bWwrc}w(ch*_&j&=mPcCH_is!+ zO+h=S-;c?q?72g zzk{(f=+j$ATD~ULCRo~*|GI5j!ck8m{MDkU%qjl}l!5+fj_-1w zAmq%?Ut)3ju2(Hqd4JP13SOy&;@oeLBsKpfbtbg4b0W#t$GjF+uH?r+RbRgwtp;!J zUI=LwoWEgvHE*S}1qBBlK{~;$P$`RP6fWEml;fG@HnoJ50qYl1gYR-q6kXsVc7zq1 z9t>Xwhs;ldZeI3%!X|;{Ie1#Zoo!vQaG{vJY z_J0TSh1`jY=*12Mm!LSX_kwWG{e=f1wmHK=Uj;x!n>>6010`03mxQPmUk+lBwK-2qtJUi-)hg4&ovsOsdQAAxeME}LbYBc5*AMK3!DIf6Pv=4i5sl^QGiH0}7W>k>XhnC5ZY6Zxgs23*}CV*_h?I{Jg>qPM%B5D{LhylI|JuMwVI9;$fB zc+M9V&iwREKUKO-xq&15d*JX8m{nUn;gIfiXji zU~JZ8ocz z2B1I^ST^`9af#e6r8VBEjOO?HdlLUR@V6>sRbgO`L%V}B5z<^;`zfzeyk*vOk z+6iVnA^TP@NWL^agZTu-l5B`Ic15PJ7Dq(R;XZWL1;RO5jM{b3z37`_Tk5gnzfVy*ad+;vd{tUz>^rkGDelI1LSMkP`sc$wj73cf_;jT zxSx?GH|O}z+~j+P>p9bcnvCoe-}^t~v=bzY(8dE0ftDU;_Q|Xkz!3z(*Z_RXj(;w_ zV2NeJdq)(8i)vVEjSB5jr9p@!!y(Iu6)^_iqsBztP5K7n!|$~3N=?C_Off5nG^V_J z)SqvzD2)u6_s{&aeE%ZwgMf;)NNQrpn6=FU(5%D~;dE&K32z1pkHxmCD0skJ1>b<2L{WmMlGC0avA+5V(~|FJAqhhapm;zmyZvADqhVgbtX zaiDN3Hd;uBQ|_$XK*i+?%4Y<;s7?Vw=BHi(w-EZjy2CGn3C*z|sAcWf&86iX%_rs3 z{(|>)zYFlX;#n|k3MU2L3BRg&8Z>%>oXqk z_lM6uJMev|84KX71!Bi!G*SC;->Oq6_4;f9mdD`tNF`VD=<0+?%)nrIMStg;ehYk2 z2oRB79DN5;Z&)j$Vj{|8w^SJ14lNj?# z*6#kUU62utWEbx39gKvm_HrGctm$WZQnn99)iqg3f!1^&)J)nWwoQAeSa%i@YKd1? zjhP>*VIj&*jHG2gCG1#S$BRRH2h&DQsjO!ZycVM~$#}5yy486Do~>i_a=q;qC?Gg=^u zVkl%X)V30+Ko}?k?!bVkG|83<@~7NoF(+r!qaQz?!4^{B)e!OzpIhrKBzfUI_?^C) zvS|05$Y$0lWUfruz){Jm@5H4iq5BmS$*VSf^7P16rJg2G+|bpP`?SV}l_~pa=u-_r z|G*Ci?!bU(GXSrKVCYl5N)B{0w`3a|jC;3G2BcC7(hSm);HqH6A}}xpj!87K?kv1} zf!_=)-5e-Exim-k9qUW2X{}Q#Cl24&c3kt*I@z2=(8GD+UezV%=k%FZ+1td+(EQfg~-T?v!wHR%DK%# z7oFxStyHRu@oy7p(70GV=8b{BQaC}jn*?fp*#pTn6kprS!A-sN{?jR9#^j2rq+kq| zOW5RvSrzVhWTAeYRMC+|8h0*rc^~x%tF57`)n%maPcnFpAo7!!|r#VRVr>PGcB1X6f5bCm=@Qf`F)`I`lpDSb)shkHxf=_+6*WOyl6R_x*JITUaTZMt>mdZ?Y@WJ z4+{KrqQey+HZ%_BVoYQ;go&R=A+0{4+b)+;lAw1l@4`v$3Kv%}?s@cjHd5sq@(wV= z0{%nL$daWnEp#Ov!l}Kz&`#NnW)qe0FPk}U$8FDSo#<7}1s?EC;6`|iIVLsHRT7#g zE?3&!MZi<|qY~l4@d^cQy?k^}U*F?c#?$DaoE~H%_kG_!W*>L$>QI>(iZu9n*&KS4 zdw}4uUz`?}61s7!jDT5Czr^V&J*^~zYV{NNsvn3|qf+AErjK-V>~*h8^wLl)SExS2 z#Bbvb86y*1tYqE)40$cd%n`{=-}9&Fy2(%NAArM=%)`aaq3MM*+LJ>9T+W|&9-M_r1PNIN9`s<~#%wVh$>m!BYEZA-59blS}tbVo5OO;pF(WVa??-SVgfxt7; zjvb-CeSfTfq8FduPiM^%M+w9@x$)(CDXHHH1mR@QW%+jws@u<_HK*p&KLKzv#OT+( z5&Yj4n-$mJ;{Ct_f4sC0P1n+>nsHMQ9I0&ubgfoD?h8|`hyYnE*BGAD>Ard7r$6RZ_N(?>_GDimve zPp0w+F+I4<9n$H`9&Wr$tkzc&#a@{ib+fsUk`A1M;e5S~ooq_cg>@$%aYZ1RgbYVd z!SnrT39Jwx?o2YxdQYAJ@S`Yc0#Eq^Ym&E$0XhaJ{NYbku3d%i!nQZ6-WTRkdE9n? z*Ywb8jQyhi5Sr{>G>urVihkeQxCy3`o*ekFJWf<*!aakANj(4I@S0Xy^`G@Xp!9&w zx)MO($GuV)via8-N{A^um0-^6BkBQpMv88uK&@<5!t26f3qNfon$~P+l^(%ATuKRA z&7Hr=zc{~=~scp!S`Vsn4l=Eaz{{&*sBy%gTltc5~M5uHWnN9H* z6Qde&x-Cw3E874hN`i|U6q&H7^oMw|4EtM8959_TX4%cr;-F76 zIak$q|CxT@o?~LOPT+1v2q}sLS+4*M;n-|G9ZqAWU4_EK>Im{GOpNa)E?dJIAx!k? zf&CT_^DvTfvhG!~GDh!mNl?chK7cRS3RGXT5N0TSm6_dW~ ze-hgpkw<~1eh@zZyiV$d$^G}eO%)#`hH;)!AKR&~S0Ns2QJ}v$5A3$W`f*i_#ijRe z<17ILzUWkR+&5*1TuoJI)0X8>q2p)>o8Id&7jd!-pSc_mH8auNFK{V!WXA7 zud9%a+u15k@G8XTp$4(esH;lw@DC$@L;=ez2se|8Gw&lA0mYVOdSsGz1$ zfV6`^GO6u(`QD!QNs2VAw0S`@AE##7!X>^JL@G@rc`LGBnE>c`z==QOdSzuKS^Cm! zJb|I?Wyg<-a8dPvTG6lTby(>}=~al%^b|`4WXipEt8_#kuf&2IpetY?n9MDpw|}%P z?vco|+7#aJ?_Jj^)C$kG z1Pm(jY=5x)p@;po1%vrd&Xul&>jL9B(W`~Bqz*iHoc*^5;^QwhrH*T|R#LdtsV4qS z!dQL9`;A%j{!#pLNO`_ukaSs~XG*csFs_y&DBzTu&d=1=A*IXNz%7I78mnb&bZ0PK z&=1=Lgt!gK^$UjO$TMJZH1OQ7FPOUR$aqZ{zgKHn|c8pR?H#er29|{e|Hm zZv)In5Y8ppidD4ciyZ=eid4Fwwzz}&XnQz=&RoNTOw?Z@i2+A%IG%q3PrlVezr~Ba zoje6CR_)I?c9!$P;!}@i@UT^rbSIgYaS~o&Upb03X5ZxXn3LIqiGW+;!T(WR0KTZC zUfbK`{mbxyv(Mc=3+68lfT-Z8J7roLSzaR_eaM&yx5L$g#FXF>zq-*Bj6G^V4@y~m zLY_=ulqcp`?Tve55J6{uoSmUy+dnP+F}W8$6wc8i8dKNwFm@^4&Rxk2cIy1P6^BAf z@PhrFuY1aVx&IoGPJbdu@$r<0MgKnqM!(}I;0uyC(5D~@Oll@(+-6#Rw)Mnrn&y{F zAq5+EiCYB8mdL2ZODz+l?b-*6Qnd@RJqjk-AH$(ZlzHSxN{8Y-Wje#+DSx#Win_Ip zq1d#z<#haq?c`K~pXV-8WEg<+9*6@&(^JL8cEC%Ny&~PO`-=8rT}duCkcv42xu+jk z@T7icEroi?$wu2rc+XFm-aS`JQ9MM#N^V=*L<4(&>O8Tm-1zfyW3XicJN$^(tQtQ+ zUTG1en#y;%+g`0Dyh*80-ZbbO{Z~b?eQK4xe_7qpE~IE@cjfrO$5r)Znim=F3Z#se zQl?XooD!_a?sUlRhSmPeH?rCGwV26K7BUHcz!XiY`_y9ZQYvmEF-SEZQ1$KNiNKcK z=Q2B~!%z{T<)Zg$V9&=th;%zh+&7KZ;2S}Tn0QN_o?ZXsQo3qp7EEIjiFZT?`r3_3 zv((Nup^`oE^TCJhGt-sEOZJfbH>)(z&;!w6{GH|-P+_#h;j_<1yFwOR8+k5Y?2GCG zDhnoMImZ(>4Zb;9E%;o&j}|%WO#eBsc!?zQ4KJnO-0doYvg1s_Bg}aTM@T!X+45^|x~N;PzsXJ7qIf<( z$XE!w5x&OoAzBZzd`oqysqE5({R3y=l)%|OGFqL(-KtC1QRiFH%IzhLI{l3%T89$9 zDnbWZ9Vgk}hBw5Scj&l=y*&|Fj6j^3%mk>Zjhp+dhxAJ84+gbj**{(c*VCEgsqx>wU}+TnBiYLE$~W} z;ldtI?ZPM)Knp(*LMA!6_m0H%*TKZCs9fw&b{810chw&(#x_T%MG7p}odZE!$CA#oJ)TGD?=od)2B^%X5k zCw^26NA;5BHKG_)!WEiO8drWLGZYRRyKeu+S~GdYFNYq5QNpz@z1)yhTVKIgZVn^K z+U(!jdAmct2SQ{F7hI%QdHk71$G(4q)A2Vy)F=N~=pHTPyiiE{1reOh^2Txhi8nN? zK!o(axWMk!j%=bEp3_W3Hg*Dyn_=LL9^NMSDPPq3k&B?tW4e85vHJV;U;J_sxjXi@ zm*hgF@8?h}`cMagV^1wjdge4bjz&bF67GhY>>SSb=8V6HVVjRN$PCfad!z=vsce_! zBgl@x9bd3@;B=cr*wMLtDEs{48M79^Zb}jq!J&#W*`<>a+jz~Xm5r3WvqaeNv5CQq zsQuHf14cuG^2eATiIeB`L_HQV->oV&ntM{zt#adU0Vyf%;6;HEUN(^ED`0D$SbPYk zuVIcP-Faas<3VZjN8ek*&G%noiR}m$rC#q)Xd6c0~U3lt3^$kdF%RbAHLy{;^VY(G+&BBF$sN(ghZ6~^@kj;|ZDXI%;o zmD@20^QovHXC91@5e`a)a1-_)Hd_m|EHGKF9}O4z)7aU1b9dJu6f1crvhlJM0arjE zevEYDOk1lO3(cP;xc-2rjc_-JnIFnENy4%U=nql`S*$pjL7#euraMIW6<0P}L?mlb z7L$u*Zwb{^BwF9?)RNpfP5$|+QL7rJN78Sc?$JC0muw(-jAZc?6r^JWhn~(vt(2mmc%c;k%60*eei(hOV`XJekCG9ZpF0`T-#36E{~ea3 z6RC@&yQ9KI_iZ4yVJ2s3Yx?SH;BW4?pwOI4cIuA<$x20#H#|X?GNMe};f5dEd|3(H zj!T#X#T?28z!hm)$6Vz7&&yV=;0|hkI={#oWC>VA574A?oRQ|s{TN=77yR3AHhJHT zEE6aw-_EbzDd^Asq!^X*i zXUOgg-K=ti-{WNmVOyA7dOyWr=wrSm&Dr1I+#Mz_v!)NZV5>etZK%qJRdq?sWoZ8G zUi}WTTmY2JzIRSb*WSfPu7o46IRB8^y*64juIT$`H?{x3lyK=aTQ2HuVUXCtIgG`a zhg>($T|}Xi%aB<^92&#MTMy@SQKW>xZ3s6>_2|62)lkx&z8Yk?8JHS6B+mpG+ z`66iXW_dL6-y{fx&5Y7uQ;jj?UFmE9e__5mtmB*`r=K`YuYXnaY%d!{wOvNI52^b8 z$MaLQ+Br}c?NU1ioYv^5@@MqF<1yfL3nIoy7u>#RRw$|6^ozjjg!++MRV}w77|)nQ z3+o|QU%v`09BvQ$av||5kre+hv~tZi=G>=Xi#O`c(3mxN)^e>^<42GZQvEhE@ zE2jhDWUa}lhwUk(M9L|QY^|nWC8Jq9s?O7EF|Y_`tQI2RkS(QDU056uKxuaetaTEP z1}FnOuF`t_ZP<@qb$@a=xnV6_pwbUQw4_a}rofw#cm5Hwhwu;yybE1xH0Ui(pSj8IilyqX20qwj zC*F6-wy}zJDqdTwU{uF4FsE$Bf9IB&s)_nZUb$DgzS=E+bV^4aJ*RSMP)_~N3Aobw z!UWU|*xd~+!%Sh@sGa*2nchyjDt(9NZ@~0CsLrJ%>ZMFjSs11t<|ES#81dG2#El6b=8qT^4&VOtI^5)W^yG3CLtL5+@~V@OluL_`uYDjFa?|w$GXzMMQ3wJHNv# z{FETbf3R(1p^J%}z^V7ju)K%k$#DR7A0W_58j8h~SJT}S;q*_c*S_vBLlgMWpP7=8 zvrptl!jhj$`Gn?snyf|NmUVgKA5P3FcOT+ATKX%i5O7TgEbgRNVW%Q`DFq5unO$p2 z?njBRvna%ievWH70n-G8TLH-F^$2Cu9$p$o^Yzg*S&xH&JsR=DQ--fO1x)>#}%-E|CInJ%=E*a4Q!}1%~fd0+;ellJAh34 z0+mA~5lv1lPHr#kF(c5LtJ5z!6jL_pSdvq$Ae^wP{6e0lGh0)Y4)5cdX%-%Ke3uu9 zlw|e(Ni|K}16d&yx29>x-2$LH05qk+*O5 z80&`OOn*+Bp>O@lC{#1qKWFLiSn*)?5K9C@J31NmY!8t7u56(T&49r}nv*ho@?I5n zOLIuPUJtmYvH~1iMl5&#f?%QaQ36G?1n3f3Fh>0FGTrZMIp$W5ALS13@>xAe1G6N*1l$~bz@zx(nW_sB)mx zZ=$mYc={YjK1r?2c~M*q+mr`UbrlW&Wdv2%%U6w&W3zb-br`i<5pgfd2dyzjv{c1KF(6} z#{aOt1W_6^A2ix=06ZiC_8hQm-P1|BGeK|f!dY%tho~NkvcXDbukXu|DFU~lN7eB= z?njuoI^;pEo2d#5N)t>;8+~Q%j8&gV$ux zOP2<#@;4grg6YGfH<=&^IQhM-T4G;eq(U^|;SmC&wSJVYiGerB&T`TtK(+#TDQd-0 z0clNyAQJ=5VdZdzJmzz1(&pD}hZ6#Xxjf}7a@id4uNt7E6k5z_(~ui|28=J6$+71R zyl|xvrtk~9vFkmq-pT>8NXu4&8}G7fdc|Z3hJb_u0#l@|h<=`~&(ZXr9xAzu(zK88 zu2oHx7n+s1dJZTfqq(c%S{q(j=4IG)XASm?_xEd9V5LykMj9mPhVcunaVAbY%)khY zJnzR?=5-I?QFuI^O4tFPBm)vtIFyc^n=m5$aM|Yc_$1NvC%;ye&(PcI9C&oLr0f@x z^U_H3pC(ZKgYU~d>q6C*(c*o-l#oXyb~52W)O2x~Bi<2|23Tt3bVQ&T zi-DF%0l#~2q}ar}DtL3N$rp-CjRZvK+d@&hH5}5F=RTUHWr1Gt^G02|Q?uLwn1adT zJnuisx%5UAMD1r-mXj)=Huob4q%(2PJXXtv4!xx@yVuTQfp-mn#FSJo5vJZB-viw| zGRXGEC~WA%zeg%5ayn$$OBp^3T=@_$3U?X3p-(VW31O#LePO7Ng|xmFdow~wjVi(t zc{4$U)onj$(@MyQB!(M&le>8;clrAVsOS<)!sdOg>YS$@~7bj>tun$hl^*h_^Eqc?QF8{!F2OZ~k z@iU~vNqp(rAD|^6fZia|uQjJ9zlASq$95=oNsXBDw!P+OwNCAOs0Ar^94wwqKN06V z`l;B{mdF8NI%?$Q#C+Pk*YKOdgeks&oa@dWqg0PFT8&}5^CRy^C56aiFcVNZ70@m{ z1Tp>Hv!=ZD3yWQ~1mhY0>1&N#`Dr0T&F;lfrIsR0{3<4_z-%PUAygw_#omG5n9?ND zHOjFeoPu;P|CGp32KMM5+4M_IEpdF=I5L>EQ>}tH1nrSq~QW})$g(1o~A&lUp?3}P@D3;iv zD?vKI{WF`_TX4S)UH_jUJpi+Vel%%|rmxd*5NP-a9YJ+#Vh;UWYmXJDORHOb_dGjpdW5Fmgqb--%~YIZjNY7;<=SU8~!iq zd4ShWw9G^A2$6~-;zzP9idbK17cM>UenY&+sjG?vc@+mZ;8?9}@{4TUaZ`S(Y*4As zXJ!pv9!~V??+C)^sy1>Rileql*oOUanhoH=cH4$yP6~kU$N!Kg&#!_n?hzfai$#?e zi}G}17-TUz<`8FxIEdsP=e_e>eBAd;c{46O(n<6Mc-5qq)gy_N@$&TC1({UKTAsEqg$dTBKYB^xCJvTZUu@5Ot-0 zVY!gd-V6Pv3efkD!c;;IijLH;cZ`i8F8_j93ii*f*g<%S@kyW2)>#2W4M72DB$K&l zVWII!w%ug9)MZ$vaJCPEUWNjy5qd*5SYVcpDMpC_l~j?hkJ5KvHBc`M-^D?H7AuUI zY&7z_`@;UxE%ct?2B3OXgI;W)MA7_DDHaNVQF8%SnFCH}oLFj|>NO)3^?K>#wtp#K z50^7R==6hkIURW1z^eoxtmw0kbea{ z7i4K=p*ff^o`ma|#bpKOSKd4_PA;XaF4hRg$Yd8~N2r?~T;C6W&1>?pH(^h#B4$x( z?~;{_BoYdmO;Gm|JK2AJV|tCDj&tI`oiiZ2q>5b~DURXiQlLs)PZqACtH~yb`4Zy+yk9WW&3#ZW=ATUx3t8)8Me5#%_!_WQqnoh> zL&+B8rS)^?x}Ns2v9irWXL1ybym@W;Q|9DF=|jDHGSD1xFq3PyZ`Y~4{?)XPS1s{c zr@{wfi%oBkKw#bIys_N9#NJu z9O<~oJ_4+&9xK~y!EmMY*?qS{3AHV3yL^aH*u7CkEt)B38TyaHIjjl2c~2(SJew`#KdLgx}BKq<9EzvnXcOz!>bJV{B{pYN|UE5}k;SNpKoe zHW*1fHm8pM7YGJmFe%`;W?ibH;y^l;6k5kkZMe}09=iU5sC75Uh8c-aqKEO)H^xgV z;v*b6(8v4NZko*4G9Jv8Wyq&BY?mbI1(YI zHQ$|<2h1Uc8?@Ip;4m{X$( zlPpH54rp*d(+4tIYVMk;jI>6?_lSvoE{uo5i=ZCs{c?Q|_!kTTtJ(+Wl6hQz+}<^(h@Fx|JQGMFS$YJBk41p}7EKt@Z= zLar0&;Q}X?Nf?w_wO)d^=Sh=y~9Nd$g#S4z` zR{%;HeSnHy5R%stQhB;ie|R~nl@rV)f)*nK)YU@VM^F%8wgkkqRHHKEHfpq5iXJd~ ze21XpY_P&s%g-!;?x77>dX1hHN7h+#K}Lek8+E#rD^ow3kG8U_HJ>`1gh^V{x+0?0 z`eFVQH7HNrd8WnuM%f+z7N|WZ26QC~Fgo9v)0TE$D#MoTb|uD+d$}_C1P#-vB_`@G zrj7pb^m3bISdG$ByXu#D%yJCvwX6SG|Cmae*tp!f$)GneYM^0-w`?;xt?BvXSrZ`7 zeIZ>qVFp$*5YkcwtrhLFqwwLJG4CYJDrB5Emwb;U26~9oX1_Z zjk4|E0naZ|4HR*g2g#_H6qVvQ(!{SB3##M_K>x2gM*yL7u}>g^EXZ6J+Uq_y+Aqb_ z!Vg1XYmwumm$CuQDqF;Ol|%o=FbEZVyPYc}9tjf0kMUqPyz0+-haq7;G)y|gMuI|X zPG$KQ{rOB}q|XM6hwqM3c@$Yr8*`iR2C~KXk}6{#tLcy$d|!+1K7z#t(~tfcQ5JkC z>MQ>&{WSSsb*=|2S1yRotWg|AdFw7(7d|);E!^{%YZi9Q2$(##7RgFAoIn&xg*Vhi zAvka0tmg-oGNu^h@p>1b@C(2*f=RBuHG20Vi!zyPEImacivg?u z8sH*!eW*=KLcufcfaSES@)V5nQ?X?L)>>OQA&Gy;LK1c%3S6vO7~|f;8ctwuyq!6` zY1nJ=Yeaa24$I*(R$tiD-IJpgL}0jP|BA@;wH zA)J!A8vOI9qEi_$Hg5%|g4#vkXv6&Jw{3EYh1JO?dk`_>90+$D1jjx*p%k8k(KP$) zE2h-v`LZt(NoMgJUmoNO%k`8P<N0pb( z%)us7S9vCM~S_z6fVARZj`hKDPYV0wDwVIi(zWLT?P|KgAv zV2Nuw<;4Nz4@9lhJ5WG1_c5BWx1MI$m=a{}wxSMlsf#EScYn|tGufa>L-izyyt_n` zEUzc{g{m~Xiw!C6nH7u+Vkyw^NYPtG?83h~$5B&z_?!0%xHB@${vPY?-Wp%;3+36$y(L(C+F* zge)E~R2Z04xDJ#dSB-{$HA_g%qRmOn3w^}~7yoMk|1aYmv~ppVP&>CQh)A%U(G0JL|YYC={khbR824t*hsuq;BWEJ>-m`ER?fV z^`>JlKgDIbqnmB!`a{8TO$5?pN+XQaN7b!O7>#<xcysJgjZhziqDId2rr9-hq%NZ4uVgadK**_7^wa(b-HlsT(wEiZDeRSx2ZiK_F@RD=9dm0 z>N6-sKD#IZ(h(X4u*R-r4&S%Ca}c$;X? z&GZ<%OlJr{yl+hBTBGm7fnOv01jYVV{B_b^KPr17iLgQCqepN8pQYjHuzvzrV?z@J zECLDwy{JNhZ9&x%o0`2h(+7 z0^(xpA|?F&2zb*RNDm1%at51KZU1^rNlFWlf^&=sP{TIGd*6{4>g8;YRITfB$9h+P z5Alhwn#x$#tf65*seO7RC)XDKyN&R^{5*IndfA7dU2zqU4de8{0Y3a&y$JiW$(#wV zwK{oQWa?~g#2e=H%g@XFoPUC;c-Uc4Z)fVj%m#EKF@GY90V2WS@ zDriV-&G}n}333r18|j22qC0{#pJw|r*o~J17N?^EC-KiL(N)FMFVe`|Bs8lY!h#Hevcn4@;MC z(ayV$?6xV&v!Jo{=~8NAT$pfNe++FL4CpS#$q>xV{^OG;}6 zgdN6pU~21lOW%Zulr(Sf>H#0a;SbBX^=8{Gu}Nm4*0Do0FI{m(K~*IB+)ZR7H~gZW z)J__?S0eM7igp~0?dh?nOX$p7RPPKotRNu(jeiGqi*O|*#rgF6;&l2s|~%8nWsyjiB;Px==$!o>Rt{)a~I36@C6sdmpgfy5&KC1u>OkK68nm2RXT| zQy8p`Wt{TJ+f)%taX1g{JM0+l2E(rTPr=Zq{}+-AWV{-Y)4N>OW!O)hzEPTj$3<9S z9oyD`Lp7!Jm&==VpHc zl-mP(7D>`old!&;sl&}?r`{7 zq^0V}?DmGj4KXL;t_0qxA=@|E%4z_$3*>kN4{{yZG6cxz{xJRbLG#?{^oD?-yV{^1 z`zH;6R;GW!SA)>cE{i*9ldmiE8aW(Wq@CF{_8h>cQ&(M~k=uEi%Q^7v5Ol0FsK@2! zur0|+zVdfH{05k1!bkyn6fUP)qUWseJyF5VA_%ig>NgU5?MXL*^ighINsJ1xf?A0g z>DOM4A8Hp}o5oC~HvOKhL&VE0W`wL<2oq)VtuI_bN_T{|Xk6CTCRtSb(H1I8KxtjT zzkqb{j2vPX!*SMSBIpQz&h_FU9)A^b zupyqK;l1inAq@8E^QrVp1pz%fBh-5-fO*cD*UwGUu)iGdDHK_bA~J5v@K5Oaa$1%H zV(A;@9rACSh!Y70s`dW@2?5NFBsuuHKWS7moR6x(!Yyc`w1c}r!I4g#;B5R-L>0wI z%$b_=w6tJ6iZ<>P90qnHn;hqDHkBf-BYMu%EI?%o9X0x=+@NR^PRA*Ks0r60IszC+ z3BUfqn@{dpvNY>+Qp)CKrd?8klz66-VC>M`9$6a@OR#ydq5C*NfG4a0%z5Y44Feqz&BK-nTY$h6tFwYHbCJw9t< z&U-Hw1Af%3P&Rdg&Y(dv_A-3gh9;exZ<*{7@R|NCqSCM3p&^lB1KUf5(IZHO9cG*L?9jJTPGTL6J@W7;>6>0MP5*tV?Z+2!q~kB~MFk-7utWwsVHPvldq(J?1~8^QC^Zpb4uwE9FmsII%>& zkruagE)LAzfKxxoy~o3LABaGmq>QZhoSAuO*sW-zOELwWFoQ9~-4KE2e0PQ>QfRIE zS@KXJwN;t^XHu`D{gXo>7CksI9=@PlW|CI{BrFgQ zQgduy6VO+$m5LH%!Ccu1xiD%14tS$1;<7cQ13%Pm*Hmn3dR-U8kw8-vosB8k!nYAO z&akjWG#DW{PwVijPRtq0$9-nZB0~r%>&}As9o}ay)Sijo4m(K_irA_odC2MZ8) zYIg^~J-4sgNG(?zjPrgT_ZZ@$3i@%I4z<*X#t2y3XC{OG%EZYkXZ%D&C|MZ(ekQO$ zBLA=oA8;z@|DU)VK)gSLN0mV^q{cSCv3vGD`|PAj35$AQ)Y4c;3H?5UW9>VMMY>0T z#X$LMDp4?6OS|&C)?@F1(wrYZqf3X`Ki|n>b25IpG*x@EW79q523)-7HPJYr>4pGX zEH_8oTZNc6EB%G$LMFXV^KkD?#GSq8ToGZmA1Z3g@TVz+aMarb(Ds;e(fXug${{El zlSW|DB#IYs5#+bWF$0dqMt*q-_t{<`5Ug+L5vmt9uEha1L||P2p${&K@D(*=giGXg z5oE*>NIjw_t9lS}=%&gu`Z(R8ik8@C(7@>iJcvuFu+gV3kbX95T8$ozHk)9+m2ZGK zTrsYUxE9_1O5|o4b7Lf>a0qszAz=2611xiac#x{Gn$uZDmHeFSTJ@*q%O45fa*aQx zr!P2LdRx-lSk)XAQ7E{mKK$QMhKT-Xc}oRkEO>p6$q+cit1XqhmlK;>bLr-h%Slvu zq@f#PsKqve!DwD^#vddAF7Lu-0`|l?8h@01fxLcPC2em|TIw!AsvXQ^&szq?m8nE% z2YYoS@i_8Q5^-gHF!GsxvVxi(e@T0@ld-Ja+hl=)#IWv9j(!L({d6YPfRTF5?1qlX zh9LiRM$K{hj|m85c~nPvrgtPq57H|gE?jVlf-$SRWF{t^z`!0as+7UiRKg>32X4_N zj4Lb|iR%9Fi>!}*)EDrD( z`(uJ^iUCPGW0DK}l{*CkGN&Q`DnwLywDw#{!`kLn9qCm?@L~$kjR1)-0O$c5uRH zPg*uWItY^Q*U4tG!UnWkVt8N8vcC5U-ZV_@CPjbzNYFqef)2a|80i7yf{a{?d+ZbgBr(40{MPz(NW6#6r&8APE+$W1>x$vAf0) zop5moUE<%(P*E;JPFN*_BH`7?JD7( zEM3QiBG^K8Ixvy^jqYtjnNZzsb#`^rge!QGS`>*T9o%0%5y=73BvEnKcq_( z&r$=%g)ML2F%ZJ>KnjZmdoZP!5XVmNyWo1;UZvuJ(xw1uFx1f(xMUC5<5=5qNi^pC zuwV5ivE9pGjj0X}uJCHdjY89+yWj#C!aMf}KkFq+bTXnu?hLZv|AmpZ?|6am3w$W? zP-A1lZ-^qN)8FBGhgYKjQV)pLsJg7$9dzPJ2AwY5z^hQ|z@3|yG3vd5sqdKxQ-_`N zEc8|rt@JStv%Y6o)+fg5YY9IFs}Fv#R>SFy8=-Bb*}4sko`pCN3{1B}J8g+>6h{UQ zVidsYLi8_FNS#^N)JtNKc!wco_5*NVhUTU&r!t%8?tdS8*rdfO-PVFiF9lO+=9maC zi5es`gzVkBAfAzBvlvX6T?w>44*5@lH+6h?iEPBhLBLZnKsZJftN_y}A*uE)Wqz=U zf;ISax35CzA+L7M{AEUcm3k=v@a2vYLi|GyBiVw( z5m73s2CX;}4-S8B=^`e9RA2^}9}NKMEBGVxhlkH8LAj zy*nbaKUA7Xs}nMWUmo*fXdoRH9$ot8HfbQgPSFL|A!;9? zdcZwdU=%+bJ#dWLbvoE+A6XSc7E*gAcef~yW+S_ z9pFX2ZjQU#6ZHfKGWbjU#;her=T}K}0socEHLzsPYtQ(h*yS)ZpQHYWedcq!&yJQK z{on!tJ3A*yo#hpKb=yIeNI)#kr4k??sylc!hFl!HB_HLRAb#H+S454!3JdhJd2uh< zLYD22paBnGZu^fQ00GcGMx-5_3sns}X2IDU&z{41Z0TFSAyXZZ+gScLHF60n)L_}t z(7EpKUO8G85Tw;)Pu4JulkA9yN*PsZbrA z#d&LexE5a63?R0b+k9*`u^LjQOqa+;S2>$3GS;In`k!WVWKy=bBfeB1v0EC;Tl?xm z1DPg;O7n8}Mc|m0G9xM%C*B2LIm*FAf8UkgrI9ZBtlUM)CDB^I zqBlaoU??Z!!|t+(&N3s4f;B_IzS$d`>gVx3F>A$@Rflm-*!8pwchh=? z<2^YxW0JZ-6IlgQ@Q%QGaS=eE=CT>@9md!8RLpgHl$9vyBS4buQ6j4CMR2b3wRiOVjr~p5{L?m zr_VA|zf5Oz57pXcI#mJRe;_rY%A6kYQW3WCG9rY0V{_*10X(8njt~7X)-+s>r~I@} zYQ$akC%F06jE8`yL?FK5i(>5Ymnxs_-dAw9c)!X>Brlbz3mX3p;ervJZi0s1w~v0j zu&w{pV}X(L@>czpcWYc%yH(KPkG1dXtON;iG zTb!gL6X0P`=6|GHV+~GuQq+`i49bZZU*AbZyGvFg&iWn(9&WCu3YdNai4Zl{!z?6M zpT@I47dk&h=Ex@*Xo*+@6Y(rh-y`^sjkJX1wW{nhEk>`C)6Z)R00L5DX#=s=*oP&}vtD*E|k5BJXuR$U# z@ULg0a1NhT8yVOlu8wH>g12<;WH_y69*Fh?Fl*!KZFrVM0p2c zs+Y-If~5~^SM4jO@Js_!d?H|(vJ$Ji?$;*w`|6Z0*1@re&HPtFwc}C?Z(NPJ)Ob#$YH{s@i(66{E8^$0kpp?i~oeU>S5=c>G@JY zMmet~n0B5cX0zQBQig}I5T>iGtdA}m>X(|u1qu>6G+1o2Gzh*@c}J7rb>X=iKegV# zi5^miuzhx5kWkxESULI1A3NhBL)2g3hdQ-&R zG1nIC(Yd+L^mdb!9Laaey;cqP?&aWN_oeIV8(#B(@Io)9} z#Gbak3YbsJA~rA1xCU-P0J#yBiyfdaB_^@GOH6l^4s<0qf`k6Q!C|>rna&>|$TxQX z@ZwxGchfZZ$FHVS+RSgSE?$tNvM6g)RwOCJTNTb}R~OoXzgo;)(M`c`J8~f&{d{a? zZmKt^=2#rF$MqJi8p(=)+-37Co#)PG)J5yL zmXckLDQ(xLp)C~A>se>V!xW_Bk){H)t?*BI0(U^_0Ra=XHdG(=9z1J?ZGP-Jv1O_Q zm#WcC+~s9M_`#1mkNjyoJRa8P3)|NQ)1i3~6B5HQ? zX=ruuwP=Xe>(;s*U~G;aaF{~#J9S1J{`VxU8HmTXSzD*^Huv)=ptLPOdKTw-pp(g` z&k8Kja@IX8;HvO`GyB(vL}K(m;rRliTAxXk1I=Q~e|m!ATF3~BlWPerow#u3fRn<5 zDFRtAjA^d6%+Vum`nT)gf#$V1=U`m;z7OK(R$sFt zgpK!}nrUx~jyedd%yBSj5DS9Zn5dpJcbJ+8 znyWVmR07N62e{ue0PDnu8F%gJ5v*J+dgfg01|!H5(GV}f&ehV>*su3cDe!Z+;5e?f z3ALqWtUFo(6b%PkLsA1({qjcks2toZTOVifCIXQd2^e<=AnpLCI^>#W(F_FUzFc92 zPetz}$Nks^ja_o26BzL(ImXT~r>Ls3y*L$K^q+v2ie)!P=GtjiMQXLM{FQ1q!;5PJ zPCH^utl>*iY!rG9tf6QVGD!rO5Vs-r#|w7!RiKJB;P~HBltc6v2hqxWis+!d zoBfVouW?tH`ce7$VNsW)@P|?Ih0^|`QDlcEVMws25iP_*TQ-QXybTkW6f-bRyB1~6 zyq8r_+%}@oUu4SK5{*QfEU0;A!Q`*Z_PH-ptlC}7f#^Ld;R@5wTDGZV;Ip)kS`c(o zBpN{G>r6GgA`v9t{c8-Y%@sa!Vyth-q##$$<)1oO?IhJfUZr!`jD}YZR7@9eW!3?O z^BWvdMCXC$eW9YhVk;4;vIc&CfH(^o4U@II%>GvqL-R)5WhZt*{1LmMP~Wuk+8!Ri zCviwM70+F_bHFu>n|M_r3xZVtARCFT_3>SS>IUespEGbm={^M^k-Plyna+ZLesT!n zF$5l0_vf+Jq5WcD2>)W2MjK8wlLm1Y$23 zGr)Q>Asw1Ef39b-bHunzK?qGuEIe*sA|x_pw;)6Py<9M3mCSl1L6`h@5tT4aSxv%# zsl?d0V9M3=FlegB_xgcxl7oam&mbPij-lKTucA{0E!V`eB3rm50$p(PU>yuBz0xY)2@ zoc`ou%AOoD?R#^)I?77orDPu^Ku5`^m2uaZC}?uT&_Hl=ogqtWc>Z?$&J{EO-iR&P zYDDW|^t}tLFTO7wkm`uKfcg*Tm6M@S^0xxlpRnN=QOfUTRp2^~a9oO4Bi=n#r(?UH!b?y-bTRd4NRWLLpd`aB>^H3% zs4A@RzPoSWM&Ba~?&gGb!pesivzj}Ny?Dek|DhO7y={EkK3)ad5&{T37@eJ1^jpU< zX|W$Mujq?`#uIO%NZT_r()l-oSc;d6-SLHp6;>e*P3Rp(cFOZ)7JOryY%&f>Bu84j ze$WHJ&4V;C*r(I%b5~Mot+WXgC8ubXXkEbOBao3%c{`ReBRbEU)%!Oyaa}ukMwN#Q zY7n&NYd;vojmQ}yIh!{fpfeSK?xitET_@2BdM$t^y}sRb9|=WygAjOw|Lhz~w`6XV zg|L80+i1G{WWxLe^{v{cKfN_;bGLAfCS&c^oGcR zWxFu`d7#@r5=^cWB}lFSj@D4?p59qqe5XO-$iBh=DqJ019pq0jPl zM|KDyq&O|?s%QlwsCi@QJl;&ZgDu(6+VGo(-*dH(THB{hCx-A<&( z-`GZmLTaZA@yjulq8hO+o_fDL4XAw#9DkVBrsL;d1{7*N2v`QkIPciXoiUX*-{^E+ zl-c!vK8smo=-Kz5A@drMr8jfplni0BS>n8-d{Pe9!ER{3tAU&{1aR07BzAG{F8&OW z1+Q>l$pC7<1GEDPe(?@9LR8TX+Oi_6UyG+D@b9;B)&;p2n#wtxO$6@b8tpc&F?Z(1 zx~iAPC3<}BZKI~ON;k+GpI0~N`cSiQq(_krmhXfwib^Wo-v@XZX=ehokx&3buYyg( z>oqu%52v%RH^1ed-mdMPE{}%+Ulw<(_gT-PJjpH`QYFdX0^VNF&1UG^+ zC*VJo*y%#tVB99X#t{_LP?bh>p%mm0N2rk01EduYcTwKjZJP08WTko>($E^3!xkMZ z%a&w}0W$Zn%w(5fo+T$zc0@jK)lst!S9#t<*ZR>NJp#Pn-)Y39>hhoX-xcTJI2+`i zqPoph{(!U%IO4c`7R%EA#JPatDOMr+G+j3>4yGvEZS>zaFQ*;e>PHl~X~jZgWgExl zvcGRX`PJWjqsLS*gB42{8KJHty8oj#1;+W;xT<|%84U(XaOiB5M4^Jux@l;6U6xB) z7f{Veasct5Qv@iA3d&O5o;%FasRNdRD8XC|9YJHLcT00$o85<>_xiMD{R#i@{bE99 ziRTgx-oia#VsC0rQ=;=Xjm~ZJ{Bu*1T_abCR)2I++K;%X6)~A;>Hw-4$q*QN{XTuJ z9_gZf?eX`8NTaYzU0-B9$W$nmF22D^)-P{5Vz0k+uX=!eK2N6BDi5rv${B8@h56T#tB0y?QP|HeIcZ+l z*bMotx0z&6C1j_e2V*%MlIlZK3#pAy2^mgacM0fVMHW|>l7W9;uw=SUwN+~IGCTvl z-r@K_@l1et1NwJXW>DE6?-~wJ>L+QkKd|DPuR;C`@QXa`vv-hpe5D~cW%U|oDq~+Mvc0jAy_B1^uW;w{KKc zOTfs_0hVuPIWRX2(?CuN87K)ge*gNjZu}>*6|63jIA5*%dS5{t<A*%!U7>KT8Z*k8;5Ll92Ch*)5O;ejh(zF07N0PFEk^oxL*l;UC2< zBzWz`uh#)i;0y$aai~KgT8@HuQsZA4PJ)aTVbG-1Fqk0%^(V zyyx~SoeTMQ4R({{GUSaelXQlz(!3r_di628zZe&tdZzF8q%MjRXfeeSL z?GTo3)I$(4BnjM$zyFLFa&jlPT&rK5U6Yl$iVaLJhAroX`aME%Pm^GzbiR>!7^qLmW_lZXJe8P z)w9#lTk=UNb{SIyu`B#sO-YBL>_VPYD#`fuRz3uZ$%MP>6?>X6TdAr2__m(T_FEP*+b6XGmRY=cJN!Krca#0!Vw6)wNc=$Jc9? zwz^}95!AT_o=DK;Cd({kjXIsMZh2~{w)7=toHB@67vs)pfAz#@Q>hLXXRn{h@(4(C zU-hj@$S@qYEosa6v>zZ}EHkm8uE=Eq#d84TXx2*B%WMluR2+CCNCmT2w`e0m2$B5@ zjLjNOG{qq!+s(h6g(a^kxx3?}w4PwfY)km-Lb>YEQ(FxKt-?Sjh{rxXhtTbojp#hT z@rfnWAqWB~H62j!$PIwVmlWZ`epsxsJ}Pq8z4>9$cV@!D z^$>rjC+M`6huf$H(;D`;t#`(L2DV+2+$Qi?wmJ%?V@SLI z^o}xSXUWzBb0$Wx_0)k$I#Nw(@nr-I{2FlJD$=aIogM2w1$=Lz<;I@#?Uzi3@b%v{hOZp_wW$(yVU*j&&KMOrU4jprve+QFMc8L6g?_w*cni5 zG-cMcZz(YkCLG;sknaU_N@ui3X3-(>0E!q0O9-)Oerqd&c3JW9XfH2<2F<=H_pGNt z&Q;pds17q#e9%K?{-tC7&Rci_{w&GDi-wYs%w{OHMws=4wEpQgP;_NW{ZtMgpP7FZ z%zW3;CUlYC0W?ntFfjN|+g@lt!-^D7Pkqi*{Vhp}5Js*B`)Zyau)aE|tU79vdfFck zYcy&6sSoV3a!TX5Z5#fNscUSEv+cIAjV6t4G`5q*wvEQNZQFLz*lcXJv29!L%yYh+ zKd@%c#)Wb#u`esNRMVS7m0?EClsWSZK1#WT{Of@w-*Tq%eOuNI!+Ha*xAtI?k_Kb5( z5G5sdo;7!V8ov}4gB$dgOvu(u1q)#$6b}G$6)2Ms#PKUDa%Erbg68RB;EO^7ajv;o zW!iaV;ce4S<7E{p5y6H%y&er4+o`_A<+>ww-z~E@6pRkhxJw?3KWV}2Zxc$}Io2-~ zNG}8zkAT;=PoD<<1a82(hT;uy3E7yCL*e00hvoTFcp#2(T{lalhwQI%aZ-=~?iKqY zv&ZF`M>tIT2AVtAHONbIsjiU8i06O(fQQB)7oj|oMZ~sf*8HjSBr`PaVwb2>$n5S> zAauO{vj39#Fy{Ux#F!PF8TZ}aLUXwgh{38L8=CN(=xP&=D;$I>`{&kmf?FejhnQc} z8}Fv$%Yxa&dOvwT3z~y4<(M11ZGYe&GE?H2gnDVfTlstM@c_r$ff@{PO#GG9pxaA^+-QUu9mtuzb9|^&^7w4BKte|L6g7 zfg&ewk*~6I4`!f08qj}6X#+&OUBT_7ao$PR48OB=I=$CgtG}V56aC&R;PH1I&xoc} z7>Xz*IbfuzW!@sVX>kqoAhh*fc3()dzSJ2COmrfbEXJ4D8T)cwERqOJX5Q%vh&$=O zEc-=DP2KkI&55p%Oxw{OT?17dCFA-BBkg#cezR-iq7O;)6An{F`$a7|+1M2LM!(dO zCx*q%lv32x;9mge|9BFMVVW^)k#3!T$p=I6!W=Lj+kiYGRrw|xgWr;_JM=R)ODzsr zac&PjW<&DI+9pi#8WDqv$VOF8JY|nmZ2K=PfXhrc88+>RMN0q77|TL~b3aQ=;(p8l zUh={$pa`VNp!zR_C|@!#`R@TGO9Ix^Ak12!D<45T0}_7d9_>#Y`Hix5FDss*L1Au@=Bh;$rmgcb^+-js{4?WJ&I+6n*ZtezyT0ZXQ^Pvm7jp|B z`GMjIq2Zl%e&K)T4R@+LzSn(p2|lfh`@l8R(l$%#=EUIOg(PBZQ1E1MnA)BF^;>7B z*zCt^kR43Nyp8dKDmOn!KcC#4L*Ov<606WC0$}(a z+ErA;d@x(xdt%#n;8=^Z>D>q!3=Ynj_n26WCzPf~FB-o8$#_e;{2NVmRM3Mab`xDP zoDZt}t5CwOr5WCw3>%a8w?~E2aRBhcPM{D%5Zf(?J2L-zHLt?Ptrfa^>6F4WnZwbK z(;$-0nB36`kJ=2>)SJk=hAvYCPc0tlETzhB&a%T_1zZ+wDJsj!F-c&mW-Y_2IdN#J|}-cknT7CM-7^Se5}BI#AXi z)Sp+3=KUX%2dzj1eHLcIfNbkQ-B7Mh85E|@HihXL@3H^rLf^;QAt}8b&bPU$)6`ax zrs(9dh;S>%lEVQ#)d^Vk`N}lj))*@(`Lj8uK=&3Ctu{i7|}Xt&>?5` zlXQ>25={76!EyY>usMOc8o}_D_BTst>?~wx2-igk4&A`Ic$XI%wwP>Kd^+qm5s2U` ztmv-Kd)0o#v)d3Ug?Fqm7x z?&fAtfB&9bB|pTui_m|QIbagrlvZMR%%fLEHNchH=YxEpa67Zk+LYs`K{`9# z<@%bUoDB0Zi#ur@>FE$U?V|yVRx$v16^s7sw|kf^*`lx|x@fDxkuogowELagKpD2~ zYYL=Oq2}~J$35e!H*@>#iab5x9(|SQRA$xbd0bgKQRWJ)pYXk&K=_~C)Hf9>&qL>E zs{}P*w8{a|3Ia)RjP^W$VA-^cSb(4l`s(xUC}`LR0r1}X_pI$5Mz>VME}z_xF5 zI$Yv(|Byq!c+W2X-h?_Q4^dhvbMDpPpxJZnT;)6|`a8Hh3_|%N9CHacD2v(!$TMT% zBLaQ$B;WA**p!4SRCHp#U2#~d*3gxmRTik{Q({Dkekb*DR)>!Hi^BRg} z5(e6@nW$ykkV-IKu-|gsNF6y5(JFyeIty%RhpyKdu@64vf)e z8uOi|zqvY{2&o3defsgtIz7>I2|2B-TgCV?_z&F7)Wc&2i@&Oj8IoEOKZ%tbo}UuI zPW>H-jRhj_1CTA@P9eoOHuB10BgAP3YYn=(U=7@I{|sk_XU~fDX?vGrJHcWNcC%42 zJ20e~3=$8edBeNGihJq_WhC$bat`q!E-!kuT0M0O5}L_S4hu*s1M1NQXO!V zdkDVN`m~n*(VXf+<|q5*xtNvk?>jr~6gfLe(FVzqTKPO19ND+VZ?D4Wk=*Yh9n7dfNRQ~o4H97{2Ap_X?5rE6>M~u+^y)9=?aT1}a0@k6s z>i#`Jl$rjs^1t)7hZ5QalZmRpC~L#Gv|v*~!jYCz_la*=9Esmp=p zIr8$Yxx(^$0VGU|u~7=>^u4%jaf%3^&Dd}XQ>mmf191T*DGVyITWB;K9d9OYXMeUZ z&}>#fzA~eC2<}{uXfiDF_nu(zC8M0|7u3iP76*o<{H>hSw%);d#uZ7AjZA5&{v1`j zo+Gt6W`1N>dL-#K2WY)2TNZ-J^`qtt1vH43C|yerok)%QM-6DX4gkHTcdVdKU0`Y0`TU4iNddyL$I4>7 zh8=tOi9Iit+cE09&_rM05r$6I;*E4Q&Di@76~TOJgl<+Pj1$<|B9wFVjxRp?hD}XS zl-}^IVfOu{>|9`91E^RKw9emif6^t(lm*a`9hW)^-HOj8P0o+{`6!C{wiZaE9~>>c zkm-Rm<@Sr$6pY>m<)JdEK;prA(m)fs7Munh)1ou(#dPj%^1h{R?06`o^GAZ22GA?P zKx}lw9FM`NS!+mM2Jt>z*)J3C;!oJm;GL?33 z9+Exx$y>cp7yE!0K%iVfa0e;+(Db6zjT&98i%{L;uNc>k>>RmK5L^!)n`3Y=bO)Z5 z(gRTJ+wdUPPrS#3%H5Yw%y~KESh>F;L|Lk?5YDbbQW0G2m~tme>|^BEI5V3;YhQ%7AWmoR-%RV+&@glbD|-84Yw7%UI%L=8>}KICf=#3KUB(Kr<+?z> zGTzn+`aKRxz84h!&?}=U z_kB3m7BD>>$#z(KnEMhOGn0)p$ZRWEZ3EaDfMN!cU;>3UOE<1Y-kV=!q^xttC?pxq zT*~|UD&ex?V7i(2G{4zk1yx1kS}O-LnMgKoYoVPE%erMG;HJg$8e^p-&tj5cHCN zPKPj-!KG^qV3fXX-NQrdASrjoZ*PO%m{l% zX>8-+&oJsDRmtPoX-O-LeyForyTW)&?etiFhR-Tf-HX1G;P+Shdz7j%^c;v`T%$CQ z6wLfVkCfRA&%r$IPxZ(tnnGC6s|&*`E`^sNQC(K{&tCSKA{AKR|26PmrdEtb7P6jf zQ@LEtu@2lvzD2tTJ)^uRp~S%HY4gp+hWXS82+KCGs|`tI{R$C(e-)8)2}qym)se+! z`zJ=NIn=@LImjm4{~<0wP{Omg8v(?12JGFRHH5%4zZX9uh00LtG zNR?fTwd$jWydxz`z+ZHxIOWUd@58sGI{B+&HGaZ5P9Wm%4GdSkq76;!%>>{{7tGJz zFn!}6<-|U@in!~{NX)zoIl`x0xKrk{v6tzJ^L5(?Y~dhOfK|T>*2ZZBR2y!sn*iI8 zQHwHrK*8O$c5r>gA;1_)dHZFzgT0v|Q=rosJhxCo>`j77oM*9yi5V2JV;fwz_`?T< zk#NpDYC?(7e8sSaP4TN%59>chcwS&(2yV!>sJ*Ds7RhX@bQf{O^=>m*#gQ!{kBqV5 zOg`uB%(fjf^76YSK;E;1E@*fh)zRefP(JDChv=z+!Ow}QZ9Q0rSW9IOb#q;~WV^c8 z1ud)*cMLA~J`#hW*_pAE#s84k)ftu@==9b6aENrRb*H(?JoI2?+r8N>0#qkZ??4)l zUU|Uiq<|H(*AjgsnvTeodizaC@ONkVg}ajNK;JkO{9fJIH!-q|`7sD6D_@}~j>9EC z3MWOT4!-+kxo>ShFWiIZJ>Skbw8|jDXai5XGynU4CjQGTEGjP$LfAne5<_%-3=mLK zZ|PsNTHI&RKWwqC-kbO%-Iz|MnIM|YzqABC@RnVjM&}_a8seNPM*A#bOVLW zak6@gi3|_kPrB^@PT^=Dhg-GGmL1 zgF0yN-}9^SkE;MDB#x!#d;57Oqw>7ToUOx*gI|174nhn6vv7$aR@|{}<4OatbJs@RRbN*MA?AQZ~`bFvI)f$j?t7n!|v# zGU~rPjO`Hf5a6{p^PaElQSh&3?Q9F1t!Md~mohpMo%{@HH)$C`%_5HWLHs=M(SMW7 z8>wuj8YM7J`De&r_3}JUP15*`c*nZ!`4+=gMPj$=&=XfM(Cl^p?XPX3Ox^iX zGPaF!rb&BG3BnS2%!3Q_S_%_di$er$)^pk_5B#BhPi0fo@Kxct2q+Ww`~Hs^j7}}> zNOYFKIS2wk1N8+4jgG-y^q+^!uPzmv2mWcO>k|4AO4r7hS8nuES$uzaS>SVNP$#KN zwCos9uUxb<@?VtBr7>sLJ$FXilKqQ0_lKM%=BHY!nwqWGX$lwy-O6%xQdBuowCNgMwL zn+|m_%!a4Ni%rLI>@wH&U0!@jp$G;MPM_g`0+H$bmj}dS;7q@6(}n4o+_^n4{@i$X zZ))RrJ7&C-^C|eru|*zJZ8*2^?BTy%E2i;^3v_|M5{7Q!6`8YH?Q$r=)p~fm7t!vl$JcL zMuUX~!!JJpl#n2SKdS+ui;ph8DxshXO-Gh^Jvhf7XtV|3>Ew37ZIL_|z3`2KCcV0! z>tA{6WvvqbfYdRhZhAKMKN+#+goUi?G+*4M zwsd+UsI&I-Vm|dSGN4Lqzktx*fbTZ2SvdLc^ALZ1hP`c}d^(uSoESF7>wx^dWnK|i z7Oz@YsIc7;h($$K2N2g8*W|D>+pWGO3M)Oa==|u>XtG!4(fc7%hbo^R$zER;>tdwx zMfVPbjt4v^P0OP43iTT9HcY6Ko(Eb>f%qh0c6CUyqQlbGjqv{w(MHyx^oo25r84EM zLgo23zT6=e$W$9vJqfy8w!Fwnwd%H+S_>zH2VkXhvx(Ui;Je`iuIoUZ0SR50@Ab=` z#9^6b^E#u#{hplUt8t1UzOx{WP3!`H=daO#I49mZK8 z<8J9`W1XUx+i9fw%X5WnX-UPbPm$gR5!h5^hGsqn`?IWGK=f+{%Faw*XRsNQS_lqQ zvg{YWi9W==)h$%54lpnSR!E>Ef!f#hr%v1GgqUPJe_IA=|3y%(`74IWhX7Hn4;r5$ z#`?*mdL$QJ(xOmkgFuT7-fy*sd7L%vbZ=7B5N>4C9+RZs^bt=NC%+U(zv-wdFH@`n z(|-~`)_U&yqoYT|<=d0`XSf4?V|sPqg8ZUjB?~gHed}Pp+H;r^K{rKJYbfZnyL}xi z&$5LDMol%dg*KYAfYy$S&yShuwN$R}_iAgSFv$=_rSaFafMXU=kKm^u?fsvYpByPd z0oKxKW8Vm)(}(r89$t3ecwqN`B=S~+y-X+xp)o#*Ubj48HtR(*v#qq zJ9;jT=VeCU*WR{8Mw0xSIFK9{Xz@M3VtN)Z#lOnvE_`ZfFXT?WI=zK`tKw0wj_(-N%uZm16srnSI(GG_cn;I~WJvqVw^xy? zd)ui3oD5VWkPJC#XRXTrE_gH+=XYKeQ!L0e8Li^6$?i^baCo!TU;gA04F< z=;_D~5PHop-Oo;fd+uwQ^!ew3LMfwv(MGfr6dkOr%LDs%;|+8GlYwFcESz){PR99RW~OKrMn=#pkOqZ5scsY2=la(`U68kCb^hDf@`@287j9z}GUdEEREk za>B!J;;}61T$_!FJGb02hxp(oh%ws`mDF;zBDfzIzEd!YPW!k9kT8PGh*CX3vo!$q z+V#gUv+U2QoOa~{^xt^yoR_J#7;HSY>QU!gaY5b>JktP(m*8B(6fUsyG@%4(f<;s2 zf$wfx7?WDmX6^Ib1sLc-lDthbNg)GFX+BUfC8;~eYlJLif!1eNg zcWtm_z)o>BOa=#k34RSahn^_f7`9K>h|O8Tx60}Mh(V9Ig@_@Lt)W#W?{ue29S@DJ zzSi36Nadtw!RRkufry|ON7jv(ib=s$SD@zW6egH|$z|#MNVuz9dlVJ3HCQ3=H$6(h zSrF3V*o_I4I&?3pI=EVKN!$$oJiLV3tac}zZuh$Z0_%7*%$q^WM8Rl! zaA0-K0=Fz)9&vq46Z+P{NUVJsH7?|6>hlQoCvXNy;$KLcH2XSqLiq|S(&&N0f43pJ zc)9hbKs=c9(eO6<0*tuOAW->n=}`DcglPAzpR*I?M6DZofezURr0E`LC>f;1NNLYF zTXPEqH$#J?>km^~H3oUaoe)lKM+u=C9R*EFiJqkNf0ODl9Z0 z4|@qtDl`MrU`YEkOEnB&n6`86{6Oeuz-CBL%4pOKw@2E~Q**k?^pI^Od1-=OxH9Y3 zOfNurNQr9sphp5yA=<3N(oG}-5SQKJ(ymIG2-3e0Udz3_(3y3xRtweF55J?u>R!57^y)73-v_CH_|Ho9czj9;k6)k=ESAr0!Ki%07VGuW-nbzmln3i*)^7i zw``nfS2lkUK5yF!bI|5k;V5d|mnnox+z=d#T7hMo`p_2{Wh%E4W2;7qr32_G9qNGH;X zV8{#(v|0ynrX~o+!_^U{=#Ck=^@}1wEM2I33-=t*#`J=&f;Jn#^TFpNoT_`PizQkK0Su-+AWuZ!#4eDy zxA3^RvKmVx5ycor*iBzQcuPL55c(x!QB5!p(N1-4&mePk)Jy1$#mN6ZTe~|Fx&Jmj89y=dTsD^> zg~lYmU;4m4#kSDP@ZpXR=#_LpU0$Kh=SJ3f^SuZqbr$QL`*WIf4l~$SDt#a)C4!*Z zqDS+H)n~#V6`MGM{oO4Iq-E8**o%$cO2*B(?ne`FP)MyO$TWvw%xeTMp2>8TDZ@YV z0(7T=G6Z#9Tj!Q`ylK#n>8^-Dq$wXE@aL)hoVX}+aZ+6pRCAdN44m%p->`gq2i`lzh3Gyf-i=6CMLh?V2Owk(rE$p6{Q`AH-|3mKsPCn%pA|#&~ zLL%(^+*EKb>@G;nwVSnG);34k(pB>H>WGo>4Ha(UUWe{0muwfq8ag4D*LoZd&3M=$1u*?LBhG^!`#uHD?Z16yrSclC!}* zc_x^0VPR)j5Cm#pp$!38%k8IH353Eke&rVV%56=0OdDm3cj!}mE4`}Y^yW5T2QK^Y ze;-C~3*(pJ&tj5%f!$-E8o>ZNyBa>oS4(l)Vr@mSJSIGuTutjT|B@tHd@Bt_$CA3U zojs9TUi(y{{2HiQC3*7R9`@HB&+>a_mQ4*&iX(r&qUTA!mP&MpUp0!BfR+Rw)8C6& z4Lt<*T>KCrNthtf{(ik3_hdDvk*5&239~L@Zam6;PvLpD(U$^B$mRgx8u1SJkBPno zs`D)YTMnKZOuM{_{Vj_n=1ny|5QcQ5a}TT)qXmVf666%_&xp&y{726}y5@0Te^J|` z=ds83p|T!#fv5KIeY^=rbkzP_(nY(XU@uOHH|qg75by;7Ag>G;LiI0FNb@M(Xv>7c z!nq3H?s{U(3N1d654&i){a3P!jTmSwf0LUw#bV1$h?j-7^bBdRI(kDm?XRsi46;a|H#aU-aXAJz6 zM#e6}z`8a~NZpenquULARu*SsjlaR4nAgq2S3G5*VvGga=mT@)NUw>~!MPUuj*@e! zQ&tNXULZOraHG;*QgZ!x&Tk#_@<1h2l@9vdl3zIXKBW^_7~z6BKA+p~u-oX~#ON0S za=w}MNOg~We{`@@+d|N+(osW5W2sDx(3kF3WD&cGC!--)X7Uh6x#wPgt2lUaa0TU8@4R$ zA|<67K)OgDO4BbuR(W;)gJ}$IQgl8JAUajO&Boin{1+EIUQKoE4*J?k%cfs@tF~lq zl^L5O>Lk6MfbR4o+K2&?-lFCLxDY`&12WgagLSJk;Z9m%$`52J?&%_W*VHnX~ue)l?-9(AJn;dDJ6CK z>2jhu5Fdd+>~P>k{O1eHb&r?f_9g?xCP`y8%}>R=r8TE}tz#suF6Ajg!v)F(amCTc z?oa0u>BAhh)-8e#mN+~l78t!p%|X**7bYy;N$s z+GQzf;7HmB&ZMBos{z+w*0P%J29+OK_7jn0d}H|UAN>GW8QxeiZ{@RoY}TBeU+dMg zqt|I6F6mOTpN zIid80bF3wvEqfp*=!e+;mAUv{AMND4@&$P5^lu43*NbQ73ZN^E2ytkknfo=Fpo?Vq zynt#S&C6L~8S>4gq5A{83#@7g?k=S!M0 zr7FfKxkptSlGEs#(ADQ6?99-%JDt*&S|EgFdKlrmt`aR80)R)P%`{l(R`cxLs6-^; zJ;&`fr1xM5)I`)#>Z<9X#kD4uNCc55=ujfYWj_KJAD{=%0Ts82A~DRxY5LhX5mR|i zspvLMJChFa)IiLr^^c8k-DN_=+`x$YgYz+P4Fkp`tb-J`CjNp@M4#Gv-rCGC?CCtQ z+2(0$4>dx79@_T4C7jElSQYrGG*FQslyF4&a_1+2@HXxeB3?0SAr5_naB(C&zjed%#Q3Il!L+c7YrsRVlnDM zA;ZVzKH!Z25(99_Wu&)s-i09;P`2h$o9rqee9+tyr#NU6kY)cEkABeX)=#kihMpKz z7VYYUYZ)?WJ*Yokb7%mVAQZYTJd}CgA~K-G*X^A zaozuMLTj^5=U$~`0{nchPeQ1n2Nfl!QEUIz8YRhrk* z=jC}Z2b!04^}eUv#Y=vq*e=Sp+^QaZG^c$O?4GAMNbhFVqspuk2aet5yZlDlo2E?p z9%`&;y5Znnj-s?JX)DlJnjQ5qgxDA_;0Pg5VjzgYch>mpZ!A3oCn$OlJ$$aGpdZW{ znAZr|rO*aqdHu|Y`t^4hf7RO4)%mFMf^-l6DX*}4RI`xI_CL9{COO|P;~NOdqwd#b z)#e^=X;Hr_Re=MWK-B<=_^0I^K~ z!C`p*_%~kbM`(q(5s1f&Gqn5uH?5rvB?8o-bwdI{ecbCpCmEpbKJ3 zN9F-+y+?eA_9RB4W`oTar9aE}Q-|hZYTiYT6ihDgRSJmh4me7pwvIrJeKn=~)@G4( zUsms6j}Xa5#o3ZHkq+5@Tv_Sf3d0+63JwcX{eAF;%39nfg#tgyEc0%b7Bf0U#rMG5 zS=MFc5fHk?(0l#95DZx!RSg>obaymh9eix;R~Uhqxs{Wh;yO0gBWeRrRb$%P% z9OC)9b$(oZJ5YuRV1BNj$P5SqHFEpCli3Dp_Ev)%cRTl{pD=XcfXsQ#WjGMI!zQfEzou(f_ zTIh_!l6WfJjB#Beq2x-~ESK+eY|%gi!J7bUtfMG9 z5nPSeQjgO6I#-2Rr-P6|1j~bY5Cgpr8=3mKzciaO{~;9|sj4!>{t1GP2&hqU6;gC( zTxZmnzTR3W`UNRH3{$WCCImMW#6l@bpyDMJO zn8z(s-NE4l-guz;DRH3xE8}&5<>fevkn7gY$JI9t!+Th{EL)8Wy`Zo8wpqXDJH1H7 zMuxf8yG1nfayJ74g=TD_cmR!Hq(4aO(`i09j;f=PDT5`%0<0-pn-Z}}m#|4`G7vC7 zU3Uq0Xe9$}`Zn25&Dn%dDDpRVhDXyEhpTD9Vs$1F#$9O)Z#?#+V>=>(fL|v9ViGE+QK$F*_Y;m7|9#|;tT69j$2Gh$jGhGHnX*c#5@+{UE2nZ!mRv@VKY zM}X(Ps)-IX;dWO(;Cuyz4cssNB7->Nk=fm{EfpZtmh4qc+@Fp6QUUw+R)Du&C7Ad~LnqFiMhAZ{2q;ux$>=CAWA zRPs+I5uYuy+4O7H;q2Sg=Ml%~6RAwH-f=DDT~m@qnzZfrgU3I!5ahu@?N5@=gt##X z8xH{&d&j+DD4CbJar^z(JEn``kL48uVS7@k`{&+(b_Y;ZK%ISNz=W`4nTG!AF@BC< z37_cEr16^bV_+CkGBq?4U$ZL3L*zM{q00hezsMkqMybNqv_e{NKXBotIbV}DegV~4 zZP-Zqxn7&O#jy1DG)fiNri4-f%$`_AoCGEsyOHpK*h@6%5c<}~j?{K(>k;Ug3F2;* z@pqM!9Lq!Kf8#KoN7=~!s$1)cJBb+KtgEB@{5J>HhFLg>AO)pBuE;_8Zx(H5DRSTn z_zetDQ$VUMMO`!{vM_OidOYr&mVwYy+Q8TrrzUZ}bY8MC(D7ii5^x+3y~crzp)z(&iU%;uRpYH=wurTJ`;t)w@U> z6xOsaQ*U4mhcsaAz3*G%P47|`@s}xmR^*t$Rh4pgz+{@%r}?!Uex!6?Q*9VZs3?vk z$%hS?Mof~CGfs3gs8AD!J3Xu-+Nd1RAMt=rq7mDQC6s+6Gt~)QkYgMf1iym!NnJ4sF%)M4~~vibe7=MeZhPsfzYE%j40N3@%;<; zl7rRMU3Xxo4X7qii(P&hF6(-6HXmC|U)R-MOBxEn(-xegH{0W1#D}sYJgSKuamn#U zPn6WN0TG3*Ql+z7_SoTf(E3Ml33U7s!KaOezY2uIHSG{o`gbjTs~m+P67*Tq_`k8lYnH(sHI{6F^0-K zDJ-9di3jq_940XIx*Bo>K}yf7m`5t=_DB-en>F7B0(la^FtDWyUQ}8w`3Q>~8sD9K zue59K*nL3nC|{#qNfP7(IBP&{1AL-YWX51YyBIH;2{Y~c&%jVq;t#Jo8V=J*>B*mA zEspVDr}(vp)0UImBpkWtu`F=Uu+iP{Np=ojysMJ$cRXsYU~-EMEsx9(RVY+6d*j1?7yzQ zH^(XsJVxkjvSz$DKkw(8lU*QFk*I&;0M}XNX zu13$=c!U_AcM7&@8+b&40bGw-B1nX5i?V+vI@WxUxxj-gknca_el2wA3f$w@%PSnY zER|fTFjoouzXSkX=2TaaX>e7NE)Nsyd@-mI=j)SJnAQ=o#Vz%-1M?kwpp}(VHZ!9U zVV+C)I$e#j>GuSJMhQp3Wy~YzO$O!H~zeevX zxBc0Ff>Nql(MMH5rgbh3M^C$ePiP?c2W8)xT@tAKM@%sBtAe~QeK@4S5;5NFRid;Pf@Nn9ESCr z4#JfGc|+AH2=OQX1Q*)AH=KQo7wRLWI`+#M)nH-_2{f zz@;?hGFOcEkaSj8v2yu(-k^>db-3K>ub~gqykDF0+(%foTu8&U#^iLvjFkgOxicLi zuOL7?a{fm(s;@E!zhp1CO3RDUCKfG6*qF*U&9S*X19$P7K5eA!%sjL01)4Qd%a0t9 zaH5Uvo!7fBJ+U*(qo$+ah))czSYD|PI$%!%$j<*;41T|WyEOxhiHyt6?$|SZGQ>H` zn;%8zH?E*X|Ga6)o6D z1z4Ix_;?F0Ey2fsf6^aN7~9Tqi*63TsUbX0AjjLjRxjd?BzK9RX%RBM)z*Gs_dmz1 zIJ}~W3BxEW6UPvCFLo%0QU)TP{`5$>}<$>Q3F;M5eJG7>HC?n!;l^^Yq5=X~7FKzk6~D2~@D zLeO;X27C1*yw?~A^8XC)0vLX$XE9@Qxo`P0#fkUlfkl>C>VvGkKERXXbbd*&pjlG3 zjF#t)PnA9lM84ate?D%LP_#svI5vn8G-?c%`0>>Dv!ZRX9~jCz&_2O0G0VFx!X! z44(ytClHNSRTTU#2wDDhFT9XIsJXGpHpv!7xq0_eA(@~%54Is%Km;uBTT^hem@Nc@ zaf{|G;ldQ$>MWhTael>3+E)f5&JG7*4S|-U2Eq9TL=52mx)lJu55TtR5JnD0G5oW2 zwL8*TdwBV`q7@=EyBc!!p-5Y7Pp3dSC0_AHAC=)r6VeXe{99hshOaS%2AWwv9`bSP z3p6bRf^4IRc6ed%x>+Kb+ou&7St8fLgzAlQ1^%vbt~F%~ab` zne4wGT|1lBHn&WJxyo|mqcCQbI~FYfR}MlPwsQ$p396`5spqEjf!nj&6xh;N$o6OW zQEI*4UqSBwi5hSI0}xUG(>DSD{JZ_M6pllxGY%88iQ~AfhY6#4&$_3IH^1hCB`oAt z`=WYALhX4fLb5*bqfYo9bw*dPS_rR&5XEw%l655~Cc3u!_xnI5EAJoT@?LSeU6VUh zj6Q&h1M>CPTsi)IC^P!IpvulDHuRE9b3WVX&=*wVt;7wx6v_yF{AH_is{Hq+b$hel zl0*5m=8~$HXkJi5N`k3*X{orJ=7e#hAZ>{5t^$UXi{q(NXr|&nyIBG0vLQ#~=S#T# z-P%$|n_ACcDQQiC(kH64Ou=W}9c?P+V(zAjmWlfF*5Cx@Ku!b1;z~vVC-@lsT&wZ> z%v^Wqp3G8oa!D9ME{-#r#F%h^06th2phpW}D3|bG?gwFMUAef^Q1S?Yg)lX)JI)Qo zXtGNVI3F^-C1U&~1{J#{&Lx4-z{UvXsY7z74-gO&@L# zFZPZr#RtJHrsO#;3i_psQ)UfrsRRTxIlxti^?n;14t_|Z#XAO^0fDUiLF@Y4G!jK`cS0?+S+a?0va>~PdNCgdOcZI{AS@SZ!fBFznTSEP7NBV zgYQBeA~;I~$?*8EfTTVQa5DrF=Ci!+eI`-8E2}QSMm{nxi)=%ZaUZH6A6Xt-WHCr! zWa4iJOWHfvd~j%PHxtO_TMy+<*MI7zEMV-uDH(9bH}Ucb6Es(C?bL-0r>6tdSC{$y zY|(UpBXvL`{GorF&qi8!wj^{!fetKRZi;okFVkY1E)NKp><2@rf4!;jl37k5Dj%;h zugtsriY|lu;cOd!K?lJh3IgNdZ?1lTd2EY4Yrz_qi}R$sbm#It0oVctvf$U;8ksN= z&nlze_C}xVT|BgvN4XI*oWf^J))`MFT#+^2MP!osa_JVS z!BCmZsEVJf!3B3M+7UgxuaVe>$Hk-W&yUwK1SSC&n_re z?|G1McoZSG|0VtaArkt1L<-b*+aTrr9Q0mU`Pno%lXHotIIy0`Z^0yw*Bp5)Mm&d_ z>mV;IGMlgghqasddifpTaab9^+W(ry@WGJ8QkPko;7|pk6}moiLtEPR>#QKv9H+>P zxPdww?|4CsUhqZ~`8@qlr#9N`OGLc-7>;$Ux;!<@hl~^lBn(m-De59J@?xcJI7i42;;(tFffY}!Azf5UD zDezhy{RM7KHCmtHG$(d=BAY&IItEFl&EKFcKisHE`cwbd7)!_Py`jcZ%*!~Ls!v_D z>8?M1A9GdAo8Mm!$wfMc^3>3rW*zaj%gt(Ywh9nB8;}tbEte>2)dd36#ZA%Ha08eU zNapm1Wwr495e78WI^H_TVIHC%!$w_Vo%zQ-(bxO0no!5?Ux!)_lUS!NYp>aIRrs1U znH!BO)(d{YYh{K}PCUSf)d8T-kb1Z(BwXP~^t^~QBKvso0uS;HI@pMIo@i57Q`{tW zWLK>_+R9NnAIJ05QZpTe^pvdO$w2;EXf+1whN9}Ki3U2*9jGkTUX68AugQVp+<|~t zcLK{~5P&|$W2p)A%~@Z6NQnL!j~qTj9oJCK#UZK%S%nx4^{gPa() z;aufS?eToRz?hRbBlQ>2pR9VbY?ukz&eF8siZrFL&d;be$~Qbf>}5bED_W4eq68X~ zxV^6r(Hk$zuDB4uGrC(k2u#bFg32Bk=S^;9wBU)~R82>-U9ei>i--$VQyy6_r~Gif zNlg01l3y=krPr?;sR(PMwY1GqH;x$x`GYnx?=f;*&Rk~IC#-av`cl*ydj z%N1GBHU^4RzM{JiAD9p&L0zJ7kvo^UCpOlkuMZHtrG++fX7VL*q91LtTd?c0^@b-J zU3OvjFs#SC>vXf7cYvk?8S!hCV8B6XqtORHh#%#u45njYTxEv_b7ES4Y|GZ5Hbm;& z1e({Ubbimkm)2G@Foaw3M#)dZ@E%mV{7df6qC>VhZMWYKg5s5p|<+e7UQ z*balk0KR`fXjilqkKixmJ!SZ9LMAe#J#haHXNUdn!#HWc4+DX-hD#U?19?tP?A6IB zTQaeJA9YTu@DzgMYN&3LD3dt3;Rsos_q`5wHjm-WYHHGPM%)mJ5Yb|mO(wQqq^VC0 z&KAD6Q@1e@%Y}X0++a>6VfBt^>k%4KSLJ7Ia4S%w4M?CLvWlu3-uiL&I7`7o_CkWk1hdhxnWX7 zJ<0%L`uwBXv5@Yf`&d0G;ufX-(GZ5<+}DaYJCsOA*{pvV4_9|0OF0{t3)4(4^~j?U z_`~^jADk3eiHFwdz<00zDEIx_K6)BI`iZs@var5l9YIP(ED^pUp=_Vur5wC^I*V0L z1W7WndO6xuxv=NwPnBrL$eCKDlE;xLbm{Iy!pho0#ix<;tVJ}yLSf!TwCvjziIyM3 zEk#3XihlY*uoZ!UcXxEHjEH7K|Eot4EP(Ofq5qpr=$FB@!+JkZEv5^+GXnYft6KeO zKizM_XKUju!056&qZ&4Z<~@m}e%};&^1}f3CeTNgPbWg{UKQ`YfvS-~E!)T$%xf{R zrm}JKByW2txI=U&*1@+Pu!EuBdly~mt7f|kurvgUPA0I!`;~O$U2H9zFc-O0oQtkn z2cd5(cO`U}+}+k+Zr}2q+ALuuW^@6Y43N#gE~D~?_dlyA_ML%r4E!SB=t(8KHBHCP(b<7Jowf?9NDAeT3K+%H;{He>cSEm_RHDX%;InT9ENh+l zZe&ag)wAYP3Bc#6|M>hrM<*^aggmJRCz#|&Ok_U#w$iTYoqr#m>5}VVh{^V)V@exCm{2f9Gc6RZCRk4jR3!6^mga4oH z(E!^$m#CrB*7S9C#ay_J?vY^%l{*o76_y8!HMDWvf6-h9naS$zT>X!zbKuUajnZ(8 z#%5#Nwj0}OY}>Yz#B0xz`gd_czpI1v0|ZYuvWl$<`l%QPk(v1 za}MTd_<`Y&O)4?m0s3(U)2z!=={lVR^Rtr=B=CPjln+o}!kcGwc+jw2sQa1O;Ii&H z?^Vr#?fd&?^e>#ZOuU9yt&i&}R?@1O2Hdm?r`ephR?Ew9_k>=SR_`)by@Xs~SfWiT zghP2yF&jE^#5m9A$uc*TsEYJNGE!@Oe>J6w@$>`J_1H*O$eBds_MrsN#Ckk;aqpyi zr^o2F7wBKbxc{=Y8DL3LjNZ#tw1_*%l&0a^5pG`D2ffcW?+O`=r7@O3-)k|(VgkwQ z&V2lPfvN(-%z z5%TntQu-d2)uTVEpGE4L3EZbnm>77w4axFz!QH)7S}bNFJE8#GV(@>|04WMFxljU; zE+73fJe!I68*_B9)gzTAFzzPCI|3Eu6zjr@0Njh0dYHv(VUW4{Izy(G67^_NOs~<>kA_7OoH3&KH;F` zT`|#z3CD|6cp=9!o<~D^sbh;Mhdy2-p~jmg(O1+;ym+0G?_?CD+cjWxTo`<2lCHo? zxCPt=Rg}Q`2a%^g>BvB@6Mc2S!faW7#s1T%;iYtrk3qgD!~M+0-zVkI(lp3US}0aX z|1F|iZhN79*9u02d*z%@p}KV196^UPxd_sPo>t(bwo#8VB?l0Pg8=;3gw6oN8z=P9 zH6XW)%znzh+|VxD@oLWU0Joi&$bqj{XIe{*^hqw;C|1YH=^XuY3rW$1W5RxyR?2!e z>8o-!Ot512D3>FF5VIJTLv&!ore5~-Nfj`Sz+nT|az|McA9VRti1Rp<#B%D743>IS zEpF9^M4As|b;To|Z=jtxO?c9F3!fyaQ5SM1Qw%x)OH zzkjOjsqb|p@y%$j02)pQe84QG;o3Fl`9rV0`CB+bw;SseXzsc`*_Ue2`Dd`Zq0?enV%s)-Fw)Mm=*(TJD%;X;`?eKFKr4VcOFQuDdcF}hh|etw?o;;tG^o1 za3O%`Sw` z*seG`8RwQ+D6Np~P4$&T{b|{-3B9&)Vi)yphjoc%viX+0f!eBoqM2IX0^43}%$E;_ z&TBF-VcdTu#ss`=s*Ywlc`Gf`+&~i9J7tM6W+vF35uspI2TRTdnW5*o``B7C(L?^| zrU)Usr`h`JzVA5AUlC*FwmkzVez1UDR4Ld5 z{_FfGQPNsWFs4ku>!TSNo#9GEbfLd;6$R68bv0rOU7sZvo6L}nD*LB-p*dlDGIhdX z*TGFwJ8|EB1NQMiaDZgRuxsgn@^5C((^~O>K&{6y6WgcFfE@6Fwo|3A`8-OaU*-va zr-Pv_jpk~R;oa8{Ij}{zc{PPHE9{r2;tTNf^^5m~rA6Hq4RlOCLtVjBfx-y^t8`?A zMcEpJiKE92sq88SEJJ*h_z~#)Erc)E`45p^^t~n{`51Px3`9lUJ9CMRTHm#Wq9^rA z^y-D;T~a4^YCb0v9@Cs0!WzX{XH=b2cdl81t}X`b3keML;4s13e^l~8*sW{%?p@b{ zOn4jStfS5v<}rBvj)mQxKBMy0y&0!GwTu^&#$qDzD?d1yXm+OUvva(r(S4^=^6b#}W%} z#V+VYCgEx)Nr1OZx=P=!l_TpcwXx(!^*vtkK4Ud{LCJgFh#mDt~_p(uJUY*OJ$e(OV(wNa*JN={%1R2)-C z05%Q(0Ry%@3dap!))^>z??KOtg>?R?1;h~IX^9pXO5muh6rbk6uq{#(^oG`c1_q8O zZvXo|?aFv?W!yMUwILpY1gizblV6^nID_WhPRg(UbCtXmdM0O||n9~cOb zWG$Rd86_=MQ)mB-r-WXjyjlI@Gy$Ko&rrHAw5GgSFPXgJp5A6BR*VzIBT{%HBonIp z!eP*Vy5B4A^6tfNtbzQcvw~>42O^JbY4HI_DWp&2NzpY&pX(aZ<69wU zGDAsB)`rLj?;B)RT~(ITlW0>z*^dW))irF^H@_U)%0Tn3c3-nzXZYn)FXVLk{&@Z zy0QH5pUJ^IeuSJ2c>m(S+GeRGO%{*H=jHjy3M%pNoH~#w$h&0aLxVK)VoVN?`hmV{ zyWU&tFiB$&U)jnk^ugwxv)i!HpP%-x02s^wKpk^<=$htQs$}c(#6@j5D4~JQ>89zZ zqU};zOC`vtBQ=D>I0Rc}FBUKw8nX`Z;aoTd;w+UqHBe;M4swKS8s~SiF(BbId?~@D zj-QaU23luNn}Gp+k^(4W5`tlq=4<(M0=T>_*<{l6qM#~U98ewQD8lmlH=~Ygfxq?^Tt;XJKa}cvhqg?ZYRfp1 z-Uh|2&gY9L*mR4|m4lPzIMXbL?OA;cP+N$YD^eSMrO}-xo~=8-r*+^cTyQAKKf>L) zlW(NRO<+1HNoKz-o>wgL@2=#AHdTmwctnhY12=R)c7VJwO_7`{%L3!vFw2`Bsz?ti zw76F0_OHiUkoT4FnzhzefL_@BJ8I16goqn32m6&HC_V4@5e#95zqtM*UeTsm3zgDLs zEoUI2c^cG@WOnxTF^-K;CT|!_2%mr-V)n_;U6ygzdam`sr1Tp6k56u<+`t4p1f1s5 zp}C8j8F(TbIg?1^!KO9W>bwjQOWJhefLGe}mUm>D*IaUpfvZ~i{mX8NuIAYcR^rOY zchBTzG#Bxd1j&=4G9SRw{6WtxP|b?zXa#*zGp+|T`xPKyJ0ekK6uddoVl$v1?QAOvlQW4z_q7@h&)UsGDBYr+g zHMLr+$s1Tc@H-~=LSZ-J*BqAM$6nD9d>_#8P{j_rO=f}It1B8?ff%bwf_{bj$V%2b z&o<*&j{)80V;9nlDXGV=4}#3NQ|axj=3ms>f5IUB1kl@EJw+2+vSq{#8`*&WRsk6S zk{LHH>(h4~`^J#4^!Go_Gi-IpqAUfYH+w4o%Qho1SbL_>Ikg ze15fy{$s}w<$2F#P(z=JemBjW+^fuE9FwTBh8HOkO8c+xzYkzReH)yrBq3Fjf{;aO zI}Uy;qYdADRE(&g*fHrJwGGF&qGuTj&XsBcB0kwZ0ABYMEM!TSBKTX+OJE|s^Cqdq zV&u{ypsD(x&5&E6B-;r~M!LZWZNhZyEdX3b(*Kd^HdW=9A3jdm8l6btS~xT4?zg0; zEf1HPFcBfH==YzU^%?NODKP`STvdpyn~TeUxB^iC6nWnXL7gm{vb~tGUi?%t7gU$Y zbrvsOKFD=P##jk|RA8g)D#fzbYM-GR<68{R`ZjX>oBl1ZaE)jWGIpXkBBMOg`Mx?L z{@Dl`EfPM;r``{-xdhbK4OqQFjdcoen2{xxYCVD-cCj*1|J62EWphv!9!a2*%`!Q& z%>X?@A$Qdb!RFA#0%rt{6TFwP1;SW)=%!I%m`pQoBf8Epaof}Ma28;}qklpzuq3_! zI7|nE0B!@nC(Tdc?871$I{q9vQ@9&&`3mBoJ|RjM!1h0SR-Z|n*c&f7lioApyAvTQ z#Zrw(HD~3KMf+k|=J%FTreZ4Y!NVY{%|pGgMX%L33L=>Vf$gqwD?I2iiaR_QxL7XFNNIHo$w#CUvk zhG|NnO?0)rHIH6}A{E755@*t^u}+;q8FaGlQQjo(2nH+~nT(2OC@` zPm>z;vRY+C#) z{OC0&o+GM~AG9c6e6)u=KOT>X0$s?C-X##uy(&+u-*s!t4lx!{e&xR3H$sGKXA|)^ zmC%Ip_8dU~GukgoW06fI^itK>k@E>3*}2&1rx0v}}@M^e;#E1J*+vg1(105fwzu-5iIqvOm%|o(T%C8G;fI zf~4vRa6G$+Q0hR7PXTWBq?+NapX62JtJw1-^IUQBp9;Z5DdTxvyYmMhx|hx6 zz{zV3`hHs{A+E*TV^n_-u4GKSL-enPC?kp;)GfBp#?gETYM;n8sHBdn3CPC+cJaRk zjUygb$9%1TkFtmyjIFUCs*16 z^Y(xcUyAVP7=p+GdV!hfQ#9gfpedkxF|C@rX$BBJU=M#8lr-CnUYdV@&x6Uq39nHF zk<8W;3B#ib+F&kPw{(;i{lyz$$ zR-L}gf=0QZ4N9-4QN1Z2;S6eV%p?@u&a_CI)FvUT#xnWH{e~&nZ-%rDe%%98P>~Z` zM(()2VSqbf9!#7kWPfh@trfOIkGJK!g+|ggXcTsSw@-x|=~GVYT=JzCH!L)p=1v^} zI~4yBV@A$E6d&*d4FR`m3)-u;W}lKj`uEkO{`R-&3B}fz(kOGWs_zhOSTThJRJ5%^ z9vtaK)L-^9 zhcMPo4~eM>DVmN)t(VxBIv~uM~KoFfB;P1pd0Ye>-1R(Bt8Ppk$FQD6a9$AhFfeg_gf<|@A zlaHxEYANiN{xCz2$FiPxpLe=-LbvEXFQZvY(Folh8PU13?n~?Ae?wKk6GedQlR;v! z!J1Ds-SPQ4>jqd<0yzK!X_zJb@S(V(!f|W$<)ESt2UT_0fgx-5B2rhGetDoQZ~J9M zdMYB62Ih7&{D=gh3E#ESTf0>AAqo1?RCJV(J->-B)V7|W;VIy`etc{gnwArrMg#4x z2i{0dBnUawIJ*=r2j_+;VJ0;_%h2QXK*Fg9cU`3!7HVUvO17ZM%#=)uj`G2VVT(IhO z<(f0i$!VhzCi&yG=pit&9myZTPkay)CbTF!5r1Ms+cN0)KC=FYUj?Xd{elANkV$;%2vv;QN-30@AW+`iq49Ri zElFd)t%X(VF5uttGS7xs^v}^Z?AuMe{id?v5z2NzDcmjv9;_lCNVQD<;e(*vX?(a| zJKO=zA|3^pTYwaRL2()B$cHa!?W~c{YFHl>Jj zB4=9y{o)eyZ(ljTVqX{DS6kDnI=oKO-C~+%;l7`gd@va=Y5xFQU6S5F_y+JdkOCk< zo%a_Xxr@cy_W>GQ$wYz_FDmZuk2!_r7P=Z_1^7kqi`x`v9UKIxPw+Td^7(RdvAgk# z>gtK+Lp(hYk&gXaEG;{zR^d8*x{ziOsf9s>C|79Up(qdoz%r~+CdgCLfXx5Htve1LAA1DoZ2Ts9s|(ok6bD$Rn|M8g9T?9fS>K1@Yc?y}Wc|c&mFu$NPq=vH80R=Pn259XzO}QVA@;RpM!~`T5JwFXjohmy%E*fi_o@0T%{w~JeC z%J?iM{3ENH7nf1lOv_|kX)Sw1@XcF_x<2}loNM?CYmI2BvDJQjXDX)zzRCg81thTz z87eg_?BmYZCZ=pswEkJDmh|HuR3~>dt^BO&93$*C1mkkGE2bI8=9zXEn#Y0!;qxdI zUHNW@|A7-cN@6F}Sl%I%vTOkvi*K7{=za>M0|VIt17%vQwVZ$9Jw@2Fkh&&yEt_Mi zWkPXQll5Di`x^C`5e@wkknTnvk5v1{AvH%#^%7lL{^juKUqwSS&5%snL#5jeLTVtm z$Ulw~->mODOu1Hz!vf1CA5i5JlHswjEro{BOU7s$Fg1z7HNpspo>-_v1p20PgxzH+ zO=t@E6eo^dbZ4|hKTgRbAv4zjXZwGeuew(2iq6M;u= zK(N3-MZ`7+0D;5?nzBaIPT4^j_t$7Km;vTNSm(;_&seUjp^vanlqTLRTf0zYo2p&aXdX!2i5~T!H%HZguDKoxX)t zT3=Pe*)0!->qY!|o4d+S^t5`oBjVeeKetmw9|lxCmsmS_Ig5{l(I?i&UZRj}afx4X z@`ZISM_#8Rm~*3$sz|BuNi-PBsqaPG|6v7cRfrus4we|S@Wkach$^zr_#EZ4Y?Z0O z@S0}i;@t?oJBPOc-gjL8{AT>HR(N9Og96UAYsdJ&)C}s5bW25R*$yd>#>*1-lk+;u z+RT8IKQZmAN4X}&1?ZPsfayW<+A}Nc@Ev_reReCVrX>oH$4^3_O?(X-yq5C{_ijTb zptvwBI*Mis!E>$xi7x+S^?oV$T`Sz1d=KaS`~K9VlQJT;AApc{^2Y@J$y0q~y(5jI zNGRezwm==CisY2xP{f+`1wK3N%5n>;ixk(E!%gyuc_P%0ZK)rN#$%aFcxa~{C4|~p zj20e-4%cpq9J#3Vp%790u{MaAn>DUu@H2j;%mI&NZ}|V7<~!Ex$0{#Zn2#ikul>2qGBfr#t^;E|V7xfq@;Z z-j%Ei4gK1{OYm!Ls#`_Y?7gsrw@^0jVe9dQMeIpHG~cS`nkCG(29n?AA;G+7eR^?P zX@ruG#^W0r^T^32l0UYG=6SnoD4^JYd;y7v>0^P;3O-6Vn>|>^WMFoo|~@zt&iw&v|{y4D+82P1)R#muFhR# zJ`Z>9bWoD;O^l-ax;O>5Elm`FI3|)x-{F6{GWG3c7CzFoZ-9WDG{s%XsFm%2b#=u^ z`z1zpYX<1rr8h3 z+Qb`yQ$BFhu9=x;+hfX(^rKF-;cHs=72*@^5@~l_Ns~|Bx5PtyU@)**%#y>S>_oNH z1fR{o?AQm7X8u`=1S~Frcmdeyuz~%nq#hrhFv~So=B*&NFIpF2x7n`GEu<0tKQ|c- zJ!zogcU2~*{Yz)*(qH<+PK)8QQAHYe+@bo)Vic}%FJe@;zr)YG)JMYIsp{A8JAldw zfKy2AnHJL3Y_e}ky@FgAeoC$vQDm8t!5lkYV}6GpdMv+1id*xw_a5ldSLbF2y!CHi zIOF!3la8ov_jB1TT3P0i@(-yX%#r*j8bl`tDoWW%NP!M12AlyY)G7AE;=6=4PFHWE zM94b^&trU%l4Z}?qj1PKlVER0hEPcEf=?z&UE#&3Np)_aos<+mJ$krr@`gD2wn}Fx zonMQQ3mxIKL0kE@c0JR;->UDl0R!0%5Z5Wq#i!frFej`EIM{7VhaV2n)l@a?g4Xt%%)6)P>Zcu_M56y|EW^E$(uG!k@h^V6Ra`jV?&8IPBEdvfr$>C0Fhf9g!6eki+LnXJM|l9 zWHjq@zj*6NV?b9oe6B%BHx_qGI6@mRIFEoy=UFByj#a&f%Q9OX9w`CBQ#hBadX|wy z2|eVXKe?&7BqiALi9aUQ5G%79ymXvp^?KZ_?0^8yTE#N@+n7))c@Py3&B?4|XNMo# z1YV$0R%v`U`TxNN24V#0gl6O$BxezPoGN`@9qZ@IAx!M=|139L*_;SPL3zuA^l>>T z(F7Ud_}mgY|J3EhAUoafn2o|@HdJbSB^qMX-*$tWpOl1uKL6Ud_8z9JW8nfs9tay4 zCUkgbWg?KV*caC_CF>xKwFLCU-=#R*m!%g)biF@xYviN*fxYX)ilvfykyAK!;GQP> zWo`>iufxL)ayI;~?^AV;G>rG4*3OfbQ1$2Dbz^H#%=Z(I&tLtX2w8(35rm8M zYCUe;8h04*<};M!>nL2@DzOfI2#zK(u6_coL-WP0%H@@5{#LWJDrdcqnWnXsj6PUH zlvZcP!+;_N@&-tYl?)y$t5ml>j>TFMsjSIV@y=>ZKpAR$O`;j&?wX}}ht`wx&o6|a zh#Oyej$*EIomW*}E*vcHQnYe+rLr036joK#F`3nGvy)n}$HW<+CxHnIWDN{}cMB4X zQTK*D&{8$>%nlCqX~<4RDk<$t97YxX4Lr2!YTCrDZ}+chbUoGa{z>oF1aJIZRV?A5 z2Ih_D!eGy>lxC2mjzHZo=%hJmum#fdC#6)jhrAo>%Qxb?o2$A7>x8AiL=hoV{G^tF zz*id+P|B1u7NOPDZ7df(5M6aVU~B>cR{PshV&(Mm!}rnG2(k?Z9zE|%s;D5Ju6qnL zP`*)|;r4{FRv zJ5d%!jg{ICQ_mEd0e3lt&58KiX)^*F#+7&04-lNb3d?0+ij)I};)OIH$@{dhO+4_v z^5dO$wt+ZY?q&<{?|OU0Hlz5XY0w&!&?pAK4Wc4_gL+7395VzDf;|D>Uv(_jB>ZP< zvvIAtazEBell6_l2X0j_;A+nZDHkwX11SWoymjf4IZ`Yc_X9_~Bv1VDnZ7f1sWYIv zfm**_27SqLE|Tbu9L=~>&B!gAkIZ>h6;+f08*23Q!avI@uun$66aqAuz_{{n^n7r^ z#JTiezjnsVXj3M}=cp%I_>y9@+`1zbS;P4W5K0 zV(0CDvh3Rk+fNm<*BT>?_>9DLiLk+NTRntnB2f~Z=oChC%z@Wa3Hg@QAq+v^jpMRSbtzbmGON^(ycxs zQ1v~te$O>y&{Gmt5tOm!c`(1LjO zJ-TQLAIrltk>Z#jnZ}!Miag{gO7oxX@#iyFXOCXqh&`=C>)`ws^TlS9ya>n)AV(m} zUhrN{gl#QUkDy5$yuzx9{nqc)wo$&cRZM?}`+Of8BI-36HSY?SJVtJjsmNZDYb3&n z)#2M9X>NArAm94j5i66bJ=N(1_>qr_C9PhI7z@yK8&gK;RFsN<=$c}Fec)qkwQs++^aXbCjucI z2j)(_S5M8aY1EJkgdL!A2p}~Ec{gNx?W+)%w$SU0TU8gCc`MKtynpCf!W!IB!=<{U zpqK8pkcoK&4jxZ6BLB0~q0f>7Wh`!GvaL$mp0!k@S_p6`CR(m`)YK@8YiDRi>*TdY ztQFSK$U86M40gOaPBFLl3(@wm^LDVjx}L+M<^&G}jOrNw#DFoZ2IL0`N@Fs)dcRrn zPkEI>(2VUmj*$KfbF(p~+casJV|Xb}6`bBE)ODerzs79Hw^C$zZkshVN+eMiXPjB8 zzZNi^aKc`XJ;6ZOLB(K*MFou2fd1$M+~VQ6dh4z)Ova7sGT!6kGgWallI2_)QXZ%G zM{${q>>t_E2($~h#px0KAciniOr9Y&eAQJ%^ z90v=Cba89 zEHK@;6`4VdF8Tqn0s;bpLx~V??bc&ATFejCyKOm=^f$gX*K82FXlIRR(Db0IS@HD_ zE&%U*e+740DoRaZ$#=%F62pS-jw$xJwqP3}MK8=OzB9odMjiCZ#HpolA5W4s1GTvT zZ=uhZB%L@^RAyo$?7Lvm@!fK0hz@#|RyzJ9^KMh-cd(gvF>&Zv>Q1+b&7XmiJCKQO^FEO`?y@P*$e=|XJ5Ya!KyYNwhZFPGKU9o{yrA?!t(Y36g_Ao)dTdqMk5}Faj8$F-Z7n7 z^X);SY5#GGob!`k`%YpNBP!{C-uMXPD&c=WZ_tC^|Bd; z_lzZbLvwF+#XS%nPmyz1i}sz1SZsVd=N>yW-Y1#8qaEEEH6i>g;@($V{V$B6Kl`4| z5uy84J3UW%iqT?5*$yuZfq2>Gicg}UNNerZ$rNoYTs`Oi!vTy00dN2g;9vlR0|c{% z1??~8Mg7tXQ*4KLSbxHV7>8*%QZ*tv^iL%RC7NlD^6F}Kg=9YQrPM?SKMwku?1d@h z$ZD?Cv6~~hdn7G~;q-z|gxToz2cLvz+ucrL2RIW*2MFV$YC$bkCLC)u>r{{wdP~GPp z8*L`JC=W;JMk;yR0AH3$d|!fD5ky2gb9m|ZC?XvewaZ+1ycOrpIAIEJQup?^1Gq6@ z$%60!5MSyV6PBU0_3K&|XDb+bEEZW_HUh~zE@=o77_facQ%UDmTvB*qY6`p-8qxV> z?MZ`X+J@Eigj=sMQn?~>_U56!$9tBo5-dXrzp_*VW%{=fy|l?)`jNXKEZB= zR0YHiWR{Q0zq+U#5AG}uz)<)NaknYuU)kmG%=a>-G)`6Q)^@ z!E2Eg(yC~IV>hIn##p%Tq#=S-#b@B((IM-Y6 zQi3QkoH)%SM46^;FF3p-rh69D$zUh(rSWiAP;eGAff?!%uu5gLl~iJG??g%Ps@L_! zh%<4wU=z2-NoFxpNk@o%z0W1obP+ZD2et&Y45Y{Jj;G8w_u_KIB8c$egT4p?ypkZn z-P57pD8*xAWkuG5;S6-y1!!~(V3kB8wpwAvym{FP+O45f?pZ+6;_RtA|L#hFMq5NO zCoqPcpP5zl&tP$C(V&ahbT65}(p$Qu{aL%_JtZJ2d~noff2tsKvIx{p2(M)Q_-{)1 zvIx-Ve1J5MJSz5rssZ8RVZ7}IEJZd^pJ*4{LUZ-6jY9U01)$N*0jo5j0-?Q{5|NcT z2p+WCCF|8rwu6l|LoF_PZDbjX&GX9?H92sFfrKXspShgK5l}=zo>fPl`f~+?f7*^W zNEA1U^eN|sOpsDs42P`H(WGJ2wXT5DqX47x?Kb5pknKU7$$e8Y9Em@pDK{;RnZK3G zm1f+z=Y76rGoF){O5N4@RohuMR;iwjgHd?*)?cw0K*jEQ7aH`Q4!jV?s!eGh_ zf>tgOm5m0>-awRqBziH%Bm`A`_HXvomYTi8otYridCN_lgO9#a8S#_EbBc)j%tF#p zDMi*LHhH&qlC>k9;PtG0Z-@iRun!79ba&ju-FH+zzp%y_J);6<4-%lww}7EQWV88{ zC;`qH&FB-Yy5%nL`n_Uz0>A0d1*5R1x$}X zjsW}84a9Qs(Z8PyWs2nE@2_3++3S7er}flqJ@85X%BaKeusG(*OXt~aX-E6F0N-BkkT1)o~x6T7$%jLXI*HF6Uyw4-1y3M zHUA7*#Y!EI{Iu9t=k!p%lTY*kqz9;Kz$*FW@5SdmqtifXi%ow7@wQ2NK~Os=TBEy^ zqZ17y#rzZTqB;z|s!5onx9iRfb(5NtM`f^bOGe^zE4_QP+y2(by=zqWU;$@mAAifk zWc>0Tpve}%I`pgZN%_EHAk5U2YAC(6-_(0(Vz(N-Vx!0i(1?SqkdAsu)QpZ|uphpEyQq#W8 zl{L%g6r9T9-NQvmZ1EdDB^+&2d2j-=4SQWj#sudjZ}ZQ$-%UfSF3d!IWG*(tGyz#> zcSG@VfGcw#K|qG_ax?}*PAOK0=UD|8fQE~fve7%F%#e=Y^zn5KT?o?0 z#5A0yt}$uoU#ipGYuptn0rUXO{4MLdB2;tF0=l)stSlm;$K{`K$8o0lO2FUefouRD za^G@Z9-~B(UXzOI46zC*PW$lbV?j$I{$v^)v`A6g7VcTOhnW%~h`H`@7t=jurd1x& z5}mec%ZjbizhYsth8(49TZkNcn!XQ~%-m|%OseQAQ)NB3&;<;}Y2n`7(UIBx&-h8z zsOsZa8v*l9EYtpB13};Hfz9>MvKmgty z>8{!Bo2TAFGOxy*51fXCSK}mq0D`yKnVY6LWt>~_k_L>B?z|malX7OVSGv!S)^lW2 zUc5YPi#KlCP44D%tlYLqo+VJNeBFej(XT1w8DPQf0v1s6A2!9tTj(gW+oHM!xtna- zrTEP^c4PG|Bp<3NxFMGMfvJ9mhU-vI&o(F4LuExUmvaCwi<+&dir%;?8ybH0a?J-|q{4(h zbYb}%gdF|e{+-DyTiRMCZfqreobVTw5CsBT)kl`5_#{wl?VtwsA45r{nc`L|g+#j9 z#3aBaK*~U{(+-${iQfW@VJ4`q&Tl$jv;)~bv$Rx}Yuwsprvmx?2YlwjL-n@NEU0%~ zx^_vw-p!3m7vbctkLC9B_Zl<_5>n219Wcm*eJy_e$hplFex*r(*+9-fdipE&8yTlI zC`teMv)jdmSkVzJ=S;hW^v!S)>ah-77;KG-6K}!Pl`ajGBuZI$;vg#s6!=pgzs8&R zU-QDNIcPTzi~4Sw%;>|O-F4z0wa0q;VSp_+kTej?u`q!H#a9vz0Fv@+HZ-!=a3^x7 zrMpA+Cq$wLn|{76fMpLkbzF!1nP4apJMn8sfK(D%g|tgW^&Khi4BfMr(V=@~f%Nf) za3lS)c&L%&NM8jX0g8(O#O-uc&+i18%+?bk7K_PQSRw3=0jHCAy@D44Wg zY}$2fK+VQm;tA#S?O7k>}eI<^LDVL`_85bWUjAbFXvq=)@a~psQk#%o%K0eNVUf{2_%y& zKjzb(=6s&S(y$HCcJW6?A&Z_y%_3O(tH#~RX-=OokNa2hYt(P8T0=uS7KS=%gYrThcR zHgyXYGmC*Yro0KN&t(I}lOpQS1JhejY{q=A3Y@&SMDn#YY)uaMiRFN)&1Gk0V=zAf z#F!|#Yqq_eepVtk#UG%q1 zkk-(MOlXd_FgN}E8HCZ?DcqOu_aImnpmZ02AIIyGe9e4RUlX8WYd8N#muE;;ZE9Z4 zyf>N>AUs{_qmC+k+(44%7A1VY1 zv9=1{7IDaglfZnP1q40z2qZjvW#!P4ue5b@77L3}{>p%L{`@qc(J(Wg))R$L?cMhV$0|gcg&5lRNS5_C1;P=93+aFrM-~oy{qvo z9B=xK2qnPtfzr+lGPq^sA%5Q*?bl#0YG666Dl;owYx5>Zc2hx&R< zSM~A`mKZIfZ?+{#UO$v)^C}6D266|&7$wS}YGv<0{ZYmTbV)J*%$*Q6tR`AQ*A})7 zvGH4^8?ykE?=^2ujwGaC(SxdGwJR0gnItiq#YVM1DDMk<#95b7kC75=Ag4rGq!~_K zuXoh|E&(zJg6$EX82Ozw;7*S}Qj6%^V{E9f&hW10zpJs%Z#5RJm#eN=pT-!g+n+glL7LhlvL9bd?$P6gjL* zQ&&0u(fnOk0$W5uA7SRW%h2I}^m>unT`-R%`Tkv^J(=)B1C)ATb**VW$K#J!CD=?p z&Gf^Mqg!X>nqwj2c)+LzWDeZw8YFx-5wOmS`IoAEV^?Gfi_Fe~X9`j0q~sxk98hF8 zx!l#0_mAl2zRU<7c1i@@mhQvZ`--DgGC7LukHVq2MGgMIz&)HiYPYEYVX!P*OlK+K zy$R58hk#WuxUt(d`H7K&t*l!^TdOIDPzikQ&W@!;O_A23(Kf-pkY>c_vWU5-iXIeN zle<3^+r8-~+*znA_p?M;EVCt2GVXA1I=5cA(b>FG5I2xLsBb1f!$W{fwh4xULd+!a zX5_gmf{xOQA}Wyq5OrikJACnl=OgA&|GJw=3~OL)0x*k#aDh<&qel> z4L+LcYHU{d*Kq5ctb0{3j#{Q?)W}h2`kcp6n=KL1`M$i}V7J`Y@%iO9V4tEW~|;D&k`+SFBal%b|i!XIA-? z#n#LHdjg0IT(M*nwm+$TxjB|sKs+d#HeXUQv<-=$vF3C>tu{4G%!RK} z)k)tW?-3~YBzwyLo58kjjBm!$zb}G&?X*ESw3Ho#?#}+?t0x8atOfE0!U&FI4KZgB z+H>+9{#i6vcgyz@U+h7F*C}=p`;nk}QORHI$fZ5{>@w+|>g<;HM#_ZwyU2{^o}KPD zFhVirSbalhf;w;|vObbz2o1M%9|Wi4%K*&7k^dnFZZB(}moc43%i1^)Q0yKMYfEhA zH-j__`g-l!D(%MMXG~2_vm|M@t2s@*#l0cg(L^Z8YRryJ2)Gfb7Re7n6ygKBXp+`D zvV|8VId~sqhB!IJs7*{7(0(qD=Gycyct%)?fwxKqySj+Q=$B$w9CxmB}dr>@5E-) zvO??&1k6jAc%&LWHX3+hN+)sp_q#|=O69WUiJIS%Gwe2+#)V()hIdAId1*9&RX1Hs z%;o&4j#)aZr3x+jYNmBjmGi#F9$Aq<6`D#xifyto^&9<04~f_n(I?FlUT)8C1WppP zAqoSQ=vY8}fpml5t)kZY8rQspFEBHWz(EXpr0qFff09D=nfUAxKZ5w@im+d|@#m*f zq%S{Neys)i;7Zn(+`%Klo7QpEF5+~gkU^Clh~U3hu1U%(8q6GCf=#sox<~-Y24Tb+ z)uKp9Eu_K+Wq&xRH>0w-hNI++bNWWCg%*b!^ZV`TA(!Q4RX|dvEts&XHao-!16;{v z7CCTN&a)oFGL*g&5cG^A1z^Qt?=H@%n+$OrM#B)hxB)w1AlZO?aN7XW{7|Ev58hDn ze5HkUUgMBNdAlRG8_BDvN#9w%wv#|aWxaXkE|lipcG)W!HLZycoCBNOqnU@(?*yYN z$wA4PI9?UzBs?=d^SKxX)Bxy{2*B<6v?JAdKf=6^hP<22I@rST&z)NeaQw^M8U(9M z>}y#^=WlAL7R(xpykCXHQ;81!Yr(#s;Rx6qB85!`IH2Ip+m)js8wfK$SZ!r-f2-`8 z4Z76>rLzILc!wfbkzlH3-%db~oX6 zE@8h=jp3$}dfp6-kMfF1&tG$Rm0&RASx^!TcoNJlgeyGo+VHg%bZTHLcsX9tMujwo zkaN%+d*rUAu3XRrkBD~Z(GLp6V$`|4-1s3ZdAeh`u_YuxWw))Vo3;iXAXdUj@ zqP_+lp*B>cpsHA7@%S zT9jb?eahP-Z6&H<1P+D*at-_nt(9Hz&#y6~h|bQvCoJl-@2t#arXxN7-Fn({5gV=X zXTWO1Lx$oFklqoP?VknH{(@F(b75{PA-x@SUYpPwJAz=j%pcEa1*?4Td)fhkjrK-Z z#TGrrzM#g$EzfD-BqcktL2|CY7aKPSPh&~+tKvN1svT@XVXS<@vC@fTsYs`I;p})T z%|~w0`@`!gY!AB&q^JU62V!9&ar!siiVo5`97)`wk2ue3G3QQWoedc z`@-eyU{&_vk#}&G5mlRvp`w^7P-WhSF-a&`!=>i3R1eP^uO2IN6)<0cJX}El3kH%7 z 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

    ?<)_W0#S8=wL3lXG;hUPee+KD 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�tVa)7^l4+H{1eEcp>botUN)eC(@m2+XbF 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 z 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

    E=XDnu^jXs^f~RKhYfdDIuAozeB2=IIC(e6Um z-`!`vJ=920ND|acQNI4dL2v`0OGnGe{l`B&w3B5}7>^7oeVaoNQoNK-pi2=&Ycr?i z$m56KwrqPgM!QkbP(nZWESfCQdUX&)hE{K;c#LVHiY5^%p!1!cr_oMXb=94j8+(gzS(O z7u6h%)*ve3kwF6*!~l>NsxU6STUIR03bB;^Ea?!_V@$x>oAQ&6!f=y5CsH9qd0{a$ zRnmU#n9>H;Sg*uNsMg%dozhXF;ci*2)2G=b|PmE6G-%BWB-M7ox&z% zJ|o*phhP&;r%^h_M5dIFAFP6tx*gP#&UxSttY3YRVA_9J2k&3_)i3?R*=ryU34?kt zpfK5aTaokdKizxU=`lJ4=JdsBwh@XThp+faSLv;rb;LPsN&8crtuEe?94W3=?Gjt& z#gAS1_oa$alT=xJ`2Lz+CxR;4WBC&|H>+uT@jT6v_?T>`>#Xh$QziOO6H5l+y?FihyVfiuJinr&@l{|^(Bs5rS~w8%!YB@9rpy}{oT%~vw2D` zqDq8xn*q5bg_n`k9(FRcn0bK$e8fM|jO{bYoj3Jiy@zt2h-TfF`j3z6Qxjak02l^n zJf^RjpkMJL1N4WF7Wj?ei8dbHFD-N%8>9O^!iuEHcOIgi*K5y;$ijlPv0mRu7eZ1P z&H$9p5(g5crrF3jGiqrZt38S*gdb8ptOuV9+bG zZpH+`3EO{4=OY-Mw@UbkFFW}bn>NW?TRE`KMv8W1E~&3Rx8=;*lz*1zd&6NEg`o0J zbdzGxt3yk0}VYybnU?h?W z%uQXRg2y6j@a^|c7_4XC&@Y0DYJ^it0NrU!FfP~ipwb!yV9){QjX<!Zj!rw|L8MDOdk6W)Ntg)SwC<5w$4v_&Q?eY}9K zK~)<};55eiKpa`K_0~4dx4tb+r7*3JMMJxCz~?iN*bo%y-4`;uZT;<*e?B6*JGN|0 z8sJPIv>}LDSoa^ywNtyIALh~pxr;&KRQHFow{lJ$P1vP| zYlp&>Obs=X^B^HVpMIumE>pkX<3Ie4v=?YK@}Czr{oa%s^f|ib_}I3N1?7kJ zt>Y_!hEeoi_t###=+LtsWOPU3<5u-d2Mmh7G}+Ni2|Nj0pOg+Rb)YH8dAbSkv^8929yOlm5Gok~1e2d%%Acw0 zVmbI%^qAQ!ab?(XVr=){)pV-jS8cOlcXYQb(#xVP`qPAu!OCzJEYCmQDpuWXiYuII zlwsskU!!x|JIhcVzuj7G9|DJJ0|^fPG_j6F?40J{EA)fj^kzw1&h?)v>KtLP<(hBm zd1w{|8-c!d4yE@z=L+Fn+XC3^Ur!fVj#vFC8QVj3@SQ)F`2=eH8-_Cw_cXz|&{|=d zGws)CfcrKe#GxvJn8*2Pmod3Bb#xh9nh%52VEG4$D_!p^YMV0tlvFpYEEOkXsXlm1 z^Uq`l!lR~vdg3DhSK!*9>j~x=yw!R7-ecC3T2KIWp}%Jym76Vr1DyvjQFl`ZqO$Ll zE>JLo`8`)FEHk1Ls{a};peID7J*9x?g>Q5!>7eaLBldrDqk+ta+I9m;x2gI;P)f@5 z=i9HxF_acHNQa(pUmLFqy+Gt@xn6q>?Ns()3{Id)OapV?9auI z--FlrRd5j`A8>TO7%HY9SpIVr!Nh&1z9oS@ropXs&*z2+b$Wy>G<54P!lr_if!+IS zynz(PMx0~Cc=u#+tNLm3z+f2%6vU7DlPla9Iep$eeC`VH43q<9mzaJ_Mb1;!2z{s9 zNBtvbN{xOy#37a$mb%69uK#NAQ=b#dTWaEYnCO9em;+eUK_m)SHGClmM+@dPjgp8L{yB8ng+^Tk; z;$jm894Hn)_5$@{mE#NMS^>LVs#Fv+wlhZ?X#J}}P|M7-Q>2+$7_||mJYZ7>1VvP~ z5_a+v8<`;JoEY55s2Ri0TbdTPTz<_qIyW8)yp6z7Y-k-fkWg)%D5Ld^!{)>kvyFio zdjNV>F&^O5(XM_O-!SGSd~smVx4uk!g@u3&1n5TqoCKgQKmbNJ{|%56two1)aL+(C zmUPju2!L9pF-On4`zwjeo{=vh`OVdb*w9*anp&6x! zyk|9$3nIpmKPaS$rZ5j7PwhoCy1Aaol5=ms7=lG?CAMh zw@J{8haDl^_g`QK6>qZ7x&1z;>&1;%nCUV^n*3Tv7hlae`YM61{l;t80=;frIoRbF z@i2r$c6h!n>F3R^QmKK!ZYLl=09g@WE(g9F0vROv-`Tzzd1Cnz=(lZ9p?m@a!d#_2 z+H){_N}NghDv8;cnunnI8sQ;z3Pjdb*}DlqoMZ8&!`%|rSt<}L&^m_LGv!)ih79Xj z51suNfcCHe+@zY~3892hWch{VO#H2DD?*#Dhz@Jf8S=WU7k}SNCmvO>z>7uZBMJ>@ z{>CfU7WTH7TM6pYo0xH6_cu1z%NV7qO-)>#&puzLCv$z^$#=lm1omkF(GN9-?z7=|PtRcP@&AHu_~JQWYBX&w zLgt3TLX#Ox7#Z)UU2NAxTnTK<{GsSbsO1faHLw@Ac<01Yw@;yij&>farajdWP5n`E z=6%1T9Xy*?kj?%_R|aw)8XDxbS8aC-?WFYh4)Mveaks#o7qMurqBEXbZ3~w(*6Fbn zGgO8WA$;#?BPKDYSivuQ_Od>tg<^cLV{(`)ylTvb-;Nm=jE8NY?qq7g#`TP{aGhNm-o=7#G|YG|>;vO@eTJY`6WAGb}U%X-PZl5!a^{ z6uU!)MDxpkU|wvxo`!|B<$NsPGDl&L=Jd5!z!Xey`DH29lS~f4_J##OO#=)wpAu7` z@+(uU`5ugi&T_x(XwpR~@kUuva~}%#riPk0&YFTzU!LuA``>bB=s#73RRkF?50gqJ z%$ek`VY|D_AW$BBXcO@qX|tkPL>;OnF6<}u zs7A9+m9`tw4D^Ayy_7`lkQo^<&nW7xG{V$XG`^rfzz9mc9*2bm3I2~bT`o2x>)qxE zCHzb)r2rE=oxd^t!23=hETYCh7)Qq7#_qj?)|qXMhvg=|YpE+(EE{`T>6FRrp3VwPeIGc$&ZP+>u1RUK&G~ z3b1yZf`C8Uk!ynr+pbh*YQccz2}DXTz@n|_9cg;Qs2HcdSN~$)V#C+%$yM`iDN63} z-=yesjmmO8$EjO7-@Ae#=3(Z_Pv_R`tDpv#Ujd`_^msdNTKd=hcU+8&ic4sbdopGn zz6=kjwJ0FUE6nVtgR}X|3t-AWhP>X`l88N-MO2AFkTKJ0%dCeWQ*zJu~|uB zSA=0xK+Js$?w^3U^}E(osk-SB^7RpyFTME2RZs^B8ZlI=6X5cEW)NtYofcs6t3~lvE#QyO zA?P$CsHJbBO-8zMTEh4h++Riaal7H0kx<3W+{mCa^L{7FRO_dIUTc{tx@_aSSbdw~ zQ(B<7w%vF2lW@yC--UL&^5NcHW40Dyy=#oz*i6xzE_gu#EKMN(p<04k{e!f4z9Mxo zKk_cBSLoym%H@8JLn|N5+eck-@~2RAJQ-Q5Y!H-3jS$jqe+Ru-+n)lVM`=~Qy7C$9 zbY%xe)4r`@>o>U&6RCY)o#tQ=lpNsp2grY@5`i$VJ}1?+RwDZ4;}_ZS3_s%1o*@@A zhazsm)VWZG%Wb=)G-cJIC}pIombf8&N$E1t(bj%W$@SS3ZJPLG^v=crAv+`S;eTtw zcn>vmB)Jko0wm`E2@usur)yUmZYMS6RQ?!T3#XTeLSks$12n_MB0L=4TB?n|JcQeP zCMjorRQC3;wtQ|P{vlUVgN+C}uod_gy0xS{kUGlU>5w8noI<>J_rQhJJw))|Ty7u% zqS^~#<99kS9N~^>Fu%Pm`p|Hyh%+M!@h^2XtIaC`r*Q(cEjwZ-pE1BYhJf0?-8fhI zOHkBsxKX#e0=DOMf^Yt%QOmlQAKBH<1TA9XO~r9xYTz{6{%n6HDyvbsMcs{Rl$_bF zycazCeErobz6lVDgR^bLE}~qr5|MO!+Npf}2djAoRJc4Rw=i?IZPiQ+8Aox?UoY%Z zy&@FkFzF$(STiJZ`w#7LJ8qXvUD+5Gh!zfxl`Bxs5|}UrW;iBTXsUrdpZ;vs)9VQ3+o$*;o?iI-mF(}v>5gsge7!X`QP(*FJ z@_Q7j+xk;d_e+u}u)9n|xiu4Lo|ND`qbb>S%X1R>2pby;-$9?B z=_AW~>H&5IMQpFzOzy%6~L^RNAx%CmLyh1mh3&3GM z>^aVZrs-WiygJwpv4)58TWlUx$%aTcIVFbYOyMIL(LRSq)RWI$5zi`PO|+RMZ!2#H8ep)4WJKMN^4_z4PC5OZg5Gf6e9*@i+`JNN+fK@`=?*^xHl;V<8YH2_!hwsfX3T_1^p6OS2~8&B2&D zzM++HEjIHmdrdX!kAf1mRzyN+C_Q0_D(5bYd12xn=aPG`*fa%|=SqLAgrJKK8tdQl zg7QA0ZnMMk%{AOHXgdRY3IF3VeCHy1mV{PwJh+{**cJo-tCqU4hK%b2*hHCWg=G3%xJP*}*sfvxxhb9t###_7Mqer5Fh6ddYYshs3&_bTeyoE4?9B*LTRD+@Sp5{Kqi!)wY%|?YzVEQ zEbhrz@sLk#`XmZCSJTJDLldvNAtM`q zv(zHX^4KTu|Awia6QR{c#Gy;z5Wi@T+cin02fiNS*Y z*01?cO$<(I403wr$&Pn#OjM=AQH3=RWrz_@4RA&d$#6*`1GzuzROq=)u6i zS9kpl*YckF5F^kH5D;Dg;G`#2w^Y;f(yg9_AUPQ+pnHjX`1d+8nV`0RJCBt;KKu%$h z`a96$S{oj(Qv26|X!-#x`qX|U#~}wUhQ3o&g#-?noz~O4J{eI9(k*Gg*I9crWtcRL z+TtcP|JHHDNk3UP#wCpJ4=nR7kJ*;LJ zuk)#ObkJe;9B$Ysmay(JVmmcK27GO|>umc-S(tEWYCo8<@OY)pgmQ1vz?*68nEdJW z%b^RaRD?Ww{Wg_9Z~}p72~6L?>WeM~XH-y(8|x^t0T?!nRA_fFChRkxP`cr# z77vvf7JkVGB_*k|%a9&Q@{J9sEg_s6(CqIJ(Qqk`ovuhd@B5j^4tbj}^rMcN;a7O@ z@GwTWzNUu4O7LC5-%Z1?@d^Ae*&`4gwXxUg-MX!o4W0# z7b}XZE{uZ5~4p}#FX!go9mt2bKV z5nIBVn^^8=@(NWO{;ea$(G1q4K1g6uofKk9tS{XLLp)LKm@+Sz7}UWME(h4T0p7(Y z|G`fnPDK$SXds&rl45-GBUVUEW9u$*fURaDYVKk!b(QOiBp+w$cJSRvpa6|PNNTws zW8lf$`16@~Dd+U#4-Z@e+QN`vIgPkf>@PMp`sF^5SL%V5|1!!3hH%3;+V7ASMT1@` z@HeECQ9`d6`{{*|ZC#3oF!9)DbzrrvI(my1c2F@r;?RxT=6Sv+HhAJse9BNzjQ|;S zdNbmX)^tT9=)jMTR<79t8qQ&$S8A7<>cxyZZe_Udu zC#X)FK)%{IFIsEX=6TOi1v1Aq0zBv-yEu;m$x29sf4Xg9LOvEF;xBu~*#DL)Wy zt6|@K>*uP}uwJH{zu zGpLS!J!DtwSF^7^nGu@L7f=pD<}G(+?JhgAf1$`Uu`A!9{Hka?Y{XNh@I434VU6AV zQ=FglG^#6gD|Y4En2a^_uO8sogNO;~gv;e4b?vpsM;mSvh$;gOq*Gv@;hM2Sw;u~i zEas-Pwf_bI36Mg+r5_C_z%yOcUtmt8?QP*{Lq5*^wg@%Ma;}67{^X@b@@)Ri18lE1 ziJXguMz)9m+*tD*{)ptptk;JlSCqdkJd;iQ zwY3nkPLo2+VqArzA^eP??Hctyo)@CHna^bWt_-`7@Ece$(IPS=W{KHjn=o+fLCgez z6TEZ3FG?|qHI8}f?lNt1DC7Dp72xD7zJ0IRH`%wAiQFK#L;R9h=2^|2Z|fe?*H`0vY8j7HYZKC zuZOpbJwi4eQ2m2eT-Lv_R~^kI(;aSR4xvyJ7kqTU!g}X~cp+3V=K9usR58q&Y zdIlQF^*^te0b{nHGcH`r*<7*kZdQjD`z$}n#x4JE5@kFw@q1CuI*D5jMfvloD3r0? z1^%R1R~U2528t>ae!qbm%{HXrd?FO`T~0xevF1p{RleNtEJ~*yOJ6Cdiy{b|kj0rr zyu!>vLc+fE^!!+(@3SeCz9xH{Se88p@TYA3riYKYk@8oGz_m1AD~)VXhtya^Vkzr` zxMCsZTxmL}gC{@w<2x-KmCluX1?J$-E!$Qyt{qn3?j-y_bV6!NA?tYSboVzQRrB6+ z0zN)xtE#V=j=O;}NvhiD&i1)ccAP}_2C3_54s*zc(rB0F@%&7zPt~z~s6?X9eaEM> zlOnMl+KCp5s^zk`%2Z>cdmBr!;ZBKiNk`^(77Z*$JlTT{TYlwGJ?nzBV+WzuaQWD# z0SOwvzMQ+g!1nrsouathU+0p5Ubu*Bj0IGc*a5kJ89l0wE36eblY?qtajsIHdWl8j3p)hS2=0}rGj;oqW<@`4=P)0ti{#29_IYhB|er6ugZ3ATlhYJ~!av3gR$ui-ng?n@1GMF7yv(SEPA36JdSI{BrB> zN-mx%!^v=gUyAfsDG#&SKggJuN7I6eVPAtWWT-vfn6G9SBErm%18ab1XVyG#Y8?p0 z(*qR#`_c*u>}_D|J@L@3L0b|39brb>6-*R6%66rmVIn=?jpB_J^fo4xS(KPk>0WkR zmED8z3^ZpvrCXTo=2g3dBV`OZvfV8ldTk9ABreT}UFW7QUIEBx5VxLu7=UKv4JZlj z&eIHQX5nifCvn!k6i&Y&=avryLV%R3Qld_ zFU!R<8Laja1YHIX8-JMXmap(m`?l3ne$Q-<&YKx9zmv}qa|KtrK(@qVS4DOOM??D- z>2IY3eCRq2%AoBmC{tHzfr>B?fFTP$EH=SkH{YT%@G!h%TJP3;kd5uLMR?}Y$mK{`oB2# zfA$o}T13QFWMvH}cOOkR-27@wPBPg}>mEP;MHH8CEoz4MUL&iEZ`z}N3gNcM!bOU&uPM@ z-BI{i4lD6QB{tA>fMarm4Su@MhkeB40uv92*N}Q&RxMq!VY-2xFQe%OwPo!1y_L5b zRnDO#QOOsO_lJsmGj>2d@9^qe6`o1%B(BgnfM2QTqknPB<-U+#3yvroyUVBz{afj& zhgNVH2Bq*yDxm9059CBE;CDt&z03umX6oZaNYIcH^|RM2fBCgUO9YR_{(f=hcGFqA zrKU>vgI$B^0Q{B$12a2v`AEmqu$U{msh&=j&mpPO;rvpB=AS7kw{x@PM#ULHlW{)C zazD_V;P4gmD@2PCOHU*fvAP&rZ@)qN5pYIR2ex+9cYxdI$Sog!KQ@Nh=+p7R+zI`u zqdVhBU*&q&nl{){g9?zl3)B zY4R4AK13PcVR_j7`A%gmjJ)`x$UnR1vRGI4JB8IhBn~`UCO)eDPulkDxKw8e#o_ve zO?RROl)d#Ff8y96;PwH&9ccQuV%@qhgvuMIG#6d{kl*QUoZnx2#=j{HAO^k3-)ug( zZvXn$jhlDX&=Zw|=tq=u48w7Yg_Y?gO8qLWnt!VRU$ZDu1nb<%T5ICeLaV?xXmT6W1JALl#n`NR#RCh~#*LxA85S)Ahx5-(`i zUekL$8?*}N?-!ZFW=PHzckehDq{vEpR;nlpcyw@tSJ(i?3Vu4a3D?i7K^t2(b{xL0 z01WRH+@oqhVy~ap2+y51QxXcK0_K2o{f|+3Z(zGP;Iw-HnjgzpeBTv?OqcaT&f<@6 zQc|XlY#%gT-S8T|N^#mWntS%nKzdd!eS{q8Bs(UzEmf2Qv?$_{ZTh_8s8Y~Iz+hQc zd*?*}tZWtj$5lV_?ZAwq#_{%zytw5>2|($RW>qF||20Xzhp6`*&hmcFV#k`c%L3Z8!eY4W{+s0CBL%Je(cAcM@l1%<aE^Wn=EoC2APeqf`%}05Ob6R#_9Po}eG_*x_Bd zMB898h|=fU?2=Ce;YJq-tqXsA@q9Z@s$Fws&dNp{_)8$h~|{YWLw9Uf$pQ8HWrblGoB%euj_6VLG0h< zT@{?Kb$EZAcSL~M0z_{BcyP?J2m}xWIntLS|AklZ=q}_^O^`K zvOxTXs&*FHL3z$x79Igl?ZCERmMB|pET*4kXNKe3Q7`*>q?2Nk^HZsj&dej{;uA?+ zhkpv`NXZUZ6I}Oxv7*$yeNBg`B2TnvTJn0K)^$ikUH|Csr5SHhLf7k~PRw)4IB>_H zX`80kF7xCOFJ$l#Zce0I?zOY3);|E#8@^~VV;=M0Yln7psI13$MhKxYb{%rh1+E zZT;sv@yn9uM-q&8oM9xxY4tH1a5q3u@j!t^INLB7ClG`3h=g z1VTRK2nn;7s{0Nu&&n>>&fha<%oQU0+?HX*e-Wez_6E=KLC=~MhURg8j^sZXyEa~s zps42$E%f@pHxpKPH8WKgVr7HWXql|fa?v(T(CsOIfMP4J9Wn#8y97}matO*yqDiT5 z=ktDGyG#YqOIZsC2pC{mxUym+HrUbDWBhU~mdvx}vd(K*Agx+B>&nCSAz%m{fW%IxvkX~&(3-aac=?c(dwvC~n z<|7lK{Y9T%(XZV$YVL4$XQ*_&aD70?xr%Uk`y>Ky##fSO&|1A4wm*F9HD9vb+qPPOL?h7_0*6+6}5D|9BV`)0yX)VmU;r;nbjs|BiSThYDMLj(%Ge%Aodl?^ZXX!MVOj>W+V*)I$h#F|V?0Z` zh8e|OK?#r35%SAR49OIFJFBx0(qu$t?I5KO-C4Jx<~r9_w&-;$x1QFWD!MDGGvFv_ z&F5*dRe*P&gxlFYY7aO)K)8q;0{;sx(Ziex>T)SW-Z4>y)r8L$Tk5blv z-RaoLRsx8xL#Q9l5G%u5*-7@J1tN&B}s|Gx5u7R_c3aO5N#6&uWsf>rQ-a@4o-gkFOYwmL|=y zeg+P06j*oU4bn<+TVKKXqhuLrc9ea-g= zD!+`-OLDMt*mDgHD@lw_Xa*Ccq9Us)m2 z>^(c+4Wj*kIL?Rh`Ij+hM$8(YsL9)TCHp7d814TY?*x<=f>{RN`mMvHFOn24FD!N` z5e=3>fga}*ifLabt;0lIxbN|GUR4|&c-xx_*j_&g8Pb>EQXlZdd68;Fp3xl5cqbUF zB(Ee!@eg+UyRW0_hMC|20jR?>hyjs9(0{%r*(GqR?ID4e%fI6gUxoh4-BlL?bDi{m+R=;*Vr9Vp@DG!7SG4?_(!S z`Kf~Y(oxX#yP&wq06O3J#x9$2_z^uZMM{1w?{P=x$bP6SeOHFN1zS58rCuNEd}l5Uu<$Bwp9INtzSCKhHODJpDA%avR}`(}pf)x3qqIyP(v8 zSPirv*Fm(O6`mEE%%N*H!soD|e55C5;^d1rt;V-UVSoQ)Gmmko=n(7(z`0Zd%xoSw zH_;kb zhOUSflC+s~YZioYe<9g-fx8O~&KRD-Xjk32st#aG=FX#py@p@>hYI7>Z;J*X%ECT8|6L1T3@La+y+` z`wJRb-EP(hB0}J;9xwI{jO-E-j!`ux2m;*&{3ZmqU(h#c$MWgp0D1UWEkB3HYIR9c z4kU|1UUq@W3B-%Y5%_mV*?BNc3T(*yO3IYXWX4g=Y?mM&VflmlaywP@ zA3BLopc$LmiA1GUZ<#2hC}lxR2>N25F$2#Y%P%mGhCf=V^uOE9sTMKTrUcq1|97C? zgVuA)`>l(DC~X6JVya5gaQ=mFKM@Hl@eXrNgf#`?GO+yf^nJmf{__#ayuwcp|6PE} zrwaA`5**en-A7?&3c+=}qb5}NNXTJ75KF02JgmQ$$na*S9x;erqC2_k@QlDJ?qnK^0n96ISG|wUxEGHn zZPmz_!+4YNfblEA9qk#EGZr-P^+@k9ZzK4%z?k6Td`fJ5#iW8SwqwLUI5XGTRMUy< z;;+HQv|!(VB#ulL>J3=88$mn&C}I6M5D7ne4N=-S%kOXZuzeDJm;%hcNZi2v0|};b zE!Snug3Zp`**8zT9f@BfjTl=7(N_ysQ&Y@TJ1VPkIc1V(IoI1RHZZ6`;I*^5%v~2q zOmn?fp7>PqNail)>!M(O10jLgk-F04wz8WpwJRWTIpBWwz?$A9(s50IdwCcNZiXsm zqFxLywb*C8a91U30FL=@9J$^Qr!KJf>ID9ho=k2Bu92oM7C8K5P&zodKCOJcB09hD z$;e2MYO`Gk7)z@3sqx&!f8s{Kq5OKuo|b!3cRpn|qZ#ytG>S$8)!#xV-_?CVWf{Nq z1?EvyzDo8WHP3=P55Z4bO~~r|mS$pQ)K;37n(lK?`j@PN>28c0W@2zoWl=S~!W@LG zjEWUtF#zI304*n$W@#U*`@Qle)%;1bVt3+WIN+v_-*j{r=;g9xdJ7@#Yn;edL&Kj+4MtWe}G(!s+wQ)op% zRWS8JT>)l)q*xS+exj5j||!Do!teu=VV<|cLSn- zqnAj$y!Rt=f45<$`XpJ)3%gq#FpKMnPP_!5R!&pcE3zrLEstB}HzLa)@5%w2l+!?S$-?fE%H>y=|(HJcG@zzs% zttzH&5huK5E-jvoMWx|+x>`%|^|>H@kc zk+L6(@K&8Ql57nrdq;G)!(y&qb6Kk+6iFrUZz|b`0%Gm+4Wd6;PYckCz;5;!pn23$ zrDV>A1og3`_9E>Of)GqYeXJjW);1)v{qS@858ow6jD3C(AZyhS@e#pT;w~Dy9pBpT#>;1o zL|m9$_)~yaPLTP7*5PlU*R~X;+!rGtZVD|4JTnU9IIvDGgbK_m?mG>>-B*{_)nHf$ z-=U!qb_FzT1oq?X%PYW02AT}p(krs>l1lC~1|?aDmEWN9BNT15Ygz)2ypWZEC+}-( zo5H4&yIU6%L>teW*D#SElZP0O@OMJ4V#P*m0C8efBgOgp>dRD9jCobVsHsE1dWbMo z<8VTS8CDhB$X?!KI^39YI^;}R?WWD&3SCxXR*60!ooQ|`X8cy*QD!Fi`6xSS1=}t8Dq=-V%48 zh%5&5NYo6YSfm1K^@gKDg3J`Kfgz#{8|%lu(YrWaG`ouBUiJSHzUDd=WSXcFe&&Ou zV}Y?sUx<94{Uw+2d`I^}s_6|s|Mqk!@Cj$H?oI##OQ5cQQSG8GT*E&8w$^f!5R0Dm zVNl`A(|tzk?PR0CC}8PDL*?`#yT*5{!{3i^M&aqn=?mx#5CnBdL+Ibt`;F5@@i#`N zmbo-%PyQlu9{>9h8J)fQ2V}MX1I*Suy$NI)=QuJ!K3Rs#E+r|%U*SPm5qqRY{nMhU z=WG?*OTdqV{NPpxhsNP{Yg7YdebA}t+E2v zL35J7o>J^PpojYnd4jiQzG@18@4h!$Ke$csB(H~ty3qdSOUa+K^nT?_zDpBm!<-p1 z9e63pL$2|kPsV}nzJLltPe_u{p_wfj$9g~B9mOR-r@3@*-l($DBp;aO3te=z0&=k6 zp}bW}lok1EmU`Wdpp*5gSM>kgg#sdLB5poSFS)u86-p0vH2%z682><+$5PIIEp>sy~9ar?@hGSM+k1<|pzogRhxkNCWJgbmr|Bh6gx? zL&Wi;()v?9WDJXSJF7|HAv&;;J|s|C2n<52*A`~?BgQu6nWgjaXq{%nEPa%o5$DXm z2`4)DH-PRXKP3XYXk?3ALG%}ON=s<7lU}>EVqUG~aY)Orsn|1Ct$eSb+O|C1RR#M$ z0al=cA`~28XJ>I~9WFicScyrAR3kOOIsTve(+~tKvF6C6so>5VLv;0gixZ;wN`M7n z&`;`qp>!Q;q$G0LxFQEz*iOQPq(5DzvjC*K{^=c`;X0M25ZspL0>&!F6QhIg!hgWKyx@Y|Oq0r7?>YasIP~DMBs;_H_pW zkXP+@*%^fu2J*;qADw6uyV6w(=G`q1J=Z6HPCDa(j-meJB7~9rx>E9?UhjnU;43$@ z2KzD)o#b=`XxsIGu0;#fGWld>|t&r5i4(-r3BB8Yt6aN%)vHYee{98rhKTR~Yo zT29yh00HXZi(R|76m1f{E=P-D~3J-qU9(!b#SwM?-k$c63dI)8Nd zoiw~SbII8KmW2Txp!HPGyPi(`_?9$4$WSwQY68Vqm&(~U42GzNE}h`$<8@G8Bg|)H* zi}giTVfX5f_~!i)a{*(F@g8ZkLMp~t2HBGHd1z%A z^I97elR#8?s>P&cyOi>!dPcbu{hm@Q0jIYpG<$Ls%jT(~K*K@7G7pnaCZ<%Z;Vb?Z z>d3%y__!PmFha9n^nN3d$SU$qz{ zN~@`6rh`Xw;9Orw9fybR;raI|EE3;Qip{0zs~_vh4q^z z;+o+@ajHH-)YxO>=K@>pGoT&=4k-2%tJA+;Mfxm*HNFoUoP)$8}7j8xxMa-AJ@-oO?+6r0F9f}eh; zvLy+poYtvSY|cv*<_p?X#AbTdz$b3bSCk56>s$w0u<&=0!em;$@vuf595OWLX~_}> zAX0C0oQi}^qb@Bw8cOVclpERCiv)K3 z4GsS9Lmz;atjtif4V&;i?hs@#6Wh+Z(GH5Gt!eIOEGG!q!*sYq&@Qq!wex#tx|nB6 z0(3owYd9QiYT&<7fA>Tz)rFh3?D8PjqmsbHSkH<2M;U6cb7+-@7UiYwLcJ zJ`*@q`N6e{WPHEDWhAEECboE4LPF<0r%s@sL8gNc42{B0onMWjW-ctW+%7Lr*E#P>9oUtd(%uZU(ahq%=W}An$h;293l11 z#UXKI^jidcTo3x!qy%~-fK@68!O)QCcOFy5&*FT!G&>Ttv50R#I_uS~enQ+!RtK#8ILXGUrVswvyHidY4chXrDSe`f_drF^s5+i6~YMgMi;DzX*OJVfm+zEFer z!HEVL2Kdik7B?xDtBc#II+Sg9}YM9vFdS}SQT=SNAV*WxBP#vI*$L!tjz zg3;0*jw8X@t74J>#?}a~QNlp)F+r#V_%5CAHFmV$jgPXwL=*_~T!y>5Fy$!&QiKgi ziTyKZ@lCcZ^zdiXY7E!7R%<)MIUW%aI-Z&_OOS{r!$vIbO>s;m&qOfwu>E%&{Z8hE zFE73;8ZSiaYm*QyvKv``6-_4MK=Hvh?J?US>S)x^q|m^PdX_JhkfHsDPy-98#JM|95#_s-zsA&2gmqeXsgp3QN!YdK|0=X8{yi6~MR84UieMd-sT(yaGze z8K~RQ?8`6_4kWyhW~>o)SLD$?{X+D6lnK14XQy)?@4t*UE78|ZbDv%Prb_=fJ!0K} zQxTF@mHw@Uo{HP0%fmAF@aT{-eLCB$2QFP8PC{@J!Yzd-BT<1bbKX`9$qy&nzM?-U zo;c;J-vLS29tsM07)3V(09Xf&67GU_Z##egMA@|`KW+bE#TS&#p67JWO-IL&mc{4` zp-C~CPPAq?Q-qx$05fRb%>&Kv=s6ZBG$M{_lCZcOao6>5lKB^ul2;4Ix9lgpmHaDm zC!5_h;4i}^GaH^RVoODP%JQ!E*sK}J?442!YtmrpedidXY>RyXxExDj1h>Lni1>9C zpdO@t1nk>Tl-?@q0B%1kJL$47yt$WBcsJR)&Pm~TkyC#Y(wSNfy0M;xZB8uAxIKZTb$CFh-RJRSe%Q>&l(m4GeIZx~2p#I;@3}$}oPqy7iqZ<-|$YZ}}@DwV6_N)PqH_>8Ttk%lf zPsr0b6F^ZCU6nN#au0D~6PGz!Cz+B(g*_B7*MX=8)uL!WJ>WX-2Aak34k}*@;Elbb z0L1<{G~OR#sW_r~rR{yY05^ZZ?M>2*ecX-yS^xbB%239y(EqL!XDNPFRjD`tx9NSQ zZvbc>rQzS{_ZzJ2|0_-c+&#TKBc#hx$T3P(1Miq&2KI=Y{1w+-ZMwFFf(%%kCWA%$ z%3N@R*==)t3cXr2V$PU`u`eHQy@W*r>0~}=$d()qDM-`$4R^A(wc%-jE8<*b$pR?8 z@gLQo+W#>g?AT4Z{?$ux;;+|d`};a{M$hS=o>B3yDkFl_A{vi+qlT$r(C)spu3$Es z9icGja^lPsI0mGj98&2d(c=B|C$Ug3#?kq&PV$e#uL}bIIpsUh?pJEI=}AOBA#^Gc ztzOOb#^5%m#-iJeE2k9G`?L~SHBp>qitnw>`(uS-iC%l;WJN`nF}U<(-GK-e)Ob5Y zJ@Fw1$aQ+9;4x6C-RPSYF%mMDWoaJygd`{=e6jAgBSrvgP%}3KL)Wa6jE0yG*kKd(rr3PBfSs**Ndc+P3fL&jS$= zv^Xg+^Rx)R#V}Hx$2;#2Fm$D!#>3d=LbYbTQOgf5fA|kCv=v|-_C-{J44P*F_^Z@lOx-h(6BU= z7rsnp(qL>OfV;>*6z(ufA{dNt#Lv?ZePSRG81z7SiT47L0Ga<04Vu@nMVClIaehGG zhCEEA@llV1IjIOnynVc9QZu2{r}INmynPJ$qf&HD`X&x>7Kh$cZzy)_X|{8A1=(ba zrtgqP0tlq4l4uZa^_+1R8p)Z8z8TLAu1d&49!<^L{c=ec=HdrfpmAyIQMxF&#wnmmoNcbtm;lDipgSzeHP6)0F`zNY(a%<_) zqDr+B^nFmQ_aX|34AD6wuBcLt6<+!$;dM;k@z7&`XPP;Zeu)TGYZjJAFnVET8p-}& zXh{xw`k45G9cKbb(6c8HHKDdTs%`h!x@@8MAAO$~;$;5@?VH#4<98QJb zE->S$mgp{t^n0ai%w47y9h#7s+nKacQD;uf1R#Lx2Z)AHBNH-~HM9QQZDhGV)__!G zlZ++^{UP?GHIy^MP^ANj?;0Z-0w?CAGCtuDq|~|4WC6x8Tx07~Wl`z_sSEF6A5eg> zoMrbj(qR7Xk0LeWthszoHOs zdAn&|O22Hutx0vIyV2(T!&$%rA3~%~MJh=QfEo6ZtV&`FP09a0{jLArMCcLp0vp6L z00`osg%L#VNLU@@HY|Ag?#f}IVBlcpcG+&tz33T29Io!y27J58jm0hgw({0QysPq+ zJm_U|H?&HSJ9LVuW~uVq2kzm%SZ&1U+rmKy|L^Qy|7t*G6^Lk1ZI#%~@?H73c~1BC zRZOt`5j`{j>(06&JJ-98i7dKd3>~@F)+vLCIz2uy-OkA3krj*LxYoRD@rX z3=3IkFjt@FWUc0x%|l@@_!mi5#k*^2e%5mROhCZXiuy&m#jO`z(=PP(!!B%?`T*mzfq);ceI;Xs-a;BuVMFWsPk^{lUnMR%oye48X`zkd^FmwX27(Rx5P|)a-6VGaM|59_NqD7)#4g!gPNTH33&}aV z0w=xsSj;tPhwJdyv5?)jd2)*X_xBuo0>2K6o2F^0qc56W^Krn#08l4tFzTRn6H@AL z_iJn(&cX49JR*ZyS^Rg4dKyHMBQLDPbc>tD^T+a{8lD{!SRAl1KW}#iMVx17Lm9FI(dcg4ZZ`35!GFJhnKu8S zlW+ykP>#2|!4}ZSgDyMTZ!rzLzYU@wz`MZgC)lHe`0JX!KAtC{kXWml9WRXVOW_`D znOKbEI}!f0UnT-Qg)Zu3^^{0tu}LogB2kFXF=Vqs-JcawcOr=skF-#mGNz7ci-$Qyw63q ziD;0_S40;k!;1gvl<$Hceo~M~H^N#yj`Ul%!))E4z$I3+2)N2gj?o^r+^E8hfp*e zOc-(Id(`X(!|kzo!^aodXCjz%3(u3{NCCoGhXFs0 z5-Q4`)v2@ap%d2cN%iZX!bQ3?sI%_D@q6o1Wj$dab~&u8^ySWv#n{VD|Jb)o8H0Kj zf*=UhC`J1XW1UO8g_SMb5blOYtxCa;_F9g?f7vUonk^ zW-wm*GI;1xSpo#&JBg8#v~dRn7Id))N6;Z88%hvmk!91${}XQp+U?GN7VizB-ZBW8`tyvCWWEFkf(nxjKVv0zTvB?U&>HI4cW-JY1V_~{FK zr88Fz)}_GAE`@iJsK=x57wYP@R&-GNSP%xGI@)86@ON}C;GsRFhnYG_z%4zCk0bGN zmTBUR*Gl|%i(@!zKVi(EE$^QCYNjoI%noGJ z5HPU$_8WpQQ0WPxAOLi^KInS1|9P2LDJxFMfsxwf{*hoW#9SHX!-v$}FEw!gV z8B68FtuLMr4@wW}tJ@+dIW3DJZmAj9?4#hVI8}%lJwzTbP(f?Ke`o`4!m?qndsUD-(NwpSDxfFoQOG>2iON=C%)%70k{S)Sss1Yu}-$aSjD~g)-}9 z3x97wNz`Nn7h@6Vl0+1X_Kh=BX}Xmsf=&lOY=dg+UxG{njM=?jY3BYe+7$i9EEPYK z{UT$SVt5Q524NXwNv#C~$=y_{3Yd;52vqUNg;8tHzlj^{SMaUF_E9QBJt(to*K_B< z)OyBy-FE){*El8y0TQPNir;@f7%pRkTn^$Uw5~^CLNyGQY1T7NYKcOH$(ig6mNKV$ z9=B=f+bhlg>SuNy#7FdRFvhz~fuo3q%tif|0oI;2ghd(R0D#2#&9jvmjRq2V{{xsg zBmRRMRHOQR3Rhpwi*Liao6(Sd$1DOASgL77Mfq(lg-Y=|?Gugruc|t{+$mQizFX`$ zhW;T%U8nIb*Nl?>9DibX9*Ln*=NR`whV8e|WnqV&V!BYY$+i^;LNuy!Gb2_`cf04L^I11$z@~Z+M(DkF zM^O&`n9}YX@9SXHSKO5x@5=CaG~RGKBItRXdT4{3S8vxh&t5*No|;_I3oz`kgn44a z(0T!u;Nkyq5USDU5fJj|=1hlbJU%WY@6u1Q0s>94M}9_Qw!#s($KDz)G(hk5JMGT( z@DQ(6i#AN0xXM)>uRn@M8LtBgGGwfw}cN($GGZI3DAL!1h}W)D*98 zxaNzK*4eA8=K`Q#De{M53QlG`Dtd7t4n$Lf$ZA7WQ09L@o&ekm6eQs&pOy`m1^tOJ zs;5m03yIPUGl+=SDlH0kTcnz)URh&lP9Z~`0o(6l8&iFm=dL}FtS zBga4WSv2c%Y);;UAyt$}6+n1w-?UC<;1m+Vcq|uR5N#UG8a!@?)inmL2aR|xUsPsm zINLfpfK)jp4w|3sK-1d}vb3wxa=bckzSXvd(KaJ&F8=tr<17I`W}>mXn|97M@ghP; z-=%F^(!|o!QXQ*pa6{e-5q9H#&D@s*f8{~}c-VcFysF)d+vmw9ESGx27U#JJwRr}C z4yrpMcW!iWBi?bF#V zj6UPIuGR}o*nF+5KN=Qqid<2mz9JZFKsaRtH==feF&mU}L8ODa-&b0z$-`S{#i$D% zDe}L5+)m3S`$4qbB;5J&H|IJhNU51utaoBBe}7k6MCBS>FDJy(Z+SxiLpoj;tn7Jg zCNNS<7y>_4>Q|eI|$!-~B{Lb`hMVM$X?5o~~s5NS{Z1&`~akA@3At&`oM@XC)Pe^D3%VM0u$YgDR-cU>< z7v2#jo=&)19{W#Q9JsMd3;ZM33Vo_#(#5~)J>Ww3ZrAt@NdMx)Hfhw@S%hE(70?9i zLv#a+4((~TLz~r^vO5r&p@Am)lQdthXhTfgy(p}nub`4KIHS2DXDi7aZxa(7_}?lB ziy-*LZ6@EYA7K#Tx?qT(jx!jKcLJ8vYrm|+lg}*V81v}*0-Mp17U#_;(hb$C7S>&6 zMqa(8X&35hSY|PS=uezyaQ4S*g_f2|$?^4qc>~${CrH^YXdUM}E5OIc`f6V^aa$^= zrdh=7@ME;@ruO5y47(4hG=IcE+fKc>ghHmy!`!E?j$99N`)glga0PW$dtq<8Ld9kY z+`6kvT(o-{{E!RA%q8*yCP+CbX#F;pj}iic&UCykI~Oj=Z7YDU41V&t6Ki7Na&{!YVZ|%8 zto|Pl;WFf$y2Nx!W{s#PU-xehBlt2z;|;An;gK)$2X=+ypxq^Sx%2Rd_QzT(;yd{{ zbXEqW;VkqwPO{y#)>cx5NAGsA<5IGEX5}wky&73^7SqfNY3~e+?%7HkUi3+60$&Cd zLaf(@d{FdZ{fwM=mS#Mhw8Q0o@D&-~{Uc5v0o~&P@epoh&uTP|FQmP09F+S4($uPt zLgid&Mhg(dz$OHDrxS30U;T(Cc>bA=B&|mI3vl4O(gwvz-X@Y+wfVW{EqhZ-xwX5l zURZLXRh5qTII{XJJp0=!u%ZP45iY~DngSe6xel`by-?d~XTNKsM!(9u3*Kst_~zL& zdn;F8o-Cti<`fCdl0-%Om%w`EXu05NSBoX`uwJtPn>*>o-bXUTh;O z+V`|DQ^RD{1{;Y{o3o#>LJLiO^+rz7>PK2kxR3mZi|W~I5x zX;g0R!3C#i`M~63iFkagd3=Vdn1Q=E-};}q-UNmAkA@pjS}UZcm-}b`l`Id}ODkQx zQR>|zYX_fP6*2QEwc4RF^7T`_XSmEzpXifVv1n1mw>#?0o$uFV=CSJq3Ps;aFi!e> sWy08%o(D*ylh diff --git a/res/raw/incoming_chat.wav b/res/raw/incoming_chat.wav deleted file mode 100644 index 99a2e7dfcb9cef9225764bad3a2eeaae94ce5484..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 51244 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

    MD)T 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 ^7Hw|RhWCx~)hesyyTM&Ll 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%0DaMHrng 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

    4kUu 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 M9h?gS_4QEx55#>bF8}}l diff --git a/res/raw/oldphone_mono.wav b/res/raw/oldphone_mono.wav deleted file mode 100644 index 39a1c9a804fb0789fa4e82f5a3668a15b05803e6..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 156120 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

    R^Ub*g#e*kGA=Q(#YJt;y^ znjE5(_gz}B7%4(kkNC>TAbUJJLl&vlr$Lr=guPzD|@{c9h!{a&(>e0ax zXpH{JJ3#LhTx16z`1GyN4f^TwPM$8*TxNE#Ls?*)4elT}BlP+;qL3N@T1YBj?x&f+ zeQY~}w}iht4IrI0T{L`zcINcPPu2583C3TbPrzQDG4{Tu0~)av2-ZUOTD^+Tu2-xR z#glSRBL((K~! zME^)vrW%0roSPYt?u+urkY@TL{s=CEbq_l_NOSG8Z#7LerdkD7whpZNV$223Buoug zi>8RPh)=R^6Q8(#f^>=c&d2j_u@(Vu`r`rzLP+RJECRAdw@vcKUIym5a_eTiORTUO ze)+~L|B5cysbmuS08->>^?XM5;R%v55}(9P#hXHf(ASAuQX50#ByV+{0b8Jpyv?eU zk_sij`rCns?U<)T_rUt%_tURXHbRJjtKbrLml)?IXp`w9XlqgfjqRkjoooN)*ciPP z>hRwVAN1ca^F5zQR@zF}O6kFHh^;1m@V4m^U9WLi8aaGRCY4@sPJ!Sd40pS3noeY< z`^&JW;tS}V3}xyQjPk-CJh=ajV>-NsyOMVse%OB#lz>_shFQZ-sNuQ_>gC?I9cQR#9T#5tK)XTbrBBP8%UV&;t zDaIqJT~0N`0dBUzI>sA1)9_g&cF*XkKzS_Vi-E3IEtIZ+CU7a(zusz3q357hq1@s* z3m9fCX`R=>1&vSHka`5T+He;7IC)mm3DSJjKC~4*3Ec+`LXHF#`li}kjysV{ksQs9 ze}Pt!wK_b>w!g8b=m#t@HI=3b+5sbo2WWm)C}DrX63Q>cVBF)l_)I0Iz}?)wQ=byD zxQ9!fwE^*SFED&hW~~t`Oo45Y-;q7=ZD=@jDIzhUOE-7!2f{@cC%BzIJ$E!^mA$`Z zmH&2tZX>BS$Zo1n7)I%5>mS;pE}QACi36y_On_|n$AevQ$2-r>TppS&KjWWIe@K7> z#zxly@!_N(9bAJpAz!%p(o(G%IgU;bdrSey5=!Jngi+p zl_H+Q0`7d{47Ux(i|-&qj1A(xf%o+FxKW{W=s5Z^h8Dd)gml9^`yBsM8l9ET za-pHRq2Y1RYp2dv-=7-mia=G8J zd~et+x7~8z_JsrGu^#Vi9sS?K7LT6?KV)r`p#yU2O9IN@WNQI=IBERt@VL-9{2a~? z91C%a^P8XSW{5v}7jXx~UxYJ^Q;i>x*V)@ZMrA+k{>V@4Bpd;;3w{KX1S_$Jbw7iq z5Tj$47y%0;jK)k>Q>1UaJxNu#vF3$st6U7yF1n6NU{7EV#hnGsKrEteArAwb*EOoR z0a~nw(Ys}N#}79cQts>0?hy5}{Q`XT2+g?x2g-+bG9Gt3IABA{U5F-vC4%CAv&Muu zwz&v=`~%8|&^GT}?=uJ6e9Q#5mf3-kofreqsiLV{@PruSvC5kYjdIMK^~iyqZahllzPfqjn#>MtDayI)~;O);hFaEaJDZ}#mFmnw9T5Ps;Xe{)k zv%!AD{~1!w>DGC8r$MlLW^430qMxClcBOc_p{XOF_0X3mG&&Dd9c<@9Y4{OxB`O_Ll65~e%FGiY}6O!KIzjVNwwu9E=&v%r6!Dv?DE8qm+L4AwA-TGytpEF+_8JZ?Op>AJ$%}c^{cdo{x5Fzsu8UJCZw_IiI%vaayYb z_~;fQ4J}vPZ^x3mW&ew|w&s|zHhH) z;k8h#P(j;;zZ-oEiU%Dq|54`$2ap1|MBgFh2iY;J%0I`_qw)K9P)*Ez&Z@n|4m<_9cQ{1tRh@y zf^fM24=6x5!P&&FBTZs0DCQ2C*J%xAyc|Gcm(aeN!;PiZ z)8U<%YwWMs8#3gd4IXNIC!*V7bJW9kG7qqbsMzkmLD+gU{E<8~LQwptxDhx+o5$G- z$&riyUTwV}LQ{TWYVA{GId%stG2xhNO;yj9?ZGubV>F0fh-rv$q0f@Y*=eCOEpdR8 zIV*Dy(}sfwMb?AyEOFkv)G`4EK%J-qEup4%-BH&raunO74 zLr%Xfp0q#l1e$7;IcDIVa)!qz$0b8+#M^(ZmLObKEwyn@Ysj((Bq2PfG)CJx%x&>t zJ)=B!+CshSxO2E)ahRBst`GV<{00@u>JMIQ0=bS7b*TkO-(UiJb|j1G6a0@fFfdT3 zR*!efP!mYcV7Y*k*vAYw!31?71_9Gd$qo&pQ(|t2r>G=+?H1$=Gf!0tbv)%ALn+dU z=j$i`-KS~B!O^!os~rbTePq`aYkV`qDdGo}bQgqq7@cpuYfXgKQotl$c&2urbdPpt zkW2nAuAN}A-!bb5^yHC<58`39k0gCe*`Z355Hk>T0``LQiysf%uB{5jI)0qp%tgEc z)OUl{@Q{3k(IA$G8Ea;M4ksA{>pEh1we+ z25*2%u*0yqz(S|l^%9$wv?gINVM25TppB%Am&Lt8thLNF9mjpo-;$jYb7@^P_QItk zS2JyZvw{Bw_Bro(Sn!>&R>LWU9K4RV7n5rFWOy9JBg;`bu*02al7=26j4d2Yl^f=3 zbA$QNx8Rg;f5YSYqm6Z;Qua>tZ{@kVD~ip43g~!4LBnYoI9!7&MeYI*0=>ZuO%!!o zlG_u)(JzY@2q&ldXx)HcoPKWuz94N}{2Tke`mGuru#0D!tWo*w4d$USS$sLP1mSi0IxtP2#UIU|z=z;&yIhj3ngBk@ z7>*jPJ|qc47R3ipO6?`BDSQVLA~(^GK+Z^08{ayYP)N8xE}fAOxJNsX)0CG_9;hs7 z)`efhAEiQkxBU#_K29^ui=Gj@s8uPMzMrU1;3wu0>cPQsVP)0{7()76;RN@M-;*Mu zHHGr+H^B|UVHvyeC{s`6N=sRw6u3UT)Uc=Sb^S7THBj6!<>y|-EJ7)R5A0^pDUr7G z@NT@~xD05fZEujy9+ia=7KMnSv(59Y!@xrTgEdP;8;xuv8Q0f$Ncu@U+b}0o2qFTv zgMVOO@z3OSD`xTkSn-+)^5@Rj)Sn@@=7zD-zZr=j>;y1nEp=zz3y@{LP@2{L3=`U~#>d{L=|2ghyj=RotGzmE_-0zhgUdDv( zk^H0hjh+(7YQd2B;pmqxj&7YXGq@Skm1qMVcC|&!gcNf3(B_u2mHQM!af=dU)ZW%* z$`4df&)-=Ski)#q9*BPsVpu9UqpNp(jm^-^zR6zbWwoR7-Mu|z_v*?!o&Z+R zny^>=DPB0bF=a^S?Wsp$ODto({dg0*4$8TJ+-lrxwd2g(b)M~2MfIQc$@Y5=O$ZF! z?NC_2$a##%!T;KS*%5J~;_>-im{}k)*iA=d2>G8~*ybbB#i6(8yYODVnQDGpU&T+~ z3g~}McKcrGQeRJUE@_M7hcbe#%LlOl)(M8afmIPGNI;U}e(3>qZN?&wLO_JO%_SW@ z<-5Fm!eGpGSzgVDs4%OGU=ScH`U>*^-4AvbIxehN4{JXYp2sU>P7fx?zA6qwlDI|4 zdF_!3Wy@?}O8m2gJfbf=83^Tm%|5`t2V^+QoDt zRRB63xvIMR^=LWHHJSbt5KvyWXJSRDRgo@e9xWS^5L(Mb<$h;0dN+r2X)UZ0q}JY7 zHePz%u?n*vzs*W*_$CuVPcy&Lj-WP1SYC3(Lm8InXAgxg3diJd@!0s+{=Kr(F{Uco zJ)`#F_YZXwmDBx?umY4ocfYo~Y7(M|)*D+DdgjRof%vye4i)@_&DPn2UFkcaV!2;T z)gIA*)tvvnkVq*cHa(LFt6%g23aXW}_!CSx+88)E-kFdg| zvy8*w=jmJEP*p?q*oFayJD$thvrW+Ux1K4;-sndl8ejUP<^-YbqTa$)OM<1>OTeR1O9h*V_=+6C~W_1K@$U7$P2RfGUG z4-m49(MNrU!JBP;MH}lnS_;+ETmwO~13c+-aaX*%-Vd1$^ckIT7Vitp>g?`?rsN~+ zG?dC_H2p-a=3jztZARBrs6N|wT81iSwOvq8^WTP&LObQA=7lZPX8X-%ilaDul5^~X8AYUM!1OV!{y-jBu?mx&Ip4~ zn9f)a!Q1#}1VQ*yO@T}eaPni&BuksLR!P$x_JnYEDE&OkBn$ji$yZaBVXdGEgp>ST zafcDfW}m9oRtxpxC6TFGi~=5eBf8;T+{VW1AD31>3FoD*OZWzf=}=KOlGdlmb}M0tq}GR0O=_oM$Qv5)nHbbLv#p`%Qgu7s$5;N4FQ}gT7Ce2vNV9+UXAH{mV+15v1V-F%nK<9eLfyc$Y z&A7r7!A>C8rfu)?gZ!VeyQUZF1Zx>oAnWueuKB%_g_aVw!X~(iv~RTi1Fm*jw@S7@=PRyL}3Z`%iiFzp*@ zr$(dr7oI`6LKQ-G2eXI`*^x8?YK2?wUJ4wJu0e%?`(1XGrtOywi2cO4XLNo$BRYn@ zAlQvR>9niHT1P@>5vCKQm>}{BvM2fx8VG4~j8u6vRKFGW3^>^`)&NA`PNmQ%YtYqG zl~0H_Q(d%zz*T=Md^o0oFo;WIAF*w%T&TH6>Wej->>Uv^4}1vr$Z}ZJuDA<2Pnm|k zyQF|knA|v`;*D-0CXGmpQ5&|k53_f*z0ge6U$OH& zufr?J2ZUwhQ?L$Re9ynVR>yaWUb9^TjE+mlP7quUHYjzDdUO(QcbH_uK#=Ec`p#N z+rvNYM(^7|Qv^mh!>EdiWO4c|VntR)S`?b1nyM2-^#FvvrnYx&cis7j**8u5T6f5u z@15a1?tdEH@93lJ2^pF>r}O{#R|9;<51OG%Z{AqV3F$L;@8DpMIY^H@)h%oqqIv}; z;f_W`wsKdjG)>7N?2So-iEse(X3YT8a_8m1Y1B|O*h-TVl&k<%HsPW`F! zNcCdNVu;czu0b~T@TTC(@DhX#(gmR)JYtIIAK;sP%s_ACB=Snk5+70tmt+|$AS!sU z{nLw_uVlwy$VAU5`%>SZFc0KIZXnH~+``R9e!zq%ov7`Q@1B#u{j_7u;fP7D`$oUx zKokdPaYofk)a`yP$-;Vx*9YsZkG-wfXDga$MU5I2MAgDwmw;n(N%@3|~4Ms_o@fybkK^XZN~B4X{@-_NS^ zJ8oIY{>+&5Whr-V>I8I**=44YUnM^f?&h0?eG|7N2hzbwL(yXmMQvz#z*6qZac|V@ z78fWU08UcAL?!akrgy~UtZN7ns2kSFd6tUJ%1SXXcVHq&4`pMrD&b4;cSB(_$Qcer z3?my6b>%UGUK8q@ZFQSObR(9Yehz+$X~4`xXOiX!ENPkCT3?C$yvIpfjr~tMs3lW( zF~9;yJn)bS1XS;Fe4M=QDi%RCG0GC$@e4e;kY0bZ~^`k!mxuRN5ngf z`M^CekXheww{5$3F??*K*-)-s0iTvDFaF71AIrfq=+BB2dCm9)8$-EW(PX=iok)77 zyH+l%PY>5d?n)!IU#05kS=M{*N4yfXHVZ{M*a5jmY5=1EX^;^QZX&UsFbBhkSfcBNr%PrDMb1hah43n&lsg{OqUFf% zI_|-C02j)0e|D-J?b?ceN@PY?>5eE(o-)cTo&a)Qx8C)QJu-Jm!U$lQZjt{pC6Tb# zRV_cH_+jiBx=gvvoag#mwYqf?%FX;AXs;}-(PjV2i&5cO|4+)SkMa6zFjJh70 z@1`gaS_8{g^b zpc%N3NAqvQ_vg*S{LA5;?T)5t?U=xMjeu>d9XHlnVRHFT)c?Ei6%EE+; z9&C+VA!Ym#z6QKeE^S@edR=`nFa@3w1nKjj<9QLpg_jjB40_Xv?1bR;6l$;Ka5jq%9W54*yte27%SBV+6J?M)TZ<&dy&5PM3XUo34b7KpQ7!Tyh-b8v6FZNqSEn{AS&=Bjm_ zJA3(^ZhPZfIdYm?q1%1nn18zK$VUfdH= zFH|4%z;GMmC;O&-(yw7vBSKGbUwuDx6HLjOki}o;0&r1OPF=vJk z$J`hGg`bt2tfc50=mTStK{ky{cGi&KT^qdO{HCswMI48SuQ~fM-_29h5KL_zJtf=! z$Z#H=nK8U8gI5yxs2l0rLUF<}fB+5XV~Ss&4tIzJYghwgCnzcW4Hp>e8g~TYwZj-caS8fx`**a74CM z^&QUTnVY*j@s9cF|N7mrDe-2^ZtLI%Q~PiKcEWrxRx!F|mywIx6<5Uj0AFGlrJ0QS zlPaSF)Y$e_keylTZVZ0kV1sdj^HgXJhz_3(>SC!^{s^4q2-zip8{(6qA?{B6W7Im! zApJNbM+$zB=oJqdAu8-~>y*TYjNby7ctI0ea zP-bDub||hm3NU2Ba={2dMAW9NKu(AsDcB3!==_1Wl4l#(B)Fl@D>v)c@t?AW>2I{` z)uRJ@BHxe#4Bo7-JtujBOym4UKXGB*WVW{3j2NRfx1Hy~(97d3{0pdf(`0!us4|I2 zS|WK+`%Sqw2u6`8W3hczvHzl(N}dnOsA#TVien@%qfYl188%G)-UM<;)ElYaCDhS^;%(f50uT6;M@ANg)Hn!;_H*qBJc9+BQpLwK@Mgzoc z2o0=zYrT^P>h=rKr~w%pp^rEvaWvW^KV3i63#Px0&!B#^#x~Ps*8xG)8V{ypaO+fG z5u+6gQN>iB6zvRKsUi40!$czidY&%gjN)|SdRu18-y>f4c-CdMEunqAvyB+XUJ550 zE=t=?N1*TU{?G#X-cF76P?RP-13tv}+uX->l{KPp8>3UE7DF%xbKThoun7HRJB+rE z{{?&4+tu)*^H^utGnr5cINGte?uS{1J%NrfUa0-o8HBpo*9ph%v*j$mn*S^A0OW-I zmwl)E5ID#knc{{FsG3sW4_3!Lg!rWB+t5q12?54G^oA5h`7GB1R28u|x(F~Zl!=`NUj?9cM8q@?5FdX3F`{+m6xgV*5noFxp|}1cKGK#(V`W&Mr#r5%#NOu4H06 z6Ai$1eiKdgUW2_2D(y=wA9Ra#3%$Q#%#d77R#$-sruOVPK``47^@CXJv&SUO0B%*9 zyfq1`bTR2XCghXhf%!O=mbN-& z3qc-8@_r0!P!Aa!885?q+R;@xih}UUNV;tK?~9^ui0x>b?y>BSR}S$55P&-%K;&WM zH1%{BUCuvNgMW;9CfFQ%h`$j^*5XtkASPxwsldEI`PqF8Kn^Vh4uUTX@3D9K&l9(^ z524$fi(CQ9kgR)jjG89t1Dee&#CP+&Q2(cY7PMi1P~Ks-`J?G){Xf5o*qxpW+v@1z zT1oWA*}>iGlIyPf0Prv7Dp8a2ybBKQhFA=0a^)Bv==%F??3-O;*mw^TFg7*V!;~-v z`p;zqw$fV}3m`zxRmTcTouSAy&pOQ%P->JZu2j@hjM)_17;oz>yp#Y39(Ud*>T(D6 z=$@>??F&8gVFF7d3S>I2uW!2er2Kwx0x(5Y_H)puv&|Xq|Lose!=hIZBFsQVo(3MW+!iN@PwPr;Q4@meOkg^w0(pxZ zU<7bOLYTl`>?HvMrj@eK0*72vn;nYQ}pL-_aYYN8etG}Mb+q&C)Z~s zVd`xTZ-Derz@e=TFAF?}KZjm)-!^sC|CDvK-!Y6v9!BbIvlUYFNK&`7y==MTw$YBq zyDr|Yt_}2Ul zoQ?j+=$_!AnZg$lX^B}G3>qlV-FY3wP6DLhu|JF^#R7A&Z>#6AQKj2u&M@kum+%h!U!vZH7gw2n6Q48Q0KdER-V$qzjHKHgWqt${v)Voy8p(vrv#bK^ zQ1ckZtn^-79i|tm61@N&kN$;v0^^0{j<@Ee9u44`^P=c}Lxe5& z$U_zfE+D>;L$v>56B3m%2<&wD66(){Gl?fL=QMW7Img`4KohTNZY^132pzT;G{0}! zWd0Od5y}K^L;prz1jUnwW}WHwQaA|2vHyo`&v=;f6X?<<*}Z`=?sNKgGQVt-wo(5^ zv(8{~&as~|jCQJEMJQ-^zF&gL%Xr`YJaejcrHY4mMcsm^4j%&00pI)^gD>DCvAcmk z^zS7*TrFe;_J#Gc9YayaZ6rILnOGf&Cd1cy@el5KKO;wi|3OF4-dS$vX;{uBya(Wu0ANZ54*le-qc`o~^1KWa= z9E-$n>u0L}f>R>@6b0&h)Kca==y1Eh&BB>@5o$v?`aa0Kz}yeZ$4(F`2z*VvG8efr zu9i{m>!pl$KVS@^)j1x@`L@qcDQ*pVBy0xqCU#4BqIRmKEUd9Kwp`S^85o}5tL^Zp z?NA&I462pyQs#pE)Iyq%c9#2yejB<4l!xn1y@}cCDp$NWz6bRSFPB|tvS>(=$-ukD zBdsyA)qZ2Ro29Si0oabw;#~>z`(5kNjjj)apt&rr5Ji}69q$@OJHx$*JmZ_=>Fd62 z>1ups8fWR}c0)=~FQY^z z55l?Ca~dd;n}8SWE2L-2O|NFZKke?G6qgc)wuqNWnyMn{5pPk3T({R+3zJ(&5 z#Z&9RA+G=$TQyZ3>bctAl6`?nK7;&0^uF?-6^}oI+UrTS9stfs{4=s;T5Rt)Y>^j^ z{2^Q*MELeJu2Z2grJ?e_SN}Z;l@a#h*DPHg^t<83x>f}}+L*YhHAe`aq zjocJ}7uHsLu3;Y3$|j=!p#QR@fPpQ)b?N+{w9Dcm{lS!{-Q>8zJ{JBXgAdILyTHBu zpS9CWNH~}B046b6#dB0q#*8;xai#Lf?|tok0v7ZJ*kRxO0ES9PJV6b*hlK9MK;y<> z8!#idM+gUOOTqG#5SCW4?)^J044Vs$w{6q((LS(0hkl{isiWa3fK7;@^x~LS`T*jn zc;kRY{XYwagYS5Hg)~SJt%kTxQ};E${TKNUEl&NXx>mZyy%l_dJTs<$xUzCY+k9+t zOdB|CSr?EKo^YhJ(r|$!vu=S#gFJ>2*d$`4;WHc(vyCorylKGH-qc({oFMZ+<(j{; zN#Fy?HhRyFqkqJ@+^AFJG&C2tCOVnzBks*(b5m7v`3|Zh*B?I+n+lj6-iX2_kP4jC zKaxL^kx^pgb(GmuBf+=6Z+l{S2jv3B=#V-p49mmDW`jM3L4jrbcltS_VlZ-c2b(k%v(p3m;^Zm}j~#`5oS6bP$Lq@o$D;q}A{TqR&M_%G!E{V{4R z{1|+`N2NOi;3w^1nLVu<>gRD1gUb0e*D;vUX_X zqH=u~&>ZXGN_ zU<%O z(r^vl%ml%(KAz{HakhN1w}>_=aQI{Gi}TirF*MpX5Wzn;)E_Y!cNp2#KfqES`pF_D z?dDX%J3?4^A$z~DfH5fOQ~h!8;Ind7u~>h*>bSQDcUD4o>^J{0f6$ZV0EGTSI{nXO zb4&{;=eTP_>r}&RUeG(_Jp?H1wA?h)F}rdLGa#WF*#`4Uz%s~j;7fOmm|C@1R)%+T zw|RRvPj1$k|3Y5|szv7-$)-AJ33@ZE4LBGIp$*GYcJCSc%zoc^mVi#XE$E3R_+y-> z0ep@*bqjuiNZf$+oP!+D*NW5ZcL6w9BgG_GOF3abZQO*t78gf*8$5113G(uFSzG!2 zA{*tOWVQajXe|I@C~dpfR4O~?5g}y2cvV@O#Y)6~qVD%gL`MvR>3;49uSwcySpdI6 zkWt4IPdf9OXNw0zbLq{X{~6upZZMgEopUTPBOKfEUH*skUDy*=ZCMF^$iTABl2$-x z+2wMUJ{~+KN=b=VryG2j!>L1J|Jwi8G1qdDWJ!81yoFRbKDnTRqO% z9zFm>dG?AoRUeZ+3ZHWIs80KL-Wz0-h(?E1*{(_UDTwp9PK8L0qbfJE#18XpbFAd+BR6F8-YY-s8SYs5}H0M zFT!RsZem>ytrDSM8-QT$;zs}>qKZ#}`XkUIw248s7V17uJSX_gIR#Oh$fi_SkaG<8 z(;(8*37->QGWLP(9+ly_ZY*T5u#lW5TJ$%?GdN>;pT@)!VXJ#SscYN-=3(G56JC4H z$_3|>c$j4WM)!1B1$h=aYz$U9tLM8KIa}kA(6`F_9#8V39vfrkgok^W9%i77_MuA$ z^N*C=`~l>N6=T0?s_X8wxgF0VlT902Mm9xxZJ3eNA&`}>p}~a=eBRUi32c>LYPknP zX4G`Q$IJ7}RX~3_cOAhi)&KQ%l$%dm*Sh0DGlDmaqum_JHbRzhm!dC}m0nUfC#5%b zeF%a68P`2!KmLSjbjwO(HgqiJC5UZZE=F|ljc)+hNUH8k$6YNEx|4YuUM2r)MG0#% zSHfF$E9?V8=x{j#LWe^xHrpF;U@7lB{Znv*O53T|z#&&?GyL_nY>}DrIE_b~9m2sV zxG#uR&~4BW&Mx9)-AfE9mX2eX?}!GNjnti-kn>UXnSYOT(&$T%g*yzsC$Jl3O3uzY zOI+-o?#Ooj@)QErL8G%@XSOY!y_h(zzUfY2T|iS`9{ROJ4*RQ$wPY}jlnb8qtH1ny(xFOVmRl7D&kN5x? z?%nNf#;!@*6}LO^*OG*Yr!B^ckMPu9NCZE!Mzc>Sq=*;VC^6ga~@SpV62+5ZoE zjlCiVnnD32I4Y^*^L1Uw`2NOM>Q?`Fcmz-uaD+7OLLI`e-nq=Mq>)(nUehBq9=IWp z7ubV4nbp~QUFrkaH`_1B&lGR=97;Gi2s8rB3bsJ}5%sh3I5gx3CTyx)UNc#M!$qIWw)LYY) zC4f@mWzY=(i9{y;4ex^$Cr(ZI27BamAPC%A>gSMAOP7RHW5N;QXUHJQ**cvyg_6Rq zBc6oT`0skL@c&{C3b~|-;pE6E+NOjEG26t~WCCYFCn-F?(B%tSmzrLJx8V69Y{%iI zfzG?cS(I_G?;eXM2Or4z*rO;8>{b|mqt{Wzjy`RFBwT}1dsAQR*lVP=iP{R?gRmB4 zvpq$#7~Gcmt@~dt0+$qwptzwqhUxOnsyB84bTM*?t-1vu zKLhy)?WveAS%{sP?<}~KbcN9cRRjEnM#g%%Q-E2jqf(T6Dftccj^}Gj-|8mOYFnPY zuCuPusRjUlVcqc3h#bnH33voj{iNHtCtf)gCF?yWW++bt6 zXo9%JKR0%L<^pwVpBmzjY*CG@KO>Vahw=8)Qc{oXEFTHLB^x)62kA9w zviBc#11Vs5)4b8Vn8nXID7X{Z6zI!YnR_y`UT~0lGVIf>c4ApwxRXtqDq4$G-)Nho zd)ArU`PeiV7=+BWO>GlN7r|tF18*Do1^NVrPBWw!axzHT)`{Pq$h=XuU3qA{7~4L| zHVUA19FWI#hC8pSXZTOxPLo|IG38wD>~3n7(6_));@wOBB7DhQ;2qPsPdk`=jo$^V zRHI}cl}C)a$V&QYOtE5$>;(Q``dRMysOLjV&yC|V4h70oYV{}oILvvsUZ|xG~la+{oZk|#MyO=gK`#kQaszuvC>YZ1dyMVV9^Vt8{z6aoDUFIub97COY zt@VOywq{HHp_VKDGq@vxE4n4NiRd=rcHw!{Oho@%>3-TT#t2=QUy_S{!(V5CLsxcXa`Yu zI=mjW&i!8gTZ4+E;0Ac-)D+j*pm$@>hc9(vjfe5?61sI+m%fhCFVtcE?f;GaL@`3! z%{{b~U=F2~`o{CUCh~W`fgU&_-CAF6$)(MOR* zsBxGK)YZ@#eQ(7>^ZQ6CtkGAZ9pg;nK1w?ay4$d*9^knW^D^!%0`9>9_M`V>>L`Z< zILw)jH4O&;TgvyyG=*9|()$Ssi)6{eEmfASm~EuYsB`AZ;-C6k(8Z#X4uy90A?_?V}Fbp?>%0OKX#y~G5 z&K|s~|5o-_fB`+0HJfq;&H|0`mm5(|AAUB&9&)r?EqAr4gLv>1@zFmdc^cGD*od*i z?n8&6XHbo-MDqAZfvXhIgd0o5LQk0ciT_H5x&L9cfmy#CPYyNtgZj`EhsDwEUmWQL z5#Z)i<4M)%|DnS8#U{fc=q(nOF%-7Y zb<#EoFoo_Fniwd63vxQ`d?5&POR?B^HEauGtt-VvP0}{1{W5`04!gE?yzXr9e58zs zZ6RbuMgvB&+j`YU{agb5MCSs~5O0BMUdQ3a*MC?18Qz$q&T{th!GasH@WgC>t7p8V zG|(v6n&{wZ`EcRG_yNgvse8HhfI^~gx2UH@jh_XU(bBc;*G&De-$^y*ijK>n4@?4C z4XJ_Fl5YwYqzTfu2;xcq5c9D2x%ZQLP-U9OHBaT&0xjOXl37)cqMSt;b~J#c7PgAp zi*%*_Q;4p(GPDj;#Na0EN?eZ{s$ZupK_qkb`Jqu_^JQyVxFNXO(k|-RP$$8J?osv~y{lGSu9`x4Mq5fv-6%L|)MMhxu7&jteUqg(@-^oG5-8Gr zQz5rJ=SaGDWL!k^-ISrb>6KM}+2*27vtyE#Ggbhe3MVKR4*>(oH!0 zrkE-8@0hLl?lDtR*QMNNnL&45tDyrEzT}SJo^&k|{gnLkOa{NQ&2HRO?rP@+8o=W% zJES))yWwjIqliTWAuJ;pgL&CyfBtj~+td_faPG#t$g3O(=@iY%z)sjP*P{CJpZ7W= zpl6hY=w`hM9*i{UA2{7~Z){v>Sev_jhXUf`?{FbK5z^{`uN%_Da+hwuoK`UTl4AACI~eyM?&BZN(?8 z+=9%4ceP*D?Qk;Ti%ADjB-^0Ye;v~!Kta!BCB^ApY#WS~C2WqNy6v^Un!bkXxXZ~? zT^AH>%1<_W(C+Ur=g2>50st0c2cso2S>4AvJ+8P1o6IyuXK)rV?@H!SLZ|h&9veBs zDN0^Sn-QE~Pw^awti&t_4px(^_I8e^w`Tl-?v}*aZc&zS_9D~F7{!0KA6P@2gm(e) z&zf&&2rZ(K$yufWQBFD!SkCZaxT?by6B^oW=Ml>xamE*-uKJz;802N>o#(LgSKt|G zXnIJ{Y(}*qp%q<*#P#tGk*2G*1Fo`r3l>u*2YTr;Oy9y6uq33~c0!}|XEM{G{!gsR z)-=%fnrV1js`4~!9%WRxMPKD`5ih5%NdAgOShw2VA?tZ( zc(33<^Av4n5X4T8H3cM%tj7OEh9}i?r>b(lDq7tBD}J)}lH`+C6duFCCTydAu_Sj+ zc5GsNPc%n21X3p;=6lhU?!!=)hG}(cV6BMZ|J? zVOm^gY&G(X?U(5X^h>Ol4}()=s~XAXRx|>(M3>UKOZfrui4hFsHz!pm>7V1SP@V>s z=yKe6Ts!k2cQ6wJ&Q;9T_7%qV)l&{D>*Y^?lbG|Uwf-8JSN`6626F;cWD9k6DsT9< zA&b#$&>{!QxD<>`J(^JrP`8tvEkUFe$ zt92dH&>!5B2%vLD-4e5j+{!)#nWH|h7GPG!XVG>C#@a* zOpDq^EA+v)cpPH};~RXNrMqiy%(VRFjICC!eiHB@14I60e&4uRlMFcm-szcW`)Q2R zLd{nJcGx&OTvl%xPwULzlye>Lbu~h_Cbndw*{SA_isQI_>Ds940}Y}_lLRk1DZb5! zarzs75*iu4=lBXl(CAcsh0@~o(*JV-wEO)3*iX}!$HHJ*?9pBiF#oB6oo^fcJx2q3Z>o3aV3SD7Af=s{`K>XQPeq z6i3hJJYp;l0M;wl8IA`>g-KyFbQ1K8C)w5pDP;AgeFs+9BNt+*F}3ObZMJ zmM_*U-F(GE{eW-;yB#=De6ei;@?}O}I>#CcoQOMC&?9eDOc@juNcC?IbOB$)2@ySv z?H!j*XMl;Gt1iy_1#|r#h_kP%0_Q`ld{39NgG&J%NR2?%e zF&840o>ED|V1(CqSRD~atAw;UPXh#tNjQNn;xGaW|X?>RcQFI z)Qy}e?n|8?M1Ra{LcmbI9}qqt7-z1rp2x#j>-;4Or3XqIN$~{YwOcLou*uBVz!!?i zlBw1sz=M!q9=!gC=BVkn`vt0yml`#j{L!u=AUJTt>Th`_`hx$T(*)`>Cd1o!9)^QFr~5+8);}G%`XHw6?kzVxQjt%f=V*6#_mc29QL%nhr_WjU4D? z`4gGtSri^TbV^&Psdns$I!WK_o*Ri4q^{mH19Sp8!TDXk3+Cf*WJtqZ-9^Z5$sO_2 zy&qan>(^pElrN|z*Z_dmxJX`XMMH?tI!B$XRhxmArv4Xu8Zgk~hP@#b!4K-k$jZW0 z)*XC5-yqK!uTytgX1C`7hT9i)iaYgz`9e^Z7Is`&7}*fdP1-@lpjV*3p$pK*(6z`} z;0?YPR6I;U42lFf6>HbT6!{YG1XdWW=9nP|A6Td2Kfx$Wdzu9#%OTr?VH@JhlPIVIgJ z*kmvoZ%1Z(mns&jilEtybiiu;)yQw&f3bsM)sAD% z_3#Z8IdYEYkgI=WCTJ!|4l9N2@Xa^X+TWmf{C7;f-eS_qoCWz1i+^4%IiKa#vIt*RQU5>%e>HHvLA+V%?;O6WBHR}@3W`VN-%#Q z{SZ{@#n}Gz)*#6O0YtD}9J3oTTP3!ckSD>gl-6)l^9F2%qrf%Da^e=;2~sHediVSc z0RFsh8Ms^W@$3hvdd+`U7h)bX*Koc`+Av)foj=;THgS!l;56$y6BA`+4D_QrwZS2| z@E+@VYas66U95stOz7=DV5V7*yDGgG{9A&xK8Qiq+|g3tI*7by&k#*>9it8+PYjmZ zHbm}6_xATuyZqnLQ+bz(tD$Qc+}KYcr)09djS&!z$B6X|4FVd=7QsL01e&@2V)R$s zV8nLlJ&X*|x)imt7LBF_@8lWJ6)jv5C5KOeu=F>kHJq)Q=N!cx z+G5HHl~c7VqR?ew1nV6M)pL&uieb~8t1(3hFPZspCwXklNzh!^8(OZg(!B0n@4u1o zDg3R#BE3lMGBEw6SUN+Fr-8_zAGq!uHJ3)troYI!J7{6oF=TG=y|)PvA2;VN3EK!?ty65%k#AWH{%1iWrlND;&*Lrm_FsnF)*)@v z4L>8t@OIjH*f#0Ime;{A)bsvn9p|l+m}_Ic;)dhLQkP&M@O7kl%(d`q*4Oq!m^Vqf z)DqNSi_(vvjp2`{J`e9UOj5Dz#mK9a{~@*EKd3VLSK?*F2gD?BiTSGDOF^d>fB}jg z@U?lzV3d@|mzc=>2}Og)r}gF$H8JZdk%LEV0-Qyuay#^=N!X-wxmjSh1*`3-)J^jA$?`*PhM-z4NjY$fPE za48EZ+y=XEnCp2(j^*580Aqce3kWcBLx#ENJ3T}8Tl^F_nT4Th0xHE8*!%{}tgsn~rI+k-TIzcQGj4x6yynWpu%zL*X9NH8CQj5fqa5S!V0|_{i{Q zr~+st%6!}At`%%7+{lTwfYkdv0Pq?}eYncJr{PxR6E~P!hNtMF_6f7wE7PJ+B47Ow z1xC}~R|z_XddJ}lE1@85#7kmj@CKt_xX^AFepi}4<0>WD@pioZ!?{ud?v1S zZ`XhKydmYK_RgNmD9{n=%Uw4UCv&pBFFZZ44_I&LW!PuoQeD1mqw@;7JG{`Et)A>X z$LW%`0rO0b5swHT=ATb_!h9Dgwf6?H7e(F@(=I`329ZuUKX7XE?fytY|;&AS`DgLogZ+&w-xANxPD z3@}Y}==bT4<*35=U5quZTFouYqyl?372DSf@a&8_-K=qxwBCS~O+NK9>V0l$2-!ZQ zCZK#0*yo+EC~w#-()(XijuA@yxlRuJNc@Mcs?@I-xxLucouTixEpIb6Uw^|uM0r{1 zAw)x{=CGP=bzAKLCitdH9-Tn3v^{`Id9GPcpVXC8Foz=t;(-|Iv81c~oxvULu+F>Q z#b_Mrk$WUo3+fWI+599ps9Z$a~1{}OI~{0~ZLSQ2Pw6lD#I`wVSxZgXHD@D&WNj!XNDiK)0B$;seZlz*n0wu!{1H zy9Z`aX+;;+3d3pDuJ(P+o^n4iJg;~MVaQ9=j%?G zMtY5EL&bp+(mNHq9S;SEDX;bOI=Y&sK@sFi!cYL$vfcb1{DQrSk7eJdJz)rAQaG0} z3tdoknrRfIlz0GOS3H(sLJizR-ZJmi`oc~e_&uqbtYv3$hGI4&ekP9WKUJ{UutTo~ zKZhYa$BkcfuQWqVYyBsEA3E;-1c>&8=K~nlH-=)@oA5=nAo)kvZVbKiWq4-%imtze z{|if%V6z-dfIkk#1&0L7tau&PdfahP)~$MB>o6w(bUm`ozZWRv9_=>1@Dux;Z>(c1 zbzisK7c*ASJiVSI!N;CQLcoSdev_2fP=IQAN>yo2khhB5nN6D6aSe< zf^QG>K#F7j@ooVRsJ`0zqJI0M*TQcl)xG6j_a2lU_09xsNRV8>MzbCcpq0^OmXJs2x3AH$tXdmZH}JZnBL`{!o_%M4n{ZP5woYEv+p zs@#C*V6^;&1t&A^qN}X^qAd|i%x&QjOu6=x=)HdxXFjdPRVcT~o$Apx3#NeCEpV>$ ziJid1CqE^EA>XiFW1k6(m_25XVy49mI*C06EHHG+z8KB`45*d9oYtph!^;;tPVm6- z*AVl(YoWj6dT0I*6I8buPauvH&O>uSFfh+mtuuO0Ac-u>9t zCS7A%irkHS>HZsj$v&0Rk0(Mchc6Kld!J`dmo`d{d~}V_NFm{5qP^en?_&fp3~>*9#&_o_Q!OX3U2aQ6Z=-$V!I;ED)SupCrBBpgk`e1r;JJoP7ayn83) zC%Dk&SMG*@;-4`81j{^6VB4{aar4>d*>~LK^#$^4=--4A>z2-k zh6K=H#7{>;$1CZA&>&JdmgJ4ob$E)|i!w9Q*Ycp~kuJWg7u}Sf!ra_K_+FqGfZ~!W ze8a>qI~SV&7fp6oY3A4mxd#SM6M{S`{WWqNtACG6{r@Ib0A`wJ1Yfcjrxyv10JF78 z)*@s%VJ)D^xJ6vnu(55Z=P7P^sJU~kHbTCX@Q11asK9$;Ejf?k7lWVJPy2@=t`Ikq ztovPZvurq2V3KwU;}_Butp_ZKnZg@E z?&Fzkhzm603Q+>1qj`+w0P{PyFL0n;=K1Ltgv^+}jG2%w8maaksxxIxMlsf}7^gfN zmV%tdfsHjabCd^yRsNycQuPGaHs29PuD3m0?JU)QiOfhW>wYycEAY=am#{E@aQqDW zDp{S~>d$fS3_Jkx%`r{yrON>Im=C~vj!ljbXb_b}ehnmq$B_#1&kSwP=|rytZKn{} z*|=Tcvys`(G3JKI4_Y3fw`pTlX$9J_7WvuDuA5Oi)gD6M$MaCLq7zLLz6*09Yaptt zZ->tXJ4LL5sBS$TCJB*#S=o9_9VGxCRS8tEo`H}Ok&g8i_Yj+(|BBdo?jq2EQ40+7fX*ckY9*W-?wmgBnK;Y=vU{<`%=+e62G_!Qtr14H={ke9Z%U_Q?i zDRC^A}q>xs1%OK zI1nF?{~g%wCy_U2E=(Vad8`@MmZ|$6=mVfckyu$=?b2=mH3TQ9#wcb7hT!HA>j`a` zLBL)BJU6~@NFvlX+eAa3OZdnmLQm+=%XV1qgTUb7npeMc6>Dr4@pH%tpi71)O1onM z0Th#uyr}Io`WgSrd6X~;W;5P#{lY&c+B{}?Pnlge$=5>I!zB4n)C*b{gIXAu5eQ{_ zHO0`#CT9(c86VnX8W|Lkr{R0KsK%GRzR*3$F{Ee2#qN8O0-qweF3SgEb|g#dfIE2< zPXFLj{a*KaLaqS79SNIat2Z>b*Fv|z^SrUDIHexcCzYLG^gQdZD(gW{DYYQElA$d^ zEfGBA+h|jf9M?aT4a9CSkC{f_<^O|ALHQe?+t%K#?yl>#9&}w6x z^B?hsurM|db;FGT3OM!YGXyiEE+!xGK~Gy=E2vTa&+s<*6IzRtVG?Y2>JPR0gBD5$ zlB{R8o^%NXr#X{sH=FNE7W;T;JSxGTW_{|dk{XMx$M0Z z1I}218Qq*-QKS6>yN=xqzZ>jt%eH94%LsYMt`?Ydu^CFboi?5cF)<8v*e=4u>>pvA zai;%n?7yzn>F1)oe7o*)u$k1(CKH;ye6!FerS21a^qne4{}nrf=u@FKL!IGKU@lHd z>;br_3^%{f>2S`(kYFTyf%$`%8C#J&5z|Mxu4a{L93INuA0;iO$Oh{UdIp8Wt^?XH za=&#E#>4UuX4?NJ1wlGCV%^;x-~NZ+ z&dz!6=f19Lp))I z;h15PIKeUpTNVM5@UT{FI*9zm zA5Ht9T==h0#U(yY{sv!BoAxVJ{|xZZZj>&S-L`#2u8jQ=*AAsAw#duDcLlVhpGca+ z3a-gi_ob!Gwl1m6P?BN?@_U*8HjL2*{l_E65IxZ^97Rp2w!g44-Vr>@bJ>+bxs@|C zeyQzDd&D-5oRT;}(2SdDB`AHNoxB*@9?jA^w!F9Bhft7@;k%ml)F$cQF;h|4x}{Zj z;jLN!V=fKkn~y3JH0Q&q%w}pI4@OfRx|Uqjy$g$=N|qpDb$mTH7fdh~nKLl@#OwUZ zNT}7*Iw5MephItZK3ad6uFGCOZ@0G3=op9Wzz9g6Gm{pm=O8+8q7P{E>z?cTSL7Bwa!ktaF zIfP;iP?Ogq=VxfWc&tT=Tf)7Dd2QrM<{2h}y5m{^01Z~W-82yN026~89cVP~bUvl9 zbNt-r`izd1kPkWgy8R&UH{_dbguk)nQAO%D(-X;@HoCnBc`AH}gxWyTLlHl2_*(ka_X&wu$yky0K>aD{BiLQi ztpHYiSdn1Y!l1bQ)dQesh+3-fWwS5(sKKD=_cC_^er+C_(T4-?Sgp#Y%*mh zYY_QQu+h{9s!yMrJ`eg*H_RS`ea_KC`*bW4K6GY4o#9fa#YF1sraomWp&Zx?f^l8zSfwIEvA|;@e${IQ6#9*D zFr-!7Gezii0uh{Tsx$$SR}%-OPNYl?ulIZm#v&KfRm^*!C6eE@k0oWktH4w0B|o<{ zPl0C;nk{76x2SowE3g3Y88kogDR_p^FS{ncnwuSYZ#^41#ootnMIF&)%8mp?Y&>m} zqg-Wi910H!B?3(FiNJHV-JU174AywuB;PsbaXc_b8gp6IRR{}FnB9nd{XccTbgO); z(TUVG_z}VX3C6VH0uij3r#B>$U0zr^Hurw zJFwB%U3Oc;4~>(*Giw=mpWTcZlu=!nlO9KMgzJ2X{>D%Yq8+OZPLeN^?eelK)%QBwOi4`6WQk=X9^1bGey&`FG*Cm9NwmEJXelRbe0RUYMEP!d@SG{|T35L@OM8{Gc z1pF0I<5DVy>KZU7G8e>u@|g9T0B$U3-{slq0ky5JyJ|QK-h;}gjpLtS7J%=-?D4|PkE{csSleFc=tN2ymDpep zsrDFud;Q)xQ=V>#d96vJd~OMnT$$${da8|pwSz}wBcqPE8|%pZ6Qe2pT#(RCH7*Oxpf49pL++Qxrg)u5etQ2^V$1jpJBh+ zZrhy5GthU+qQ+J7aX~6{jeS{jK`Y%uLSbO7kjyCA@hx^F`(oa?B5|BHvfm3K*Ja|P zZ7-FE9txv70{114>sy5mRf7Cv^Gxwm*GTVW!*=&{#sl(t<#)vnT2&z?heDnfehz}t z%2>Z)t+r*RANFL=3E$hmqafCmCKuLYWO~Ro$RPD9MQ@0cJ{!5*^~pINW#YB5%;CJy z0QyjNPgDhFP;4KH+t5?;7*d?roBKNSUcKC|A@-w9^_@|sn=8TpBcQNke&~4}A=5g`~bW1`^MA})Qd4k`|6@Es9sn0(2viz@ z=9??e*Jc45frHiCTkXmbfoH&<){(;I_Gf+?XrZmnEQw@b^6*>ZhxX3zE#MpsEdXXQ z_V6c@Q$1H)ZwU?DMoh$q_Ac~Xx9&7fHaRWhT^~W~(F=T&B^DDP_EO3~D8cg&BaL}M z9}Yh3Ot4f1jL~sP58|;FTNOX}IJO6=ugTOnu5EE>H7A|E!tng#viC0xEwOXb8CbB? z*~SVH@J*5LR*Ew<6o*bp6c;{C`r!*10m$7@yLeTtK#JCeB=?5)B z{dTJGy+<2RfPWCFfODM@11|nyqC~&6nF_YBv(e578{QAn!#3Em7d<9^D%%C05xNCM zkuJmb8t+(Sg#NtbsEM-@v0hm zKLNjGj8Z{alX-D~azkujF^L;9fj^P`(3e$rr*fuhhdo6;qj{$!x?K)OQ3sQ@xu1zP zsP<#x@pCl?+oh00@ki(+On|5&g%Cebc6t`&ePFyX#(#jV&a}k*44tqYg01JuxU(=( z|Gesyc1W;{&_JMqe}PUA_tAD>EHFQEQvjnL=V$Yk++yol<7(d6f^N9^+9T>%?I#)E zexHzsV2FD+#5wV}R`5-y*e=yw={%w77wT}1XuQ=pEOLul(tcxxyG4pQ zvQwsMz}}1!-fVbRJ>PkseI@>u??`h?!&~W7%NxKTTs`tZWHI_ZkHehd`DLhrJZ9Zs z+L%{jKTxqS0-e~Mn!h2qLFh5`CZuwq=-pgC|?c%`-sxG5Rhy)9azu zroEyExOEBhF}qzo04u3WS&JwT4GDk(V0wn0)LN7>|wTbDv(tjO_#f4-+0~$8BLe%hY&Zy2d!|+ zTlZG*F2YQ@0y)PC1S8VdW`h9Jgu`U}0lTRR{1Q*Qvb$!AuMSm0SO9t`UHCJuHZ^>T zu8UaIL0dQcuy_xbjquu5nkIs}urE`#n-<7X7;DmHwjDapyTd$GM~J-T$FO_I9{ubz zK~mj4&8Y%do0o$d8{f%6M(u-k^>B+3Ai}T4mWKAbE5XOfTk%hAkQ#K=KZ}9hhaW^< z)NQb32r_#uiJKK(;~wMz1d*ib^n{o+?VcuiP!KZ&N;Y_y(pE(cVF zFI$Ap1$Zp+sP(?&dMGCSN_TRGpO6@ti@?Q7Q+iV^x<$=tx(dj0ED>_qUMq|3*r{6= zo)6q-)Qj*+2B;?;hhCvSXBy2uoOJ~g(%UR0VOBT>`h}u|U6lBm=LXO*N$fp<2kPz} z0TmKZOnw5mELpdL`a(ebCOLIBVy48$RJx*l7$^Q_YAff*dL_xWQY*5^-8PmQ- zA8)u|RJj)Vm-!|kIypnIHx$2R?Ub^-81^Plwx2-fXF#GO+L3_s`oVIkUK#F!84J25iyk!)a?X5DCRWe#W+6VnQoSz61f)ADH}N=li=7M+lM`?a2pjsH+f?_Zbse%- z+&IvFNrUv6X9)HMWf^K=)MMJyeGoSyRuqF|ETz3>rN&;2p4AwWS3`9dVgOjD9VA|$ z+m7u>{7t^6z%{VVb*NV)4!wzcn~s2-#;c0$#hr*{8j`CV-VzyXOEh%TmS`8)=Y~L* zE4AaR5ymH=SRcT!z%tec0~IlBUF7M#;hj!A{#o|f+-AyF^9}g~Z#uF7R2MJ=k9f?6 z;rbrVBbN8gH~*C@mj^q5w}Tr3UD2g!Z+dRaUX3Q2qiwY$blxK73IGQ%3|t!g0u)pI zC`$Xr9}R8O9Fq*k+vc_T%|^sEqAPl>=o#vUcd+!d%^;)IZfk&Q~51q%|NQ7`l znZLGz-LqIfn41A7_1D{{w(3>R;66w{&qON~V&{sIW+rer!*QD-8_*5xE3`dF zKmnclKSN2UNY-fh<=}W6=ETl(ZDjXo&b_P>j>HkGRl>!B&)hOZX~Y0tiuq2^qxSpn z8|IoG1TEn&+W#7RH0>d0IGAC+V1Nf#pm~4%?%hry6&)XF~-E4n0xqS_(Rk# zS{4hBdS>oyD-v0hZu385jr^e$>G&U|nz7$JxUodXrp9FVO85mW3_hh#%GuDRyTDJc z18p~4wO5iavjy&x4d%{iHhAZNPj%kL^;iV9Bn3~JG10MnnP<{M0 z>`Re9+5%0hhl#q6UhKWBxTARIa=5d`S=xsqbcyg8FI}n_A#qvBON?f8H-o@Fb95xD;*k4W<71x^dDi{^owlb|9t)Ab76M*%199WEUT zM*SocILf%`aUguB%NKMc>5I1FUUf)>8%;*Q5NMhEf07UXhSXF@8cd(82kkBX?#Ne+ zxpA*pUy(DzZuGA7?TMAnSMqIWcix4xf6)0lLVM5F&9W~}N_drRPFsB)RQr>%NDvEI zEW4zc0-wZ~NW30d5t+Gu+AQ7_!D)gIxwMzx{< z`T%>|P%L`v-xU8aelWTlU@q=&DktYE?TSYdosiaG8%e$K6=96-flOtd7#4{B;mPbpN!k&q40Ioy)Whr7$!APbPRwEc0-3f0KuWl~@ zpXQGxnVggD0)KYkJ?I_z4(XX|xt!@-!+MwZli$rVRoZBFfw+O8GGooK=B2h~K&!na z>OG(6?e0G4oE8)WeWp6&ReYCj!U8cF=Gf!?!JnEh!1YzG)%^91^a)*+;ckI{vYggp z^EbqHWTijNddM>lTSKcv9}o9|xOiLp+~~i8_Y1HH0pP^b8{k9`B=FL*(J?DZ9lZ-t zw-=W8Y!>^zL0VPq)w$x!kpuW;*gW_r$Ze#Ge2%3jb3g+;cfw~d&gho-Bin_}%bjQJ zJk-L7ySDeM*t%Wb^^qNpDDTU^DpCb5$9y24AO$g6%GJL{SZA8!AZkI2j!PMQ`o-~4RJf;LVSbZQF2N88y+*-AftCoQEMJQj%AjG@qC1mLv06r3ST)&Nv7Y2fS9 zI~~PlP6!fl+ht;B!?w-}-#gMndM@&=cVOth*q?cI%&=b_YzHUn7s__1^L!NI zKqNtE_&iSf6?WGDK(ZPa4Vfj2&y*zTd6H4Ss5=pD_VWR6%lFD%(SkAdV7-P7lOb*L)V+G zTR%lE!FFJ~QePmNwUec3_r^)B!Qu*rl3S5t4R>nc%CM{`Cb)6u1zT3Rx040z8Fb#E#F|k$D@T(SEZ>Kk0M= zGhLfrPjcd7N?F%D?#>>iJNIJ09SmenAr(4(>79D+z0(< zlHLq}3p@shqK9)WAQ3g35CR{S8U8&`FT~uZ_78m&|0nmLjtSPHzsp=LYF#@xgxdn% z=zQ&10KQM}#o7(-t-RU7&_W3M$VK)} zxET9i;799@rXk)E&J{YvM^)(M46E3W54^FaDEp{a28Glh`y2R>N@gaZhGt2SC zfu|17{hWK1^3--$OAY>EOi3Kg1OX>I%3L==PqAsx&$^_#xouL+h}1o3v7*#uC17J; zVY^!o$_H2?$cM3@xLQoq9iV&YJ59gB=;P>F=WGf4=28aZ$%Y?QA8KUA{>Ub{#k@^y z)t;eol^51G%vxy`8zdMsVFS!xaQvwm&7#^WqZ5lwom-Y;~ zPI5){6Td6JpzAL3IJ?St&htI;2RsZmJ|xylwCiEd`7@{^EL+;Ly=~MCZ#53Egt-jy~ z&@D6{E|q_-nrCdMg4q`#eH^0z@d>AM4`ACRb}<_?IQCLvKIa8+w1#2mgLepafv-2w zn%0`jfKRYuay4j4`{u?;pkm&8ThXVWG&$~Nq8UBRCDPth%r^DJsA9S!uIopd+VSYT z_t{KfYI|=}6K!zfJWANPSsU~{r4y3h(F8_)eU%alKZ4m1irQh#ddqvjFpi6P#{?J7 zgT?e5nJIJMPzW3z%syT`ZzXoRQ)n;(I5AxlHesf#hBVL6kA)q8tu${IEfN2QJd8OE z`Ys$>BU5dLqsgU_Lwb;7Ai4)@5VwG}7gnXA>n<>j#p}6H-B)pY=oRx2BN)c1{>po~ zz91XWb6geTy)v8U05TD?2Rzj^#oQUWA&ASl51%HqXj?eIqUC8<0ZwgAFu?lG9s=jM zv07*wP|gS02#4HHn^mIwUJ$+jx=A|YpF@KtF5=X}pBlPqhQcQDYglEWNmi-D<-H$m z9n{CqbUijMi9WNjU1)!#*|pU$(EaUVrFx6 z5UILd{U|skN}f${JZ{U7g8hGSJs9U0uTaI#C(aVaifA<|CTRhJvsJ{?5%(ZZp;4=jB`}xJsSsgag2dX?atloRG`vH?W&2=Xn?y z68sIQ(@ktY>(~sZTQ}5xY)EsA#r4GLEUTm=0k`8Wviby$>fd-)($h2M@w1V0y)V5n zpjr5A);rQ@M^5vTMv!3>m=#E9+Vkt7Za=<1_w>j8BE;klvwA)zi;;o2Xe-rJnQsBlk-kvw!Ao5GqABkH5ScQa3syw*(s$R8BAlr$Mqg%w2>1LM&dK0YOuyhn z!o#?+l(oRAks<7kOep%TL@b{h_zY79`T7)bnM`IpW3O@y^?V6^g>+yHR3B{}5)|wj zc|u;6ydmbSJth~xi_sSEay_H6HOj13#Y2YkTLf#4zQ6q^fmg1G~5Smw65=) z2EJjlc^@1{uYmT~WQg-jJ%R6GmA=6SxOSm&y=yVNfO{}T>cLA_B75h*NZAKWveg2b z8E1Gmagzge(bV=ZNM}1`{H=|b%#}EunWzXjF8TuJd5~Oo#xXp|>~w8rr*vIka5ts| zHJOyg5#m=sZXpZc+w}I9?sgI(({-S7(cf3mjr@_G+ICF+Ny{2q4^9?L=!yie_+r7p z9Cy|w?p(y}@E*98d6C)OTi8f26rJ%OcR{>r!&mu6>#qpIy-d7Iw9}o;Tb(%p$26+_<9L$f9Qr`? z57c{fEIJ$|Q1yjG39>ezEh%sS@ITY=<{!=Hb*Lc3v$s8|p~SnLpB2LdE(w-mZ&3#@ zv~h0}(9B|#9rcSjJrypv7YRz{NBajp-*wf=hSp}GMG=0fE3GB8-*?xBAB9RGx#&h% zFQ}i@wJWykGS&^>Z09)Yk?bKc%e+&JbKLs_Qymx7Go}9&23@@Vrj};@!;CTA*mhUHwteP$;v#a7 zNLyqk`91RqzANCfYoTko6Rz7KPqzAlv#bwfAQuKB2{(2WR!ACWdpgNBP_X4Il!TcjA=aN>W5-Rr|ZpviZYs8G*})eD)1;Z}@+dU3@v1-~Qh4l6q3GlYqDV(kuf! zWR_xn8Ad4}-h*g3el2n;41}J5?CUwF-Q<1W^u&mv$Z*`$I=FS5v>(>@ewae|6L zH6CpEwvMLlw7(FwDD(h1UA_>Ob(Cp6 zgnHV4U>i`2+7v9;J@;Lt2YG|ZX5hR?2WBX-&c9Xt(Z4>H#~uO7k4Qli0-yYMNSVBc z&I7;a$V`;+tYh$>cp2@wqg3=Iz)9!^{Z%)`Kek6@_DL{4#31X)W{?*!4D!&~Tb1e9 zi)$qL!ZWlQNnb;mx7LB}{PR0h@kq%9f5Y?vUGNPA&0*UT_M<*nFF^k$CdZ(V2Z@u| zT3EF!Oze|>(lhqe`X3f=SNzaOr}3TUu^#8iMf(|7NQXch04VGTmVhgyFlhSB?}Mm4 zW>TYkDsL$A3ipTB9|mr}{j1KH!)ZeAZYitb>0A8!;4>IWRJ&O!_=)=h0svs#%Ux8MryU5(p2VjG%eZ%7p72>f8Yz&zE$cPpN-IRa zig}2u28`9d>o_NzE$QdJ3XAjIR&F+z6J`jeFh2T^n2O=!_-m;fZNp6>IFD5xyGauO^xR5F&>~c=>PA1)tyTa%T>~18hs8$j580j-=0pKKpL_a~k0^=a! zVOwnhLk4zsQYErl;fqM}ooNyeTz*iSuIf;6fl|@|cUgTx$9bp#PYZmvJ1jnhNV3F! zF9K25Rn{n`kylejJ9`?3M?}P*6e#4o@vC%+@{7}p84@F-7y9G%x1bXe7E=bRNp&T{ z-CDEf3H&JbGNc@2qb`hpiDpN)*?^Sg+{=troB-zt_5-3Sd3v98-gRYjYjJo6dp&Jx z&^%7?uIk9WV(zSQ;dUxXI;x@(r`_eNF_!IY`ch#loFLO*BD#q3p_s7#bk z!fvGO2XuHP?pW<2r2xEgx{f^oPH~y{o<#hZkYnEkyIm3j=STYV$VV!NL`!tlYYxJ zD@qP^MGhcUfh?uGxuSKrh93qZS-uz2v6A;b0p%|7vpG}P?70=YhvI5;nEtp#tjTV09wRBg;qux99issPFClP=ibxLZB?6Q zV0P2@!K)2=xygJGFc^0ov&wb3{?FG2=^f%)64bs(6BGW*@WtV2sUe+lpZz0lU0h#? zKoPQ^VuBO?BNjy#x;|=0nb@RYvIV01m)bx?PApho1YphdpAX?#p9K?0N&cz&9=fsa zeuxdkH26z*v+pQoB()rJQ|7NM6wU&{<3@6-d{g9l=rY#9t4V1AKq{Nt)Y@r9z2&FS(NxA7140fG_hB3+!1ph^cnAwUzX_ z0MnI5T^3Dt??X>>cR?046;=09KDC{-ef1@SmUt>nJpn)HDezO$e9e6_JkQ*f-{~OuF4!Si9n?%bBK2?ar?hJq8 zQ12J@Oiz2bdt@&*jlADQZaOTzh~Fe=#B-cGWcS3YtZEdFxXT=0)7{u7(VXgm@`FQA znNfSxC#W6J&vdtAfo(P8W6Uf_h3bZQy+6QwNCN2ZSM{&&<37T1C2pqkKsQ3OD0vyE zq!mbkTkbG9cloA+e}M3&_tH_}T+Yt$r1Cu<&!}QUCB8eJ!p|Cc4{c_i*4Y9;JYgdhHeQIbpigImVc4^-YV?$c*j2m3zz`i29fT2^2GKT*i8 zPT!w%8^(0zzzU=4oH5By2wmLO%1?@$_BQx;IBiw&}1||uu9{VW||5>1*jgt z`7V0kG2NFolhMt?^B8c;sJEk8&Jid;y{vYZQO0UyJh5Qf4(nEcW67zc`=H;pR&xr# zNH_9S?D4dD^t0S)+?TjsUV?6vaT#C}F&27FwYl@Q_ddIOe0t=K(9}LFIE_FeKV%7G z4cH?PZ2Z6yP_oW-SbrR_0*?1RFd20UjnUA}tMRRrasGZ0UiE(lsjNcXRVO2S8-)|R z%>9p>>wg)b@(R28Qj0+^6>>cXD1r5eEC_B3`s^sJ)!g7-q1s-1t(k7k1P}lUKP|#w zfVyEz2yq(%|Ji5b?`DTn_oFkz5J*1&HgFcTnYzN;^WU(lOzmI$bj69*66pnhKhi?% zoPgT%0rG}=gq?=J>056~^u8rM<1b(;Lre6_H4f{ZNLL`*JmD|s!$IYA%51bxYtvQ1 zd*Vg{0#GWo0yV*Z9d|6NKK^RZNK z+#X=iL-&_sAIE!m)6iQ&5LhMqV8T+kQNGj|gj>QJgxTeHswar!91+AB+!K3QeQn!^ zh?hbpS^+}0I5dm4vS42KeCim(3j0~|9$a_**fzgnwf?*2w5i>7Uo)gxAVoxO;jV&~ zm^T_<;Rh79=C2^G4E90H;&(3`UpzNqEX-+lcyrK?k@fC6O{qMj#rddkI0UVG*u3Ak zANwaPXuGB@;4CQYmN$~`qP&N(fO6tRK7ldab53eeU5)IcuEiCZ(T(3~eTp_W!Auv; z6E3s-gT6xZpxlT6If#9ZM`T?gOoBZR{Q>@A{Y^11 zD@7jccH-64C8&8?jJ<*JC&@(W0Ne#QVb5^W@G~G3heNyB(F){w^c|GCyp~GYHOq{M zC|s_#w5|*-D2@~|z|Yi=ogCr;K0{!oPeF}=jmO_)4Wxp@D^*<4yv|a+z#`HXO6Dr& zflZtca**ta@MT~Pe@)g6`s6@07@ue=n34vL$tEoIY>$4?tGJs8RkA`Pe1SxWGtT)1AGZyC2U=Yb#p&H2@6rBY83%N?*0OJ?l{67>so_6a*Qnymu6 zm48sPY=wvsv~_?wN!YlVlah|41c7w4h;u(~65)&^S9QY}4^ZRsp+AjL&!GNXXg6Y3 zFjqY5$I>4F}nwE#ISXwr_esYpCF_cWPI%+z}Ey;iYls3 z%dD_4Edx-cC^AeZ*JtM^cLh(B|7Qd6Gm5@sE@aYR(>)_y+Y#+C{aNQj0L>8XbZ3!s zoQzVxO?C;?fgI*0={~y0Q?I4u#Eu76TOWCbqCdnR$m17GVtufTQp&spGzFB~Huf`B z_!2z=b6(M<kcy>5K{JzFutTOw!O{2ePX@Xy0^xfLo;NQ;#;Hz+Cth z9F@EXmY?CgND# zjZ(7kOxsi4D*q)vO-pKow4?+q{1$Fh!zTIbI*z|gzl6LSfFR|`fUI4lPhPsSDBO(X zV}?MXzR|iqVv=Gs=qP7&a8>2A>h=DkplNHx8i27&cY0o%)0y z&jYI@)RDd+@44uT4Amy@QP4%lvD%bZlJW)4JgN(K$Uaa`_Lap#shf-)x-p2`w1HST zHl4YGFx@{TuoasMKd-u4KSA;Yf{CxEB$+xy?@h;|J=6liOy64DHozEK7s1!~Z4?po zIna&|@a#0RA89)09ggN<%56KE5Zb@YyYZ>eVtc8(&A%u33q@j(kl(du<=vo9QmQjw z5dY}0$~gad@E%*wmV|#b(%*sdP?lk}`g1gm-sVJlK1Dd*c^a4Z3cs;Xm(l|MVY!Di z=Hk+By2?5kR%Qt7+3GVy9$FzHQ>Q(^#;t&?a`A65Y8Hwp>Y!+rm`?|N;ATAfZDpU@~ zCtdHEmp;h)0 zI6P4Q&PytSVLS;P=F; zLPVc1P`sI? z(3?FNd$b{S)nqkZA*5y!Qyb8ajit6D_;FNs;EXc5JEMK!&c~f%O$Ej`^{SN1=Sq!$!3;9&#CZB2c5smhTO#1xFHh12#zq$}Qn-w0_86 zsuA)K^aalr$7Sw9pNme=_k`Z_uCex;GMbjj{NW!sF5p1NvR_AQ3oMu6ZT@p@KU*i+ z_rq5rn83M_4#<2`Vaojc*4X7jT`9gUTO2PF(>Zr!;!JQrOAx+PwjhtEoJ-n|;@SSXKhji*<4G0z*|p;(2Qlop-DsYPB|og4>}m`) zdB{<|_ypr9l!nuvY;mtqnnQgu4(7~<_cp))I})qA<)p+xbBq%#Wr()8hkP`?+`GZX z4FHhO&>H`&&Lg!H^Y1vBpvc9Pybp#rA?8MaOS?yv>W5OZ`2X1d1HRF>nR>&PvEb;B zvZ1wMgD3 z6;0vMiR06AFgwgb-4*9%I4CBCKM!DRhNw~TFS`bj%j#U8GGwb`-Xv*)Orf&*v26f$ zF3M(DC!DNW19=zA6G-rr?RMpYa6#h1`2SOMmeEaYZ5WMB+}+xy?gBMvao6JR4i|U3 zIK|yA?(XhRTcA{^d)m0WPcoA)-`}kK$jZvfdFMUPvp3l}t?`}nLtJxy_aqX)HXpEk z@b5xmv8e#peOIZrMRPw#>;_U)&zi%`mx*&|&)uuEr~oKJrt_km$Q$Ni-aQOS)Ei-U z1Y1kccfu}`*m*0>JF9seJmUA{ee_9{8$W+gK1PV#qm)AVb@L0LUMz{tAum-dm!1gD zmGq2@rPaFM1fc}xfXkhf?p43oEz7tAqHlYiH%?YodAq=~v6pB{@7=o14b0$S(ORYh zJnz8K=4TF1vbpja@0yxuE2H1X@R^yeYx2A92ay}XwiwDQJ4>&5o?xFa&M;E!Q!8F| zY!R;J&8S=Ws}>f=cL_U>Kw6)u&L~XaLcsw+vA;sQ9VAB3SbBtc0=5 zbheh?J`pj2zA1QGyHGaOd=WUq*hqPZ8WCv39OC{BPi7pq_HXX6bdOq+UC8Zhb81SE z4bdeMl4onnVSOwmjWGwG2B3^Bh=lHjCcd#1W4#j1&6+53Dj~%0& z(a_m22a_E#!Mjr=uQIHc)uS%t*`N=(XC(Xk|wA4||55YuqH=m=!rBDZFBgeG& zF8$q>jOoo*BSxv$8v4;^L?J21t?Lcv(7R)vr^396!BS6RK!+uBVuhb^OeM9VuH~cm zBkG|ct8{Ud9_m4x?O4v<;%9gglj3LXqNp`%RipioDVDm z)LDOAlj;c&2yA4CDt_DCMJIEDr1QKLB(le8J&BtT^_5=M3Y4uj*WvDXEK*~~Vw)_e zz|~<6_`aG%y77);#@@8EF&iP3n;CI0|9#qQ%1lpuAfDMFoJ(l)4sh03PZ;MJ^%kRf zp{7z1XW;?^={TRdK3v6y7tdQp+4@L2%;~3!wVxQ3dn*63b=HU3w z%ox+irWqY5*YV(A|8FoAj`NH&X}#IJG292n+w%Qrv*0lGrSq7M?mfmNaF%?6CH0Mwo`Hy1V{=to!xYq<$W~T+=ne{xj^>|8?wKi1yuyk@79b|j%EXr` zQq9h~VQMGhC$`zPwuV>-cs~XXNq<+F)f~ij!dP}obb6QvEk{O0T zv_A`CxPEdR;ze)>a#kSC{}hu-IgEW_bG6?vx+zClYR?VxPU7mQCc!fJsU^cVCe+@T zjHz@j@fINNA+MleycuJ2E-+^Mb~9f`KA;R#fh_|OS)w9Bwf_*_#{I;dP526;T+iJa zD^9sorSsea!?hcGSs^d1@867bQbIB3;r0?HhrP-&NBNWznfof+ z#a#|b;oU5`a2uhoYk~QdZG}6@7w7K;ee>K?-mMuYeFJGR0}OrSDToJrG{x#-+8<+k zg#Ra!qkF<7%wu8$(T;l_=@(A7_Gupr6-KNIpMk<^qs{-&K8pzONX2gh2lKRv10u91pV7Lo<2Ged^m`0N#+AW-EGLB|(^5Jf_}ZAY+;yB4qO-zh#QDe> z#4Bty{a~O-9n@4n?@@#G7wYeH%mtMp(@p=@7cCaYT|~KqVX{IiNG!_8Fm1OveZnGp zqNIo<_LHbw{t<6)ODF2Bhy%1CflN<<=dtaYG0&tlk915$Tqiw%sEX?bnDcMkePXtI z6+T>2CisFG;#y;Q0J3;1Qt`a_)`dTxIEP00`SY#Ty0E4T?gQKde50e`%lqf&R6Qah z(h8Wh>S--F4@kO$B-_{8dH%n+9+8x;_~aUd*t!axjLTID$`7~i(m!n1nN5P5VHfmW z{^*rV0zjoh|5^6pj<%9!#JRj+M=ncfQh3#+p=arzT3$B#V z;fm1>(d3wi2eVm3K19q#{K2qT7V!olm4Ol)dz1~Dnqnk;@LmOf0)JRS&VQ~izps}K z#eNTuaI{xinpWA`gB=v7IFq=i;a;UY_&4G=Sz_ANZ+xM-iTn>} zFn3X-^WUVBi@Toi|zaBnhI^sRfK_y2nEYoJRX%MOKbPup)6*M!c0J%r0*2GrhLYJ!C!|S8!T>ogfx1atx91K_RQbN z{iZKdC29-g?=9~rooOHB(C-|JlKKGK$K$uXGfZqpt8(Dg;HcUsWkGL0egHUP?&BDW z$8+Q9RPd2r~`7RHU`HYO39j-^@KhI}=#rSOpJanR(j-t<|6ZRC=lfiz$P_{@y~{T1As(D#L~E zTyg8MqvbNcvv>>kwEwVwKJbweB;^IMHlByeS{T0|QciAzZKyMx2hpf7JEmH{#$3$3 zoOv#x2y;Mt+?vf^70=|v!8^gOV1+~L9gioYhH0YI?+Dn4Yq&4E2vc^@jQ0`HD5FDZ zv?Bi`bSYoOz+V~&5 zNfgMaOqGPjt<2_JAT?$({f}cosL7Keg4u@%kzSvQs-6=NlBFSj!c%n;>SNrR_*235 zHnL_5VL=Q&VH8v5DYk#WWyX$4xQXATJEOc~-5EHEl>5XDJ&@aJ1m0nCiI;@H$3D);#UWa3t@*H)ThF`+QZBX|G(jg~ z^^99WyRX$4o{3g=+n>+_^RFl1KI(l$9+~nh?xOkV-z3)o@kDMv``@}9bxlTmaGxW$ zbz;pe#eIy7^O|tb)6M&dx-sQNm;9K+$b1VI;z#G^MnDAnRYt0ZM?2b}j3u^~$5dx=PdcvyJd>Ok7x>WU1hxLrO-f3BCCiD$v>3$aE%JP zES`Ybr=KeQqFCc!z;%Z^4;*N9J%|aw6`CC_rpXR>hWD!q<4~}kRmiW^hF{pLoP2wQ3a*2w<8o(7b_TloDj1oGz0;pWRAY{YNYop( z3j>FU2ci4TgUWyE?%~X7_t_;X*%aH66N8WBt7`89ITKU{tsV?8DYJoSz#YZ zddL{;f!hA4*WhnQ4&y#CRMv2GVT3QtQg%Z4SpgMaPF>phWByjULrZro#}}g5_6~iH z?yXj4t@N+3{i)IXYS(D7!vbtWKl3DS57bO{c3N?|nKalw8&Atvom(K->-esmc*#a@i>({oAYMfwt_(QlP3$vPDF6)_9( z0CNQDiI~ASM6OrVmuze}Y@2TW+%mRdk)aVgnV|%Fc)JC*kOvEY2^_#h>uXCU`iN*j z}WDu3-Rql(Fwb zs1v-y!7I`)trvCu^@+Lx_C>ZzX=FpWsRuzqIq$30u)XVI>bjT4mjTs5B5QHlqwb!p zMSO|xp6w8_h_oFwz}idMS&6pXMZ6`B^N(pe(_9~zLHcH7hG>-MQ#a-zQF>SIjzNr3xcn)^|8e8@$_|= z1bl`FFUkly-DTX|j3vT#HnCLJF+@Mtaocmin$xkPCC~PT^DMPdV)6`C+(Wg*wMdFX ze%&%uI%z8XA^9ETHuvFndlyPJDzW_y$LJx%)V=L>MtMhi>k{pi00#TU>uG!6toP@K zb&KZms>wKV1~W5eO!jTbVy*n!m%35t-`tPbO=^4N3H?*p>K&_&mzK4y4H@UWgeF#Z zN;>UQ(#ib2vHKC@j1mWxOo$o~aS7ESzafh!#KoMWTs8KWc@)|DlfJ>sNvs8CXNw5g znp74OB-CP_Gh-sLVeild`VuAAHHZL`clj5nPbr?*r(+6m?``)h2_H);zhb^8M1=oD zdVFLWC6N`cfZ>jBu53Dnnui{O`X0=+VN9DtnCnTVon?x@F^)5|p0pA>L4M7@H5$m; zCTcbLWNQFRT2Ai9*d>hg;2lRRs9+^TZ==Oo9jZg7*RIK?6Ai0s7F(~A$D_{}|1}Ol zuZkEMzlursM%&myCZ~6DZP$LO0B*jn+%OoGO4{NW_G|g)XEp<07C0i<^1fPOET8ZToTBdpCk{{C+qCwkg zRld#%>zKz`M^M+?I?~2&PX~WyBaH)yb5qL+(gsm0#&a5zMdUH}(iXVCH!QAET9vJ?q6-Yos$ zDiQOEb&9RZ7;N9j9ceStE5rYwVcSCYCVU+$mo(e?TV3z0qGs}MqH3DzeqEOR1f{yJ zRm+v>Bx~fX$a{=Y*iU#TBVITq@@mu_W|p_qw@MP7Gm@iM${GrFkAv%Rr9OoGeWj#g zeruLtyj5j;?LCZr#p6Uh5|@!)1(y*?aRqTL{)+ZqXnGEuv4D_bptYtnB16>FxzIW1 z#J1*&SXmSOcD#WQr!G_fK|bXuS^pyV{!)HYrhUb`~y|K7y7?-a^gAdGZvKf_QqXSL zZo0=POi5#;wue{j)ornTkM*QS`|8? zRL!+DA4~_>-D4^+=$0Jmcqop$OJD_dIRdUi0w&xMTNj3-tU(^b>Uh_~F{EEMjpZIf zP0t0cwhJ2uKp|%fZyq?>5#pVL+YmKO2LCQ7?U-tv!g-T+H$+1mCBJ5PjlLdiQB0{U zs1cYr!Iv(nx}RaWC(PrvKlKj|rdYoiuMwALT*x^pY;bL}pNp7~pTgy;4k`Q|B-rkb zgck%BsWNMqYo8Me$g={;cC~v7p(lqE44k=#pMtqiF^1v zrua(!uQl&_T6mf0+1MmzAmM zgnvz6Wjz$*-Aia@a)#{0x9sK^#3gW6OZ?xr3N1D@Y=`g%RY*B6*q9JZc1N5h1Ux6; zC1KTB+v13bO|na^U2N}Bb>7(4y+4IDHy!c76SrS>R7XX1qEQ*G^a$c&XeXMHV8{y> z25bb^EjBB5ukax>Mvez;K18ckU zk4c6;%1Oenv*E4xppSr+_>?23v>0n;0RDK!x#+d-n=R>@>l9(!LiR)ZEqyZlom(II zo12D6woEdi16K%Tn4$I&^0|gb^zq4Yf+F*Tmet1HWF2R|PtoDFX0zr-?+UMF^#-O| zo|pzwk48lhfDW*pXlVL3^9pa|kAx*|?jBjLq zmsi#H*CZhxkt2Wx_a*zyU}tV&*g0H-+EzbDg(7OBiQFYFyrDnR8s9y&2K-UlTyfQb zAl)Ke#Juy>m>=1w*nKP;s!>xb8|m#K-kz|J1n6$tSwdOdP}Y5Sv*9SFPr}XYy)nt? za=qK=LBHoe7ak&Doc~&mpt3|S1uXrkFYD?DqMwrbdQOFGVC#_6=wB#*yoFLr{eH)M z;l)IZH~=MBYS7Oj_eU>6O={|>B-_skN(4QjMzutNHyeDz0s|d;l#3KHFOJnNtjFaU zO0)oLP~OZaj{TQuE}fEbB{L{^>^Y<(c=xh<$E(DXQQaIjoOckXNO4%Nd0X| z_K|f`!P6`x%fxiL#ram@GxP?+!v93OX=h!z`X+Y+UBz4MbJT38F*|#3-m@=Q&E+r4 zvvq4QPMpvolRi*h1hX-3gAVTtC&`;dRK)#G>;p$O`5ax7GgFPI0m^)t)U%Ki9+e>2 zjVd(#tMBX65@qC@-gBA=#}G#UXd3sHMO{la-RIopRrr&Y$3kZC4{5I>!vnLl6HLlL z9wQ@)!CPQ>RXaP_kTo`?!`%4cNy#~AP^_PaGW4wZ)P5!y$27xc>D;Dk_H^c}D7iQe zy;F-ZoTgW&KV{BqD``JUitQAg+f6vqd&0zX-+||%4cLo_0+TtkhnyDHh1bcAYU4|{ z`!BL1vAs=e%^JKY?oCP;&V5&nc>*d~G&R~!yXv^8Ip<7bl|;_MjgWTz>$FHE&*R;$ zsvpF1iIW0no4$1PPz~~M8QPfjVN1cYQi{GiZCD&RVm&IuzK~X%zrPPfNa>jMXSz!g z^P2@Ik2g-Wyn}d1EAbmHOxIZDR}ZIP+S`xEehqG=UVsHjMC47l_U?RJ7H=2%(Cge%!osv{#QyXkvlyhf&RyHLEkE$ZTO2j zD=wvcx1KegBQEUpIrjo_V`ER%eO8~?d)#u+uJ3UBnI{wT!Vg#&e=FM2=>3$9h#9Uk z7OdrXpsP?6-R#_7D}%@8{OLqTT~b>u(S#!rnb81);CW)02Pp;K=yi03eqr4n)p1}h z31R=*JY3ogM+>guirdK*KRZB-hC2qsFwC&d3hm9=VgHDViBX1=vWKj*y(?pyP2Z$# z-aJmcU=8|)1}*z#v*R7q)4l_;p|UQ{C)gq6#XyXAg|XS^k2Ga|pjq27s@W`ec3%2V zK%x)Sx;#7HBw zzzHys>M1k@IYV$e>v!kgtjF#O+fiI@PRm`_=x`>3AogW$c89(57BCQxM! z1Qv6pf|Ixg=OEulp&-3GZB0j&d@R09SV$r`ZfYKxdIs;)lGy=5l=ro6h@m=YWSwFo z(HrdrUJGYMRJ6bRPkLQGN`!0CcWK|Mx$L=&xrVDo9B}T`oz%|`=1VHl8dz!Wi`e>f zLmnlv6cOV*44e@hVfRKIcOx8OmYW91)Wb$KrYLb5LWsuJ2j8sG*QJ4v5~f5ceG$%` z{9f6{-0)ZraeV*)9pDIrl=PN-+*!~%U%d^cLQ^_YzVpAVZ4H8_Ez4@fiq80PLL&1F zJkWIrF@Sp^`daLgsG&R_Iu2gI{hiQ>K2=lKVerhwEeNhP)VE37Qw%u!QpaldhyWh_ zocJ&MEZ;;53pk;J^rg`wBOU~|sb7JAqh>|VMI4o_Z;sI&1rhKda8Y0_bi-C}xQZo- zk7919zL~$#EIc}TveBd`VI~SdVx{gyn^k`eDge}eoN1?Ki@|8GLSGcU4rc~q)ccW% zX-85JK)nS6z2SC=axlh1KBx`134O}hVf>?KblhpVXp14-0P-xi6j;YN-mFv}XI|*< zbSHOuPEpRO$QjfhbhfY;b3S?k;Sc$dX++&k!zj{8aCX(XQnn@~_|;$5KA>!bR?WIA zzDqE8?|^Gb`z7K||8&+zL=bkv%YYHwVm=cxHS?M-+bePXQGVH}%4Fp~flBN8y6nad zM*~Jh`Ye*ha9Nn3grZGYk~E#6^E`01Q0>XN@kfDAhCb@P))64&I%^ng7-dN{T-PrO z>>;i8Kh#|fbclb4`7le}xv0%nv&*8^;D&-Uzv%Wrb~$pfqC& z`;zXW^L|)bat|Sv+(bM{N+o5I77)J!8v@l?6Fnl`TN8Kfh@E~R_Z+vHS&dP{oP=}307j*W=4)cG~_i<7EJl8_qy3nlJP5)Pq z)6O+rb?&mwF^=<`!2iX2{1pF61~T(h9?00O8DwlG#<8QY)8QM))4}h)m2e*6Bk2-+ zMa!07@OR?&B(P1(Tyuo4qSfSao+SGLq=R{dYVcnOG1&MhK59151K$h&W;tP5iXI^D z8xaN#ZXjuYGrn?eqMCy9Xb<_-jNYhu?h7u^_1-W>E-~f$7u!E7PuU%WnV41?vt)N= zqa%UQkCN!k_no1Qj}S-}i<9`1QSTaw+p+LerL-Y{M5M4|PoU zpf7QtL+T5sjUDC6Xc{G>-3Bq<~yLg9;2)!HKLCA8fYEG%CY8$MX zDP3J7R_*sEyLK3EAgBTc7Lt9m)WvGLpG!<5di_eAmfwfNL)@}#viUMiDygK0-% z08WOJp*#;h60D$yTk}=loKg5F+HT@_pqx05oB(=t_w5pxY%Fcavrmp#E6%dpn*w?z zp^mvNgw`$6TCouKDEk60KYSOvH_#I^k#?88pHO1sDn46x0BM2UZQB}JjW2@5FrXXQ zC{T@scSGlmW9&%mTndfpPa4&CM-H7)4i(^v#eHK0#AIuee=V;}I0yU5+sS*(Rbd`t zOfpwmdw2(86Y+1X44DXe7z0Nf^gr~5bALz7W;mePwypMenA#Xp+Fy9-PjSs@^4CZR zD^*;su_@xP+rp^yu%<6h#uW8}af$V@W$?MyGs+UoYtl+zC(B58E#f<4UFxvh6oJce z*0qX~6=*dNkLnX{_7ACjYyTNpL44LW$ho9bQ??2C*EgIK&P%|o3AUo{dH`*h z%}cz>8jXIg2ism~1zx!`qa#@Q;8$VjTt7~^iB9*DgBd(Z>>}DCR|NV*q$#41;Gt}g zoFuvJUr4BU70U6w|Ccfwjpj#AGLto*bbVdp@fz-A76Mp`m`HrYzZo9EIlx?-RNBwo z!zMn2nBi@QmXas%`;o`VCja=Z?9WZ2zUs*Oo2;^X-=U}RB1NfATg5inQO1A5r7+Jr z8ZKtx!sfD;_)fR}s9j^KBPsEZjXCWq(^v9%$s@)=b6$L{L6cEF=Dt zGMBQazN&JX=|J#iFa_Hh+E-2hxANCy)^nCAzUhC6Wu2!*UL;uHBe0x&E9qnBOC+`Q zx9S&dN|*y9FhomFHXLo8ZyyZ={4xz>#F4f{riT3{}MaCt_z* zBxj?swq$63Mg zwo{G^G?W|{!{R~LNp7bWaUR>79ZcE)Nr&JW=9OicYKrMBs+qZ)!Vg{p{&427m4rXI z!PqV?tELLKE(M|w2r;hNsf*Jx5r@=Gn(eBi^1*(X$A-IAe{5V1AEmH@UmaI%LY1|3 zlr;`zG7c{vBi%+svgY_gCU^g4`Z-=WZk~Cb%%-3_RR8DP3o9UvIwyE0?y`8M;mO~m zhC8ZpuCc%d3LaY!9K!k(yN5p2l3@Lhd|RXmu|QhFL245^F7k8V>iAySK*Mn=`q)7kg>zsm&u9ZFnzw<|MzQRV=`Wa9Rk-$ z6(Mu>AVNO;S{rD**f3vN;`b8=Lt5GW)|)OgV?6VM6Wu!0eo8z_TxT=3_jH}cr!hKl z-%{pUdeyE}%po7+{(&0weeD2gbnL#)ouXE|?X~}ChKR^9Wx>S`9_~E9yI>!E9(tsu zO19aw4ts@k!X2wNSkE%e$qN26Be|9CoX`I+DNE7^>vqt=^_Yt;+z!} zz~EA6IUQ(_avVS1yrS+^tITJ_3cxLE{ur zbH5VeY%-uE{7LAL{J`_Xu4)wNDLDr2o`OJ zc{^7b7i6LlgWXcYB-3!>(3ls*&UO1Lb_Qo;uI+Ip{COZY@EuzT78?g^cQ}4y z+Zm?_Ua!xq$0xH|a7o(7e*)Fzup;t#c#q&D&2;#C>g3!%TzX)(XNKoBOcCDU8-rt!UIyoz*0<9-u3K*)j|R?aE=XS+&k((QGs3ED^!yi_7axOY zHWav!@Ehnnp^jS|IMLvfX5$WoXELk3jjD|H6{hP12kW4lUHekw6xd_ulSV)-xDS+K ztQI3jrP^l5`dfCTVssIoh4}$4p&d;sh~Gwz z_O5c4y1sbxQU72hwyEta-Q7fy*cp|dzI|#J`D(#rwHt&_13?+dPg!6=vh+V#WKuXN2E(pkZSJlJJuG)Pth!w|~@>j-L9JpL!J+k~hZr@qL)C>rcGw+r=6!6($`^dJW9>S9>}U1kfz zR|pQWo7ky>DuIjo)?Z>cY0v~BsrRunj2q?Yu6)+ea2cjv`nUP8e=bc!tKwt|x6)j| zQo)VfIf=2piMqScK3qHa$Wm%trAL_R+>`*M9bc|#80tHNTI@P$dg1&4-N%j)bJJ5I zrUqzUI=^drPTXc3-I!`T1Q%d8!pHm%Ad0((k#9NR3O5uqRy1u5IYo~k)&xeve;A!p zo@ZT`6e5Q^2jed!eo7D#Uk0qmUdZ`@X+RBq33R3*w(_OsyW6fE-uhRO;T=tSLfQm3 zc}tN-`X>G~+N;2A+h%VoNhs>e4MWbeMCt3SkD=$tBD=9Z{`VQVhkzkJFeT}SVi`09 zsupFY*O2ePyNRD-jFR=pc=sgo9>FWhG=HAqlQPRR16fad7ffnD*z(CsVj9^`$UV>y z_zEn*8-*jo50k$Hx}iq1+r>u+NE2WNFtNx}vYF+)8l-~nKwx$gCwUi3m$lyqH_%&Y zT~TdbdB93LnBYs7b8k67`$B3VZL?)k+Z|24nP@y|+36yg7q{Exl$dA51&J&auJQbd;O znJ$|do&hD3!e%oE;(W+Mq(OqK>`8&k>I(H1KY>1!LUitK%WR5K-*xSB{E%0-#aO#x zB8bm`PRMPzL+s8%7I!o41rCIxgKHRvB2m<>y7S7d$kUu(lzIL^224j$$4qN6awlrO z=dHI3ak7vsDGXc3UW8wdo=P$CmQzx}O~_|q?C5iVKv$%w)Uj>9+(mA!X|keF^ECKG zlo?w^k(m6}D%#X=B1?$bi`ayjO?*h619;qHO|AAs_?7RNrh6+=a4S=m zUk|BESBI;33SRMXdUnt~^dzjXJEVRjzo z0jm{wtiNgw(1npbSx(Gp+;)~y(4SW68Esf+T?obEdti1uMf$@gx?c_K3ii?6s4-Wa zHli2_;kzh`z(T|;_VehY48DD>=`><9i4^i7UPdYWH>~L{4@QN+X;wCuXfTLy>TL8S z^Ct5)QeK=kG8ShxuXM(+9C3Nk6FI|i7Le}VjM~9j&Iur&Su4y8cQ-G>bgpf@dId6` zu*iSHHp_R7ED~Sfn=z~1L2nAq%k@Q%j@!z~1W%Zzc|HRqV2Jj^pN19?jU<&?CacR_ z_1=ZX2=jDQcVcniqW>T@J*+8o%cVt6WIjx&6mZG2>tbXZaKW?AaMD_YSb)d4 zmNkEsH{)k==Y~w2pFPQBr|^^{T|A5O8(ip|4yO^nke8w6ITqUX1(CFFlzZ-Rt;Du_ zZVQOlwX1&l_>7%`?yN)jB*0Dhm&RvT^ER*(ft}teV87&1L~C$}I!brQn}GU>?B@Qe z9xVMX3mVZbrYA(~Mf@g&Q0JTwjURm&(U1B$td73OeA?X3d=zt&eZ;@i_()Z$R2ske z4nYF@1^FA{_T}PlYsTO%jhWqt$nsW z*EkZwe_>-wZAqHjh({6vQFcFlglN4k}ikG;V*a+!D#XV;Sj+hd>7Yo$1!9nArH;+ z9yY&G)hNc=?*L=aqbygA2hg#cS@dG$W_UGux2T5y9$4gcfi!e2el}@6&H%QXT*k8@ z>QJt4qk4L+s(?bHm)yx_?|InaplIo_z} z>#ITr7BM5*d)iRov;dW~8zd`C_6~r>qy)})PB&^X;6sAg*R&Os?!n>CRo)bUjMw-U z>c(216J{|_qgQ)|`?UU2@L%LPay0IZ^Nv{x?PYcqj;HK&E-_yB#Uht^GxXh*>y1jV zFZ{!qWG(gFhVJ>;J{~L%)H#2G+4MD%TjB!ja#uIhK5ibnt!_}}|2$oGLz z`_nKv@C6H^PJ^?(H{g@_2vR$GYVamDS5Tdh8g-16k7&j1qv8oH)Fi}d|2o%5kcJ0| zIsO5f?(IIq!5|N&>iWn8_M51E*r%A=sCYCEOCe=ZTXA_%5x5O`7XKE1A6eqgGvBgo z2xQ?+;H}n`^%IOsU=@V*{qjd5t|L05Ug9cAZlW7E16M>$q9zjBLZ+wjgbw;A!bhma zEpx99h!OK4o;%u_=H3mwqhu4c2*^9Yn~ES)Dp=#m%i$_?smL2L^=-F>c~&4)P>%DQ zp^wI4$n>uxY`_`ZcKr*}MgLRc3F=AgN63XpWXdFyg;aE@`yG^m`tEaCSVoz4gYuqY zoi4(0+kXO92RVc)E|U?GCRspK8fyfH&MIWT;5=Z1oP|6mb$(#Axv%Mw{cgyqc+ox7 zvdbuUf5Z2{O>uUz?m&zqpTmtu?m+(~o@e&s?c^SzXAuSh!*O$HMeH_wp>>i<}n z_DwRG)#uGm;7nj=;GHE||J{gm1_G7n$ygVVi#tpC#ooidf!%1o;7BAWsNrh`R{jhjEX8<7gXJEc_2Zzt5=R)(H2kd38&^Jr`9kgg* z`Ez#_YNaPkTd3#y%5it76N$M%8Eyt`52rJmM4}^mL0Vb)u45@Nb@f@PcU9cC1+1p5ybLdL)a_zJ;){5n*tdlT{@{Qz?rF4K3&_T8lp z&O*z)3EKBcx|0puC451B@jME>J{wg?UV`iEJ?&hG{lX{mGYQLmL%bt^0#X*z?)2MU zxE}hOfU(q9n8Ox?{s+h>RALyeC@saJ!Unh>nZ+onCpA!kzeZdHW88p00bK&@CUD6K zs3VS%-b@->K*Z~9Qe&=f1u>lJM0|0*^Wp(K?K*WU(A}T!@q8vxJWTI_{geHZ_58oqEvD+RuY6}h*{ikw z?(k3lQg^XEKJ=kF5&YOme!1m@uYvi5zZZDm2?mAqFMJj|1;F_J^22nP;yc9;DX=CfSw+Y{X1*1PbHX>bwBmB@Cr6pdP_MpxieYHIkf( z@9BE1YqbqP3h_kk3XpaNt0I2K7huC-vvfr-Ck%1&^J| z?n#;o7TStk`A7!o4!Hp6>R;pP@7V`W!K9#m`L26LAg_}%X{*s0_A}O-!F*CWwwKT1 zm=8Uotzpjx(mY|VEN};MF%d=Uhn{48W$Q*hC~m;lnpCQL_Nj!w^rtAEeZ6^(&xciE z$NR2Zjyna&jU<421X~D>wVm|-piH3)p=VZ$uM5S%+s68earlxzA{>jDfI5nP1ZQ{# z`Hlg5NkVkKGs_s}ScI5|QTW}?)!;PzZUzJ`js4m{@|PFl_I{7gOumc zSaZl28$>pX9;h4_b_NQ2d)_Pq-JucNB~k0R-UuX|>8H=7_KK@JG6$Kmeo?uWyV z9PaLNxVyW%ySuvtch?YEnQ8ee_vPabvb!_W-S5?_s@F4n&#dU~B=h}j5xdF#+j};C z>sQ<$8=;aN;PajSe#2K#Om}zpe%4PCTHABIzf;{vHVMyTPp#qMChcSGbkYWcY z;Zblu+r|uWo|%(*CE*LqfwGBa`N9fWb7OcB&dR)Zq9kcq*D@c5_z_j{e&1+n2yItCDL8?se-#e}oJQON$+h zJ&ecxW~xhyU#W+JgQx`(a`y+Rj!--3JHcaolQ`JBnYNA_va#d@FA6_Pn&|M!0OOHZsjnJ5rDFn&I( z=WT1YcJhFCmay`NaCbLeQ}<_Q-NU^9v+~$`ez*5`^Hd6N?O9~MjqfR^g^f$HO|6e> z=s&6R8NFR~!#a5z>eS9=e%p0eU5&pRn-J`1JT`s=H~gNIFkN3X<8+PqT)!+|1nqR~ z^QH~WW{sAO+2v%pBTIUwIlt|l{AEatb-?#6W=QZ7WzrdJSHR={+t zWhvf=Z{atrnpTYJf%_|Kh4gX*n(R5`N^&HutL^@2`0p7`k$(1F7`eOn;bUQ8)|jdn^;Xe>3y%N7C+H{Mt#>^#2WvXg#CfP zMTBamU$ZEyll!Dcg3f|V^UE__voc6wF!Ir#&dC+MUmmzLZKnN1tUpc;l??+(1Xl0%X-QaPA z-)_*0dWV6Fl zxF)LGR*vvGsV=AZ;4O)#ac0H$S1zRD<|*ot5EVPhNv+4lH~D_!cTYzv9lR3zPeLd! z5xT&WnH5rN*k{keWc9+kCaLavphw6(x~`F*Y9}=L*+2G-{aO_DOFRQ^ioIHnOE?yD zAu!B{@(l8>N%A!GmHE+_6`C#i0`C}BNz~PSJg-96TIIz$UsL~5XMl{hj|Df1Q1#wv zFQZVuFHseW_hd}k!y|Ned@J_fVGljGY!SP}er8^?Qt{>bzLU+jC*B{-q37#SP6z)3 z+v8@*_9Es>=_9I z`rxj;7{1N8&o&sHLW9Y-C0T2Xbgsxfo)uwU!yCNm>l+9Js{0GXFOIwG|J(V;ejI4z zTu`$SiwAgp*B_|O=Z&Lb4I{=UX{F}*^2^s|2P27YpzBaCHBOEq%XExe`h>k!Ot5B$ zbTn4zs;)tyTRk7x2$4sYFeehi2!CLa6oFu?_WJ|{zoaYqc13WJ4pWvs2dTOub zHmk8JCi8r9RboAzr9pf>rTv$`PQu0jcfJQ^1dht4^ghrP3~p&cS60Sd$e5;^o5e$m zhiwf>9g-}hrK^)M$(ZKa?-}NrubYeHtT$T~{2F)B_gZ#g!(_pPZE+LCZ!?=U%}DEt z@+5Po@H9wLBl)nfSw@(YG}XH)ROwH?hPJ71+7!Fy$L^TzzEu9su^Hoj*d6r{@zI%M zoN}EI!vaBLezKj(X1Fubef5nWG+*hL!P0?pb`Ph!{X6*5*)7XC%MuFu)=&Xg5^5;8 z@z_(x>Z-S>H0F5kDsOFLj$UU~_FUyXslPSFl~#UFC@L$06i zd}mdx8HUsYDV>p(?Xs%{`ioX#dtAcr8Y;%sSkI5Y7>}Jl@L#itjKPw+sf)YPnYXQs z?p@{qmX;SXhnpX1vOUf})2Sn8_?N`J_6?P@DZf1A%i}wsrWgZtxZKE=xR$!ldYhzJ zADJ^rO|uXCYWh9(+?D9PQ0#*>o^^N1fn8)0IqYDtGP36d+iZi5LEi03Z zXJ|?_7gvb24>$AVqk3NA%RZM)}o(d0$nx@A|@=2K=EJ%3$>d4>~txeep*iSN!An6Jm{-)k@8t zsyNojJ=gVIb-+EFZ9F4+F}m)q9@3Tu$(^o1$O5r5W}knI(cP%4j*2@njV{T4nzvj7 z&6I2ral>N`Hgg&~t+rw3lFbQSXBMT)%EmPmv`*`kzJC+`r7Eu5@_YPQcqP?UUR}<3 zh9~hhje9MsSbf=E`;GINUAN|1@7Xu!yzja{yG~=;G|@TiETMq8$r{dzLjTnaM5s4> zA*&%00y|}xyRy5qcoN?m&tCkc8SOPwxZ3bjMzXLBNw%{N_I~!$D?{>`9#>V+_*;oA$zUbh5-PI`Ln(3NLB?GoUIeTsv75;=hvW44mbv1UIx2&0b zH{~&w;TuF2sgJbN-8ISJP@mCFSKzU(2d?3~0%B&iy-@Yxjd?cgs>#4N8V%V1{gWc} ziokfgij_BHK1GW8*4(hd)@^5@6DLvzmj>$UBrJ=)*_T=lF~+jNGKFmIoc1;I-E=a^ zlfJNoU8OatDiAW_Z3f_%F;!>&CH$=);lde@RFZb~pp%=nhvs1oRf!BICzLBChIKmG5td#m6 za_d*Z617w(HiwFcuJ$>3hwV0Y@@{I7J;ABVx|sXaxr8zCdxhZp=)UZtYwDWLcPFj6 z((D^J7W=@d%j)T7?LzZ;deT z4^KvZS3FbMtz)kCEV*>6!)iY2-w-`SKMmduRAAhis2T;vVqfYyI>{VXg{rHv>>(wf5l zWZuxCy1Vl?Pwx50wT+d~$5bNIZseN9_xfAMm2w_XDUr?J%1+7N8TG8Pp7E~R>Xn^@ z;_%&-m(^(JrF5Gio)WGu^v(VhC;`OTEl&p<`ilo*@tmh8x;I;-qvQc4c(mD+Y6UX| zOB?q?YV*4G8RrP)G-es2jJJA8;JvS&%4hy!71d4M*F5Se7+TR=$l53N1^;Dr+{uk3 zasZU=NY{KLudd-#3gikTI9t>J5f{iC+^?=!t=y|9hb_cXBaJ(WJDd3gPyP<_JnogQ zOFD(U(f%rSi`Gs;@Q8m+!Wv&vu~-_u0kOU8>gHK1gx!%%)HJr;ay+*@PYhdsVDGJY z?rhe4-P>v6OqWNL7Hxx`z!34CyLy=JXe>qO94 z6B1)qmKW_v@vrQu{#NImzW&z#AseQ`MZe_8pN@m!(mGN+p;F3z!Eu2|aft7C-7t@{d3=_uv$sX)C(j>NNgiP3UA?@0+&ieWm?;u;G41%@ z#YXuWI6f!bsUY|20=kDj&cn=K`hl2?=XXVgCiPZu)kjw&i`mA?$TK+meOCi_#6Edc ze0JJ7@9n%!K;%+8#Uwl6{J|Poi_A9q9~I%666$qrmmcwtTBQal&JrjAO0%O}&Ha2X z6;uO7v?xn&jU}AR_M)1}y)Ud;x)i-Jh8hjnJDo+A3Z4v1k`?)W<`*Xdor4Q?lxeUx z_PoGPr!s%#dV+5UdB9E@v)olYSBy7mmfR)_%h|G@+9;|8Mg)GT+0-P^?Ke-@CC=#u z`lrrF4XK_n&r`-5;nLuq0dtEhiTj!Pla8sy`YTJ#7CW{5*8)SuHgO}EIxssZMPcg2 z-y8Rhal8TFV$}#8;N8Y%$oYolE$NBo18J#_m!~9rLD@b~&37?4U37J#?HSTdcXdj3 z&^&E~%MW%eujGw!ZPc?=X5)vem8$@M0AwiXgp1wsxEd){Ahmz1IL)G1DRoywsRC@D zVHmIVH(=}-Z(Hw8URSMUA=V>4SNrrPbubVXSgG%tY1s{@l_-ij@XF}I^U?_|SVpU+ ztE{!x+-cQy)v`wO+3J_`+zxkI%ZsY9kb$4Ua{8+=hd*@wLALJTr`Z_R&ur&vV174z zp4{F${G`aB5_AR`Vs8k33LXzi`)^rP9Q5b#FBF^UsA`IDZZB>;G+nOsA!|Y#y0`LK zruLKyG0hh;jcBBOG+o|xVsXA1BHBLce02H-GX#%_Hrh+onB?QlneHT^Q{ggf(C76; z>xXM7>mjr1_w-dZch1Uv`n$b6es#kB;MCxAzc0{4mgM=&N&FgpV6%)a<`DB3Z%Lc* zEq(2cDB~ZhtdhyKVC1#La2eqw_iy(X)052znj@Yv!yRgM=asCl?(EiiKERdNn_xZG z!zsHlpP$yzq6~b9wIYlpkz5w+D0;C7qX_TChOzQ&Gd1Ovt?br)X6n7VB|pjXh;xD6 zB8xtNee`eQ2L$HYN5xfLnwE(P!4#qcD{W*kD&x;*BZn(pNVMl9pDE|*rF^uyAIKQI z?^q(-DKF}(^75O#Py}eP@s2;I(mc1PQP{4K{#IS|^_qly3hC(?WmeIJ#38XqE)vX{ zXh#QE;@;egYO*?O_X*}#U)Xt-75fql?;LMucPgul;iEyi2fbs*^m%)Uzeb?A$g7Xb zJhnT~FOb~1C2PtCPCIc+U*P+UHb!;xx2u=O<8E*5GoSO5dYWEtOtjX}Y$(oaEH|H^ zkII~)v3T8*55`4{!Hg|rUa|Vku+bf4*c!^8R%^vwXX)R1V({ll+xu? zRdG|~Ld`MVZ>&aU98boV0R;m*PAu^i_fL{d_(A3ahht8Z%p+%uy&|nVCjX`bW>WV> zS0VTAkiOnHS0vx2Cde(?XZXz|tf(mI^wu4Xw7iz8A;vk}G37nh$#k>363@nU<#0XX zS=eP(z!<@wtBvRzUUBBio!Iq!-p&^+W}k!FUM+eB{k|{$tg4!I(UrwmNf&r=*B7fS z8zon&i8Na;S8lpaeN-RON=>5)YNNd^xJ_hcPmP1@p8Con+*v~2xW2LSdN!MC?Q@N? zJmz<{4mv)!9?x^~!YY&V!=5Hii8l75pdp1`rMsx~dH`Es;@e}*#k55iWewnloif9% zdTg}g1SUJf)Ok_G|2saDT}YRdmF;^XKb28^oX@JHna5nk>hd?%cXwacY#zb}nb)nE zRL~hKI?^*5sd_t^?Kr0)*vS9bYU)Vo>4RR%u9)jwIV=w!$s;}cy%FY1IfsPtO5Y56 z>>O&NUZ*_zqt2<~>`lR-BWb50bVDcT+@KuRIxB*=RY~;^=HZp8Fjb;{(y?EO=~S2c zi?_isP6r)AeVsOeg>s3}gy+yZ^l0A5JY&8$YnsoQSGQ8D^bm%fLi&eDDg$~tKfxBm z9j@qnP?uC;=#g^99czZ=GQ-ShGaay~AAe&EG+yZ6vMcLsB{j~=a8X`N6CLCt*;>@F z!-F;LFga4sXP5XbZu4a3A~V0SjYepLk1#UpmCk9^!5Gc6sG-gddtY!_zz)`sXH_?O z+{q|g@J6nE=3(IZQ`Xg(Vnp#R)SmmzHf9^vLvPkO2w#z*hN=@l62E=h*+TcB$5H@O zuJA8rA)^N!SE=+HI>^Zk8m;&-s!zM97FARv203%YYZXZ;)LgMnr#3SfF;dxSWo3Te zY`_=jo-~csp!O7Iq%o$*{(%Ly(uL`oc;l>+M|1*4TvAj-ix#SEJZQb=mdI+KkoDOa7ErClAkkEk>?QM3c0PfuOnKcI6C4^`CTB9AZY5U8*8GN1nx)ho^q?1f|RZ*;HbLUVXwR4Cr8k>1`?Z^RaxLKDM(UaK|v!pSFcC#Z! zBu}YJ>T`5b2gPA0AYZY$#(MTmrO~xnUE`-Qk`Ew9|H&TmuSTqq%xJ^j>m*d3wWiW? zqSI9jR3Ft1Q9_*3XZayoDNC#0==5%pyLCE#lfKK;DuGg)watpORO}Gz)O%G)o^h@@ zujE(VM(>bQ)m$n;gVj{!qFDV)^`IqYN_Q{I#al9ETJ9jvsyeBAl!l(kJL(m#^OPK^ zc2NrU1b5iaR{eAd8bmv31dB3CS#PY`MtvGU>sT^sCbP>8Y7@|;kjg^U=$L$LAGfDM z9p#Y=?MKcI^-jm@)pU^EW=Yv2dP6Pgns(zkJk{ubv;d6#gsPDp6UR)kfh>UxYSt*WRAYNjfv2CKt3OIpgP z$19hrrjF?AY(AW&CVC;yYqjV1z-3FL4j0qY|NvHvww{*)^hU`n?`@pO?@AceuFJnukFcBR-C82tR{Yo zRVo){q$0X0#x<9jP~Jyq9<`;aY&p+{F>MF`pCV7Ff0SDar>!uQp?AuM&PP=G8syi# zDS<4Spii+pW&vX;U86F_1u(9o@E)@0#k7Epq+9ZeIIkkvQnrprx0YYPi~gnKtTAm; zwWx&A)vRT_gnONg9M3rCtLl`hES?9q25*QmY!|;ltJG5U zh-&cLvwtG zvOR1&)XEncYW%d0nm*(~jGBQ}yde%chvWtdWta3JJ(vno7i3TjJ=AC9J=p-7 zqYG2)8m?$Et-`zFc}6NB^W*z?FSBrZk6oq-Iu9b?tq^w5&Iy!UNA0K_kf9vS<1=_Y zDyu51E!4nBXN;q@>Z)1_HWH^QsnMt&=b^I3>x`o{H9=x3F(m@$Y# z=rj9b^ffyh$#@5LnL=qDa-tO~LMf+!s>#~YCYe^5tO-xSn(FkrFIA zQ*0gY&HegM`AGbQ=Mpbc7sY-1vb|S?=qFI%jpPXU66=8XAM_Kd0;X}*xMKF@vvo(h z$lHJ~uayVnMl~PvJW{_>emPNomT7eZs!5OZM(V+j8M_UWXQnmic&stf^Y+x4^6`&6 zC0nUp%PA@Y6ly3-3)VJQ6wuX;CwvJ!f%Iw|n_%VwqWlTg63L#kc{E!6p=u+GUQjwZ ztX7ICU<}=mS5b1R>_d-vRfF@>w45A@Vk1~9K9+|9HD2oK4BwHaSAdJ&5!v)0{ateT zLH^KZnV;>z{5_-EysJ^nsKPg~DeN8p*PL#=rpnOG_4#eyLhrRh>@H#z7;tL&Oukpe zs1eJ_#%V2|s)Nihub3&#->3&^tRmK0-b(FrR>&x}K$muE*}_RFO<6|1l&?i!C%b$` z*SW)X(>sdg$IWiW6&gWBc^Tsu|G<9ejxx3QTi#NcWkq|FZDQSas5Eqfo~woOB;7La z7;Y%Z1nZ&ego(Wid@+UV%9xSnR7d?1?_@ek%bMxr(ver`6Z?xvy%D}=UgMj2+^h+; zb5D;%rbiId{nbf%Qx4FT>4ogz&Xn3R#%rdMQ>G#Qt15R1}dtQ_4FlGPMP#CFK_%|gqmMW%gkl0Gn=_)07p)03%cq8 zd#3lu^^{3oU)2m*UH+EC(ERGLfdi;Mpy^+fBvTdr5>a1_Uy{aunfhR?a6Y?vnUK(A7BH_M# zHV2z|jT}aMvx9jZ-w9k%L-BBf^-(E+mn1vceQoXBLw_r?J<91JOY5Dw4r;}EmX&SP zb#;Hr$%~@S7Gp1{0Jx5=X9M4Is25HaJE!du$7DuXTx10%KW8P`B0kD&Y)XEC&o{0a zYp{-0%?U;s{*gNCQHaAyYK$x>);V{@FttmySO4Pq$!%CXon>SQZt_{IHg;9s!?%59 zLey=c>uSD}!xuZZ5-mXyh{-zJm9J2W={0JJTp{D-6LHYSh9mf|x0ngHvUZW93A( zLFcC1K)eFxOLL6rHeVQhjU&7iH+US&&4%g0s014IcY|o)q<6MC1w|u~ARed@@XUXr zT7BW%Si#b>e(WI4)La+TejP>=)fq8V7~nPMoyqoS`>``v_EODJ*BL5J7%yggL5|in z(i=w&Vazn@^O~#!tIN9S5OBTQqA=XSX)=fEtoo|_dK)d|smzB)5m1+!)-3Cixeffj zH{6@?;MN~7(}z{0=HH1$e3f+Fvq|hY|S!L zGCfsAsh?t}bH%A7g6OF9cD_1e!4{jS+%i`6<}=L?(44Q$BIYI|yV=P!&^K)WzI_mA zJwShyT3i-fW|9}hD^XSb)P?ARo)13rjvwMJ4VRhT_{6@k`g|zA$>!+7vZ*WxKjnkm ziSOHNF4BnpqNt2eDWDK{>W6fiC%Rk{`E$OHZ)9(@t!83XYO!+ag0RI$QA1=BW#QGl zaCV9+sx|iYcIDStQlqzJxgMF}W-D{Hc^$rD1$LW!bcm+v%4)fMD-7%znJKc$8L|iJ z09;(|@cC>b8))qU zDLmK7lm!|jH`d%`UNDC7^6UVWW;0kevXqIlofH4Vil24TNdx?Jv+AfEeGzle9NJ?l zAH(1CBSu4Wy%aT6_|lWGOXYh3KKWz6J`>Om=|{WW9NMv%EQs*GEM>1h#ib z-#&F|rctaD|XX?gs0Phkoz9c$Q9dIhy z~kb!43WPFM6%odG#Bk2bNXMzk@8=VTYDIjhCS>(R21EUG?W=Bi3Zq{KO2 zDwQ~{Ys7l#tdM)%OG zaA-F@frrsrnhKXml~Y7{|@c z<}TwYAI=By%{+wvqFbo*XY_91*CJrtbQuss(3`rUIhaLNHAiIEe(?V(v{qMRTX|Mq z9j=E1U6cX*t(tD&EVH}H?@$<#>Za3Jbk`YxQk`^JDEjq!v{BXkn?C?8Y9- z(_(^Z1C^gk76Gyv>^OzUnPL#|t{&^h>mYt>$ua5?&&$utBH;3C5G!u>TvbOGF$C4% zG>)(yd770aGt%+HsOWo199aN{eKFIS1X-mr&3r*e#k5 zx8OVt;q7=0))hSCDSL*@JFowwFx0jAU_=R6aLSl}D8aI-ij(<$e`G3#kG1)%(;8^;8u?Jx_zbL0_@b`~k*T z9o4N3wFi<{V2$WDI$h^kH5Q3@xdSGAUT(!6hHNxg|D&6N6`rK$w3bEjJ*cd$iP2Xb zqia)M_72^O!BChlfCY_E#VhIth~+hy^H$Uk*dBwYA)W#UuT0Isv%-}D*DDE>_G>+a z+;AO^s|@gG!cl#f=^{A7A9RB>oder?p;zm4^b-oX6}0(EU4{12czqat-hJiO{Zui1 zi%Nj$G{dg?vTPzexbEC-ECM!8V`Y)$fACc-12u$3s7c>6sXyfS1dP#jS`?uu@{TkQx5pGU%-CD(}w)94q zf-YIW{>Rg>1yql9Wt*rFWuOh{<7EQN{lMq&ax4t&EuBu-zNG_qIEni^vSU74s5R=iJ_x^|C|FZ9eg-~3DoRkDWC^%g znbc)4vk#P;?bg*XTOH|>E(D+68*gFUWEtUUHo@;&>S?OEx(qd2nQ9|OOX~bs?aR88 zzNap#MZnh&7*lrYr5kD&W;7L?La%bvFzS}*QQ-(hpng;0d?R#>JgvNNA@@;5O2*Ey zRKVZO>?KX2H0%Sk>NBkTUR=cy#8@-!!1*(vY9_E@@J8IUonk0ArP3+%8^q>*eMDEF z-?}x%vm6K>s@_PCK7-l1hHNZ@?xK$tv$GVbZ>vo3JU&2Yo7nrG0mn?owo-1rOm)`< zC|=)G=fJHpP;r)reZp%G**Cu4xWiXcPVJ$$ECTZ$52eAd%73#h^i2(vxe?nRz*@J; zy80f4F^LR`fZO&2s_`+dy_Zs|1){Smn@d0RQoT#R1~+I0eEKY(sH)IME8!MShqt#C zGgFaz=onQ9KHhog`&00F+QUPgj@TTHt8b^L&`8=2eO-#><3;#==%9AgA6>9x$junN zN8g6u)sGdSMmj=gLunYMVNwm|m!E$~wwR?{Qt@^>LhK1vKd`)(C1O7qsX|7LE)lO69QEHI#

    grK-LHFReVZ8UxQQ07lYM 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 NF{<`d_&;0q{{eLzyN&<= diff --git a/res/raw/ringback.wav b/res/raw/ringback.wav deleted file mode 100644 index 21f4b5bfb763e5448843e4410ce9d742227aa572..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 24620 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 diff --git a/settings.gradle b/settings.gradle new file mode 100644 index 000000000..e3ee292e9 --- /dev/null +++ b/settings.gradle @@ -0,0 +1 @@ +include 'liblinphone-sdk' From b5212f8604b4353c7a99b9e171b11ae1ecf4ce2d Mon Sep 17 00:00:00 2001 From: Jehan Monnier Date: Fri, 25 May 2018 15:56:13 +0200 Subject: [PATCH 29/33] fix liblinphone_tester --- liblinphone_tester/build.gradle | 2 +- liblinphone_tester/settings.gradle | 5 ++--- 2 files changed, 3 insertions(+), 4 deletions(-) diff --git a/liblinphone_tester/build.gradle b/liblinphone_tester/build.gradle index 8df31bee5..2e93960ab 100644 --- a/liblinphone_tester/build.gradle +++ b/liblinphone_tester/build.gradle @@ -37,7 +37,7 @@ dependencies { compile group: 'junit', name: 'junit', version: '+' compile group: 'com.jayway.android.robotium', name: 'robotium-solo', version: '+' compile fileTree(dir: 'libs', include: 'android-junit-report*.jar') - compile project(":libLinphoneAndroidSdk") + compile project(":liblinphone-sdk") } android { diff --git a/liblinphone_tester/settings.gradle b/liblinphone_tester/settings.gradle index e18620715..291201bd6 100644 --- a/liblinphone_tester/settings.gradle +++ b/liblinphone_tester/settings.gradle @@ -1,3 +1,2 @@ -include ':libLinphoneAndroidSdk' -project(':libLinphoneAndroidSdk').projectDir = new File(rootProject.projectDir,'..') -project(':libLinphoneAndroidSdk').buildFileName = "libLinphoneAndroidSdk.gradle" +include ':liblinphone-sdk' +project(':liblinphone-sdk').projectDir = new File(rootProject.projectDir,'../liblinphone-sdk') From a5f03c5dcd1281d95e7364388a557579ca26aa59 Mon Sep 17 00:00:00 2001 From: Jehan Monnier Date: Fri, 25 May 2018 16:23:15 +0200 Subject: [PATCH 30/33] fix build.gradle --- liblinphone-sdk/build.gradle | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/liblinphone-sdk/build.gradle b/liblinphone-sdk/build.gradle index 811af8468..4098e7085 100644 --- a/liblinphone-sdk/build.gradle +++ b/liblinphone-sdk/build.gradle @@ -48,6 +48,10 @@ else if (file('android-armv7/share/linphonej/java/org/linphone/core/Factory.java rootSdk = 'android-armv7' else if (file('android-x86/share/linphonej/java/org/linphone/core/Factory.java').exists() ) rootSdk = 'android-x86' +else { + println ("native sdk not ready yet") + rootSdk = "" +} srcDir += [rootSdk+'/share/linphonej/java/org/linphone/core/'] @@ -156,4 +160,4 @@ task copyAssets(type: Sync) { includeEmptyDirs = false } -project.tasks['preBuild'].dependsOn 'copyAssets' \ No newline at end of file +project.tasks['preBuild'].dependsOn 'copyAssets' From 23adaa80e291c3335498bf08ef3e95b801aa7b94 Mon Sep 17 00:00:00 2001 From: Jehan Monnier Date: Fri, 25 May 2018 18:15:59 +0200 Subject: [PATCH 31/33] fix unit test --- liblinphone_tester/src/org/linphone/tester/TestUnit.java | 1 + 1 file changed, 1 insertion(+) diff --git a/liblinphone_tester/src/org/linphone/tester/TestUnit.java b/liblinphone_tester/src/org/linphone/tester/TestUnit.java index 4214996f3..980c093dc 100644 --- a/liblinphone_tester/src/org/linphone/tester/TestUnit.java +++ b/liblinphone_tester/src/org/linphone/tester/TestUnit.java @@ -66,6 +66,7 @@ public class TestUnit extends AndroidTestCase { protected void setUp() throws Exception { super.setUp(); if (isAssetCopied ==false) { + Tester.setApplicationContext(getContext()); copyAssetsFromPackage(getContext()); isAssetCopied=true; } From 3d276ad1b51d8b707981a512d27ec1e331adaa93 Mon Sep 17 00:00:00 2001 From: Jehan Monnier Date: Mon, 28 May 2018 13:39:47 +0200 Subject: [PATCH 32/33] update submodules --- .gitignore | 1 - liblinphone_tester/gradle.properties | 7 +++++++ liblinphone_tester/src/org/linphone/tester/TestUnit.java | 3 ++- submodules/bctoolbox | 2 +- submodules/linphone | 2 +- 5 files changed, 11 insertions(+), 4 deletions(-) create mode 100644 liblinphone_tester/gradle.properties diff --git a/.gitignore b/.gitignore index 1b94dd9f7..f1ed51c97 100644 --- a/.gitignore +++ b/.gitignore @@ -47,7 +47,6 @@ tests/tests.output WORK .d google-services.json -gradle.properties .*clang* linphone.iml src/linphone-wrapper diff --git a/liblinphone_tester/gradle.properties b/liblinphone_tester/gradle.properties new file mode 100644 index 000000000..a4996c82d --- /dev/null +++ b/liblinphone_tester/gradle.properties @@ -0,0 +1,7 @@ +// Signing APK Release +RELEASE_STORE_FILE="" +RELEASE_STORE_PASSWORD= +RELEASE_KEY_ALIAS= +RELEASE_KEY_PASSWORD= +#source:https://docs.gradle.org/current/userguide/build_environment.html#sec:configuring_jvm_memory +org.gradle.jvmargs=-Xmx2g -XX:MaxPermSize=256m -XX:+HeapDumpOnOutOfMemoryError -Dfile.encoding=UTF-8 diff --git a/liblinphone_tester/src/org/linphone/tester/TestUnit.java b/liblinphone_tester/src/org/linphone/tester/TestUnit.java index 980c093dc..da92a72e4 100644 --- a/liblinphone_tester/src/org/linphone/tester/TestUnit.java +++ b/liblinphone_tester/src/org/linphone/tester/TestUnit.java @@ -26,7 +26,8 @@ public class TestUnit extends AndroidTestCase { public TestUnit(String name) { String[] tab = name.split("/"); mSuite = tab[0]; - mTest = tab[1]; + if (tab.length == 2) + mTest = tab[1]; setName(name); } diff --git a/submodules/bctoolbox b/submodules/bctoolbox index bc7a47598..06cd2b314 160000 --- a/submodules/bctoolbox +++ b/submodules/bctoolbox @@ -1 +1 @@ -Subproject commit bc7a47598455d62a73a80f5df70f972b31be5fb8 +Subproject commit 06cd2b31438ac632520ebce25796cf6e2ab5a759 diff --git a/submodules/linphone b/submodules/linphone index a6db4780b..d0b5c85d1 160000 --- a/submodules/linphone +++ b/submodules/linphone @@ -1 +1 @@ -Subproject commit a6db4780bc42c5de0f88bace988fe69bd55e694b +Subproject commit d0b5c85d13bc8e855d5a2437088230d2511e04ab From 77818d930d813c47dbbe09d7e71768b255e12249 Mon Sep 17 00:00:00 2001 From: Jehan Monnier Date: Mon, 28 May 2018 16:21:08 +0200 Subject: [PATCH 33/33] update belle-sip --- submodules/belle-sip | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/submodules/belle-sip b/submodules/belle-sip index 411e1c3ea..d7b16228a 160000 --- a/submodules/belle-sip +++ b/submodules/belle-sip @@ -1 +1 @@ -Subproject commit 411e1c3ea8752927cff2ebb2c0170351f3879bab +Subproject commit d7b16228a2746644a5dea76be9fff45708773130