From abaa65139c9ddf6098c911b1a06bd95724203318 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?St=C3=A9phaneDucasse?= Date: Sat, 20 Feb 2021 22:12:04 +0100 Subject: [PATCH] New version to check if the old is still working. Redoing everything following the booklet (to be updated). --- .../BaselineOfMemory.class.st | 14 ++ src/BaselineOfMemory/package.st | 1 + src/Bloc-Memory/MGCard.class.st | 96 ++++++++++ .../MGCardDisappearAnnouncement.class.st | 8 + src/Bloc-Memory/MGCardElement.class.st | 169 ++++++++++++++++++ .../MGCardFlippedAnnouncement.class.st | 8 + src/Bloc-Memory/MGGame.class.st | 158 ++++++++++++++++ src/Bloc-Memory/MGGameElement.class.st | 52 ++++++ src/Bloc-Memory/package.st | 1 + 9 files changed, 507 insertions(+) create mode 100644 src/BaselineOfMemory/BaselineOfMemory.class.st create mode 100644 src/BaselineOfMemory/package.st create mode 100644 src/Bloc-Memory/MGCard.class.st create mode 100644 src/Bloc-Memory/MGCardDisappearAnnouncement.class.st create mode 100644 src/Bloc-Memory/MGCardElement.class.st create mode 100644 src/Bloc-Memory/MGCardFlippedAnnouncement.class.st create mode 100644 src/Bloc-Memory/MGGame.class.st create mode 100644 src/Bloc-Memory/MGGameElement.class.st create mode 100644 src/Bloc-Memory/package.st diff --git a/src/BaselineOfMemory/BaselineOfMemory.class.st b/src/BaselineOfMemory/BaselineOfMemory.class.st new file mode 100644 index 0000000..fe44eb1 --- /dev/null +++ b/src/BaselineOfMemory/BaselineOfMemory.class.st @@ -0,0 +1,14 @@ +Class { + #name : #BaselineOfMemory, + #superclass : #BaselineOf, + #category : #BaselineOfMemory +} + +{ #category : #baselines } +BaselineOfMemory >> baseline: spec [ + + + spec for: #'common' do: [ + spec package: #'Bloc-Memory' ] + +] diff --git a/src/BaselineOfMemory/package.st b/src/BaselineOfMemory/package.st new file mode 100644 index 0000000..5107c36 --- /dev/null +++ b/src/BaselineOfMemory/package.st @@ -0,0 +1 @@ +Package { #name : #BaselineOfMemory } diff --git a/src/Bloc-Memory/MGCard.class.st b/src/Bloc-Memory/MGCard.class.st new file mode 100644 index 0000000..4a416bd --- /dev/null +++ b/src/Bloc-Memory/MGCard.class.st @@ -0,0 +1,96 @@ +" +I am a card model that can be flipped to show its back or face. +When card is flipped on the face a player should see a symbol that is used to compare two cards. + +!! Examples: + +[[[ + | cardModel | + cardModel := MGCard new symbol: $a. + cardModel flip. + cardModel disappear +]]] +" +Class { + #name : #MGCard, + #superclass : #Object, + #instVars : [ + 'symbol', + 'flipped', + 'announcer' + ], + #category : #'Bloc-Memory-Model' +} + +{ #category : #accessing } +MGCard >> announcer [ + "Return my announcer that is used to notify my observers" + + ^ announcer ifNil: [ announcer := Announcer new ] +] + +{ #category : #actions } +MGCard >> disappear [ + "Ask card to disapper" + + self notifyDisappear +] + +{ #category : #actions } +MGCard >> flip [ + "Flip the card on the other side (toggle flipped state)" + + flipped := flipped not. + self notifyFlipped +] + +{ #category : #initialization } +MGCard >> initialize [ + super initialize. + flipped := false +] + +{ #category : #testing } +MGCard >> isFlipped [ + "Return true if card is flipped and its face (symbol) is visible, false otherwise" + + ^ flipped +] + +{ #category : #notifying } +MGCard >> notifyDisappear [ + "Notify all observers that I disappeared from the game" + + self announcer announce: MGCardDisappearAnnouncement new +] + +{ #category : #notifying } +MGCard >> notifyFlipped [ + "Notify all observers that my flipped state was changed (from flipped to not or the other way around)" + + self announcer announce: MGCardFlippedAnnouncement new +] + +{ #category : #printing } +MGCard >> printOn: aStream [ + aStream + nextPutAll: 'Card'; + nextPut: Character space; + nextPut: $(; + nextPut: self symbol; + nextPut: $) +] + +{ #category : #accessing } +MGCard >> symbol [ + "Return a symbol that should be displayed when card is flipped and face is visible" + + ^ symbol +] + +{ #category : #accessing } +MGCard >> symbol: aCharacter [ + "Initialize the card with a given symbol as a character" + + symbol := aCharacter +] diff --git a/src/Bloc-Memory/MGCardDisappearAnnouncement.class.st b/src/Bloc-Memory/MGCardDisappearAnnouncement.class.st new file mode 100644 index 0000000..27fdabb --- /dev/null +++ b/src/Bloc-Memory/MGCardDisappearAnnouncement.class.st @@ -0,0 +1,8 @@ +" +Is sent by ==MgdCardModel== after the card is removed from the ==MgdGameModel== +" +Class { + #name : #MGCardDisappearAnnouncement, + #superclass : #Announcement, + #category : #'Bloc-Memory-Events' +} diff --git a/src/Bloc-Memory/MGCardElement.class.st b/src/Bloc-Memory/MGCardElement.class.st new file mode 100644 index 0000000..53b01be --- /dev/null +++ b/src/Bloc-Memory/MGCardElement.class.st @@ -0,0 +1,169 @@ +" +I am a visual card modelled by ==MGCard== + +A model should be attached by sending #card: to the card element. +Card element reacts on model events such as MgdCardFlippedAnnouncement and MgdCardDisappearAnnouncement after card is flipped or disappeared. + +By default I do not have a visual representations of the face and back + +[[[ +MGCardElement new inspect +]]] + +[[[ +MGCardElement inASpace +]]] +" +Class { + #name : #MGCardElement, + #superclass : #BlElement, + #instVars : [ + 'card' + ], + #category : #'Bloc-Memory-Elements' +} + +{ #category : #'instance creation' } +MGCardElement class >> cardbackForm [ + ^ Form + extent: 80@80 + depth: 32 + bits: (Bitmap newFrom: #(16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 318767103 1526726655 2936012799 3439329279 3942645759 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 3942645759 3439329279 2936012799 1526726655 318767103 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 570425343 2684354559 4244635647 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4244635647 2684354559 570425343 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 1778384895 4143972351 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4143972351 1778384895 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 67108863 2483027967 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 2483027967 67108863 16777215 16777215 16777215 16777215 16777215 16777215 2533359615 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 2533359615 16777215 16777215 16777215 16777215 16777215 1728053247 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 1728053247 16777215 16777215 16777215 469762047 4093640703 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4289965485 4289495168 4289492341 4289494397 4289492598 4293059298 4294967295 4294967295 4294309365 4289475122 4289487715 4289493369 4289475379 4289470496 4289485916 4293914607 4289475379 4289474094 4289477949 4289493369 4289477949 4289481033 4294967295 4294967295 4294967295 4289504677 4289495168 4289492341 4289494397 4289492598 4293059298 4294967295 4294967295 4294309365 4289475122 4289487715 4289493369 4289475379 4289470496 4289485916 4293914607 4289475379 4289474094 4289477949 4289493369 4289477949 4289481033 4294967295 4294967295 4294967295 4289504677 4289495168 4289492341 4289494397 4289492598 4293256677 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4093640703 469762047 16777215 16777215 2533359615 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4293715686 4291546059 4290690750 4294967295 4289492598 4289494397 4289494397 4289494397 4289491827 4291414473 4294967295 4289503649 4290690750 4289502878 4294967295 4289495168 4289475122 4289477692 4289477692 4289477692 4289477692 4289477692 4289473837 4292335575 4294967295 4289499537 4290888129 4290690750 4294967295 4289492598 4289494397 4289494397 4289494397 4289491827 4291414473 4294967295 4289503649 4290690750 4289502878 4294967295 4289495168 4289475122 4289477692 4289477692 4289477692 4289477692 4289477692 4289473837 4292335575 4294967295 4289499537 4290888129 4290690750 4294967295 4289492598 4289494397 4289494397 4289494397 4289491827 4291414473 4294967295 4289503649 4291414473 4293716457 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 2533359615 16777215 419430399 4244635647 4294967295 4294967295 4294967295 4294967295 4294967295 4293783021 4289429375 4289426034 4289428861 4290822336 4289427062 4289428347 4289430917 4289429118 4289426548 4289429632 4289432716 4289426034 4289426034 4289430660 4290822336 4289409072 4289412156 4289412156 4289414469 4289436571 4289409586 4289412156 4289409586 4289417553 4290098613 4289429375 4289426034 4289428861 4290822336 4289427062 4289428347 4289430917 4289429118 4289426548 4289429632 4289432716 4289426034 4289426034 4289430660 4290822336 4289409072 4289412156 4289412156 4289414469 4289436571 4289409586 4289412156 4289409586 4289417553 4290098613 4289429375 4289426034 4289428861 4290822336 4289427062 4289428347 4289430917 4289429118 4289426548 4289429632 4289432716 4289426034 4289426034 4289430660 4293980400 4294967295 4294967295 4294967295 4294967295 4294967295 4244635647 419430399 1778384895 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4290483348 4289429118 4289429118 4289428347 4289430917 4294967295 4290888129 4289423978 4289426548 4293914607 4294967295 4289426805 4289428861 4289428861 4289428861 4289438113 4294309365 4289404703 4289409329 4289436571 4294967295 4289414469 4289411899 4289417553 4294967295 4289428347 4289429118 4289429118 4289428347 4289430917 4294967295 4290888129 4289423978 4289426548 4293914607 4294967295 4289426805 4289428861 4289428861 4289428861 4289438113 4294309365 4289404703 4289409329 4289436571 4294967295 4289414469 4289411899 4289417553 4294967295 4289428347 4289429118 4289429118 4289428347 4289430917 4294967295 4290888129 4289423978 4289426548 4293914607 4294967295 4289426805 4289428861 4289428861 4289428861 4290491315 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 1778384895 2986344447 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4289425520 4289429118 4289429118 4289426291 4293059298 4294967295 4290361785 4289409329 4289409329 4293914607 4294967295 4289429632 4289428347 4289429375 4289426291 4289438113 4294967295 4294704123 4294967295 4289434515 4291743438 4289434515 4294967295 4294967295 4294967295 4289425520 4289429118 4289429118 4289426291 4293059298 4294967295 4290361785 4289409329 4289409329 4293914607 4294967295 4289429632 4289428347 4289429375 4289426291 4289438113 4294967295 4294704123 4294967295 4289434515 4291743438 4289434515 4294967295 4294967295 4294967295 4289425520 4289429118 4289429118 4289426291 4293059298 4294967295 4290361785 4289409329 4289409329 4293914607 4294967295 4289429632 4289428347 4289429375 4289426291 4289438113 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 2936012799 3741319167 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4293914607 4289426548 4289429118 4289421922 4289411899 4289431688 4289419609 4289408044 4289408044 4289421408 4289414469 4289411899 4289427062 4289426291 4289432459 4294967295 4294967295 4294967295 4290164406 4289423978 4289423978 4289429632 4293519849 4294967295 4294967295 4293914607 4289426548 4289429118 4289421922 4289411899 4289431688 4289419609 4289408044 4289408044 4289421408 4289414469 4289411899 4289427062 4289426291 4289432459 4294967295 4294967295 4294967295 4290164406 4289423978 4289423978 4289429632 4293519849 4294967295 4294967295 4293914607 4289426548 4289429118 4289421922 4289411899 4289431688 4289419609 4289408044 4289408044 4289421408 4289414469 4289411899 4289427062 4289426291 4289432459 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 3741319167 4093640703 4294967295 4294967295 4294967295 4294967295 4294967295 4291546059 4293059298 4289438627 4294967295 4290361785 4289408044 4289405474 4289421408 4289414726 4289425777 4289414212 4289408044 4289409329 4294572537 4294967295 4289433487 4291348680 4291940817 4294967295 4289425777 4289431431 4289431431 4289423978 4290690750 4294967295 4291348680 4293059298 4289438627 4294967295 4290361785 4289408044 4289405474 4289421408 4289414726 4289425777 4289414212 4289408044 4289409329 4294572537 4294967295 4289433487 4291348680 4291940817 4294967295 4289425777 4289431431 4289431431 4289423978 4290690750 4294967295 4291348680 4293059298 4289438627 4294967295 4290361785 4289408044 4289405474 4289421408 4289414726 4289425777 4289414212 4289408044 4289409329 4294572537 4294967295 4289433487 4291348680 4292072403 4294967295 4294967295 4294967295 4294967295 4294967295 4093640703 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4289360755 4289360498 4289365381 4294967295 4292927712 4289348676 4289350732 4289373091 4289368979 4289638062 4289370778 4289354073 4289348676 4292927712 4293914607 4289360498 4289360498 4289359727 4292269782 4289364096 4289365895 4289365895 4289362040 4290690750 4291348680 4289360498 4289360498 4289365381 4294967295 4292927712 4289348676 4289350732 4289373091 4289368979 4289638062 4289370778 4289354073 4289348676 4292927712 4293914607 4289360498 4289360498 4289359727 4292269782 4289364096 4289365895 4289365895 4289362040 4290690750 4291348680 4289360498 4289360498 4289365381 4294967295 4292927712 4289348676 4289350732 4289373091 4289368979 4289638062 4289370778 4289354073 4289348676 4292927712 4293914607 4289360498 4289360498 4289359984 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4289363582 4289363325 4289363325 4289357928 4289343536 4289346106 4294309365 4289368979 4289368979 4289368979 4289638062 4292138196 4289342508 4289342508 4289360498 4289363068 4289363068 4289362554 4289362554 4293454056 4289360241 4289362040 4289572269 4292269782 4289358699 4289363325 4289363325 4289363325 4289357928 4289343536 4289346106 4294309365 4289368979 4289368979 4289368979 4289638062 4292138196 4289342508 4289343279 4289360498 4289363068 4289363068 4289362554 4289362554 4293454056 4289360241 4289362040 4289572269 4292269782 4289358699 4289363325 4289363325 4289363325 4289357928 4289343536 4289346106 4294309365 4289368979 4289368979 4289368979 4289638062 4292138196 4289342508 4289342508 4289360498 4289363068 4289363068 4289362811 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4289363068 4289362811 4289364867 4289355358 4289340966 4289343536 4289363582 4289368979 4289368979 4289368979 4289368979 4289348933 4289343536 4289343536 4289358185 4289364867 4289363325 4289362554 4289366666 4294967295 4293454056 4289353302 4294704123 4294967295 4289365124 4289362811 4289362811 4289364867 4289355358 4289340966 4289343536 4289363582 4289368979 4289368979 4289368979 4289368979 4289348933 4289343536 4289343536 4289358185 4289364867 4289363325 4289362554 4289366666 4294967295 4293454056 4289353302 4294704123 4294967295 4289365124 4289362811 4289362811 4289364867 4289355358 4289340966 4289343536 4289363582 4289368979 4289368979 4289368979 4289368979 4289348933 4289343536 4289343536 4289358185 4289364867 4289363325 4289362811 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4289363068 4289362811 4289362811 4293914607 4289365638 4289346106 4290295992 4289368979 4289368979 4289368979 4289373091 4289355615 4289351503 4289373605 4291348680 4289360498 4289363068 4289363068 4289362297 4290624957 4289363839 4289363839 4289363839 4290624957 4289365124 4289362811 4289362811 4289362811 4293914607 4289365638 4289346106 4290295992 4289368979 4289368979 4289368979 4289373091 4289355615 4289351503 4289373605 4291348680 4289360498 4289363068 4289363068 4289362297 4290624957 4289363839 4289363839 4289363839 4290624957 4289365124 4289362811 4289362811 4289362811 4293914607 4289365638 4289346106 4290295992 4289368979 4289368979 4289368979 4289373091 4289355615 4289351503 4289373605 4291348680 4289360498 4289363068 4289363325 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4289364867 4289364867 4289367437 4294967295 4294967295 4289345849 4289339681 4292072403 4289370521 4293454056 4289359984 4289339681 4289353816 4294967295 4294967295 4289361783 4289361783 4289372063 4294967295 4289363839 4289361783 4289365638 4289361783 4289572269 4294967295 4289364867 4289364867 4289367437 4294967295 4294967295 4289345849 4289339681 4292072403 4289370521 4293454056 4289359984 4289339681 4289353816 4294967295 4294967295 4289361783 4289361783 4289372063 4294967295 4289363839 4289361783 4289365638 4289361783 4289572269 4294967295 4289364867 4289364867 4289367437 4294967295 4294967295 4289345849 4289339681 4292072403 4289370521 4293454056 4289359984 4289339681 4289353816 4294967295 4294967295 4289361783 4289361783 4289372063 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4289295476 4289306527 4292072403 4289277743 4289277743 4289280313 4289277486 4289277486 4289282626 4289276715 4289276715 4293914607 4289967027 4289301901 4294967295 4294967295 4294967295 4289298046 4289296247 4289296247 4289296247 4289308840 4294967295 4294967295 4294967295 4289295476 4289306527 4292072403 4289277743 4289277743 4289280313 4289277486 4289277486 4289282626 4289276715 4289276715 4293914607 4289967027 4289301901 4294967295 4294967295 4294967295 4289298046 4289296247 4289296247 4289296247 4289308840 4294967295 4294967295 4294967295 4289295476 4289306527 4292072403 4289277743 4289277743 4289280313 4289277486 4289277486 4289282626 4289276715 4289276715 4293914607 4289967027 4289301901 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4289299331 4289297018 4289297018 4289297018 4289294962 4293256677 4289295733 4289277743 4289273117 4290295992 4292072403 4289290593 4289297275 4289296504 4289296504 4289307298 4294967295 4294967295 4294967295 4289302929 4289305242 4289305242 4294967295 4294967295 4294967295 4289299331 4289297018 4289297018 4289297018 4289294962 4293256677 4289295733 4289277743 4289273117 4290295992 4292072403 4289290593 4289297275 4289296504 4289296504 4289307298 4294967295 4294967295 4294967295 4289302929 4289305242 4289305242 4294967295 4294967295 4294967295 4289299331 4289297018 4289297018 4289297018 4289294962 4293256677 4289295733 4289277743 4289273117 4290295992 4292072403 4289290593 4289297275 4289296504 4289296504 4289307298 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4289299074 4289297018 4289297018 4289297018 4289299331 4294967295 4292203989 4289284425 4289283397 4294506744 4294967295 4289298560 4289297275 4289297275 4289296504 4289967027 4294967295 4289283140 4289289822 4289307812 4294967295 4289299845 4289291878 4289291878 4294967295 4289299074 4289297018 4289297018 4289297018 4289299331 4294967295 4292203989 4289284425 4289283397 4294506744 4294967295 4289298560 4289297275 4289297275 4289296504 4289967027 4294967295 4289283140 4289289822 4289307812 4294967295 4289299845 4289291878 4289291878 4294967295 4289299074 4289297018 4289297018 4289297018 4289299331 4294967295 4292203989 4289284425 4289283397 4294506744 4294967295 4289298560 4289297275 4289297275 4289296504 4289967027 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4289298046 4289299074 4289297018 4289297018 4289297018 4289295219 4289301644 4289297532 4289299074 4289297018 4289298560 4289307041 4289296504 4289297018 4289297018 4289297018 4289297789 4289284682 4289277486 4289276458 4289285453 4294506744 4289280056 4289276458 4289277486 4289297789 4289299074 4289297018 4289297018 4289297018 4289295219 4289301644 4289297532 4289299074 4289297018 4289298560 4289307041 4289296504 4289297018 4289297018 4289297018 4289297789 4289284682 4289277486 4289276458 4289285453 4294506744 4289280056 4289276458 4289277486 4289297789 4289299074 4289297018 4289297018 4289297018 4289295219 4289301644 4289297532 4289299074 4289297018 4289298560 4289307041 4289296504 4289297018 4289297018 4289297018 4289297789 4289284939 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4289232253 4294967295 4289233281 4289233281 4289229426 4294967295 4289240734 4289230711 4289231739 4289231739 4289228398 4290756543 4294967295 4289229426 4289229426 4289967027 4294967295 4289217347 4289214520 4289214520 4289214520 4289214520 4289214520 4289214520 4289211950 4289231996 4294967295 4289233281 4289233281 4289229426 4294967295 4289240734 4289230711 4289231739 4289231739 4289228398 4290756543 4294967295 4289229426 4289229426 4289967027 4294967295 4289217347 4289214520 4289214520 4289214520 4289214520 4289214520 4289214520 4289211950 4289231996 4294967295 4289233281 4289233281 4289229426 4294967295 4289240734 4289230711 4289231739 4289231739 4289228398 4290756543 4294967295 4289229426 4289229426 4289967027 4294967295 4289217604 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4290230199 4289242019 4289229940 4294967295 4294967295 4294967295 4289233281 4289231225 4289231225 4289231225 4289228912 4289901234 4294967295 4294967295 4294967295 4289219917 4292006610 4289242019 4289208095 4289211950 4289216833 4289234052 4289214520 4289211950 4289207324 4290230199 4289242019 4289229940 4294967295 4294967295 4294967295 4289233281 4289231225 4289231225 4289231225 4289228912 4289901234 4294967295 4294967295 4294967295 4289219917 4292006610 4289242019 4289208095 4289211950 4289216833 4289234052 4289214520 4289211950 4289207324 4290230199 4289242019 4289229940 4294967295 4294967295 4294967295 4289233281 4289231225 4289231225 4289231225 4289228912 4289901234 4294967295 4294967295 4294967295 4289219917 4292006610 4289242019 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4289210922 4289210665 4289211950 4289223772 4294967295 4294967295 4294967295 4289233281 4289229169 4289229169 4289901234 4294967295 4294967295 4294967295 4289214263 4289211950 4289210665 4289214263 4289238935 4289217347 4289228398 4294967295 4289216833 4289226085 4289234052 4289210665 4289210665 4289211950 4289223772 4294967295 4294967295 4294967295 4289233281 4289229169 4289229169 4289901234 4294967295 4294967295 4294967295 4289214263 4289211950 4289210665 4289214263 4289238935 4289217347 4289228398 4294967295 4289216833 4289226085 4289234052 4289210665 4289210665 4289211950 4289223772 4294967295 4294967295 4294967295 4289233281 4289229169 4289229169 4289901234 4294967295 4294967295 4294967295 4289214263 4289211950 4289210665 4289214520 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4289211950 4289214263 4289211693 4289221973 4294967295 4289967027 4289967027 4289967027 4294967295 4294967295 4289440683 4289440683 4292861919 4294967295 4289214263 4289214263 4289214263 4289210665 4292006610 4294967295 4289237136 4289239449 4289240477 4294967295 4289234052 4289211693 4289214263 4289211693 4289221973 4294967295 4289967027 4289967027 4289967027 4294967295 4294967295 4289440683 4289440683 4292861919 4294967295 4289214263 4289214263 4289214263 4289210665 4292006610 4294967295 4289237136 4289239449 4289240477 4294967295 4289234052 4289211693 4289214263 4289211693 4289221973 4294967295 4289967027 4289967027 4289967027 4294967295 4294967295 4289440683 4289440683 4292861919 4294967295 4289214263 4289214263 4289214263 4289210922 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4289146157 4289148727 4289145129 4289156437 4289177254 4289164404 4289164404 4289164404 4294506744 4291611852 4289164404 4289164404 4289164404 4289703855 4289151040 4289146157 4289148727 4289146157 4289158236 4289171600 4289171600 4289171600 4289171600 4289374890 4289145900 4289145900 4289148727 4289145129 4289156437 4289177254 4289164404 4289164404 4289164404 4294506744 4291611852 4289164404 4289164404 4289164404 4289703855 4289151040 4289146157 4289148727 4289146157 4289158236 4289171600 4289171600 4289171600 4289171600 4289374890 4289145900 4289145900 4289148727 4289145129 4289156437 4289177254 4289164404 4289164404 4289164404 4294506744 4291611852 4289164404 4289164404 4289164404 4289703855 4289151040 4289146157 4289148727 4289146414 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4289173142 4289146157 4293256677 4294967295 4289171343 4289164404 4289168259 4289168259 4289155666 4289162605 4289168259 4289168259 4289160549 4291611852 4294967295 4289166203 4289148470 4294704123 4294967295 4289171600 4289171600 4289171600 4289171600 4289171600 4294967295 4289173142 4289146157 4293256677 4294967295 4289171343 4289164404 4289168259 4289168259 4289155666 4289162605 4289168259 4289168259 4289160549 4291611852 4294967295 4289166203 4289148470 4294704123 4294967295 4289171600 4289171600 4289171600 4289171600 4289171600 4294967295 4289173142 4289146157 4293256677 4294967295 4289171343 4289164404 4289168259 4289168259 4289155666 4289162605 4289168259 4289168259 4289160549 4291611852 4294967295 4289166203 4289148470 4294704123 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4289154124 4289148470 4289160292 4291217094 4289166460 4289164404 4289168259 4289166460 4293388263 4289967027 4289164404 4289164404 4289164404 4289171086 4289168259 4289150783 4289148470 4289160292 4290164406 4289171600 4289171600 4289171600 4289171600 4289171600 4289703855 4289153867 4289148470 4289160292 4291217094 4289166460 4289164404 4289168259 4289166460 4293388263 4289967027 4289164404 4289164404 4289164404 4289171086 4289168259 4289150783 4289148470 4289160292 4290164406 4289171600 4289171600 4289171600 4289171600 4289171600 4289703855 4289153867 4289148470 4289160292 4291217094 4289166460 4289164404 4289168259 4289166460 4293388263 4289967027 4289164404 4289164404 4289164404 4289171086 4289168259 4289150783 4289148470 4289160549 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4289148727 4289148470 4289141531 4289163890 4294967295 4289162348 4289162348 4290493371 4294967295 4294967295 4289173399 4289166203 4290493371 4294967295 4289145900 4289148470 4289148470 4289141531 4289165946 4294967295 4289171343 4289171343 4289171343 4294967295 4289148470 4289148470 4289148470 4289141531 4289163890 4294967295 4289162348 4289162348 4290493371 4294967295 4294967295 4289173399 4289166203 4290493371 4294967295 4289145900 4289148470 4289148470 4289141531 4289165946 4294967295 4289171343 4289171343 4289171343 4294967295 4289148470 4289148470 4289148470 4289141531 4289163890 4294967295 4289162348 4289162348 4290493371 4294967295 4294967295 4289173399 4289166203 4290493371 4294967295 4289145900 4289148470 4289148470 4289141788 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4289141788 4289148470 4289145900 4289153610 4294967295 4294967295 4294967295 4289170058 4290690750 4289164147 4290427578 4294967295 4294967295 4294967295 4289141531 4289148470 4289148470 4289144872 4292138196 4289638062 4289175969 4294967295 4289160035 4293256677 4289172885 4289141531 4289148470 4289145900 4289153610 4294967295 4294967295 4294967295 4289170058 4290690750 4289164147 4290427578 4294967295 4294967295 4294967295 4289141531 4289148470 4289148470 4289144872 4292138196 4289638062 4289175969 4294967295 4289160035 4293256677 4289172885 4289141531 4289148470 4289145900 4289153610 4294967295 4294967295 4294967295 4289170058 4290690750 4289164147 4290427578 4294967295 4294967295 4294967295 4289141531 4289148470 4289148470 4289145129 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4289098354 4289082677 4289085504 4294967295 4294967295 4294967295 4289109919 4289099896 4289097069 4289099125 4289097326 4292927712 4294967295 4294967295 4294309365 4289079850 4289092186 4289098097 4289080364 4289075995 4289090387 4293848814 4289080364 4289079336 4289082677 4289098097 4289082677 4289085504 4294967295 4294967295 4294967295 4289109919 4289099896 4289097069 4289099125 4289097326 4292927712 4294967295 4294967295 4294309365 4289079850 4289092186 4289098097 4289080364 4289075995 4289090387 4293848814 4289080364 4289079336 4289082677 4289098097 4289082677 4289085504 4294967295 4294967295 4294967295 4289109919 4289099896 4289097069 4289099125 4289097326 4292927712 4294967295 4294967295 4294309365 4289079850 4289092186 4289098354 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4292138196 4294967295 4289104779 4290624957 4290427578 4294967295 4289097583 4289099382 4289099382 4289099382 4289096555 4291151301 4294967295 4289108891 4290427578 4289108120 4294967295 4289100153 4289080364 4289082677 4289082677 4289082677 4289082677 4289082677 4289079079 4292138196 4294967295 4289104779 4290624957 4290427578 4294967295 4289097583 4289099382 4289099382 4289099382 4289096555 4291151301 4294967295 4289108891 4290427578 4289108120 4294967295 4289100153 4289080364 4289082677 4289082677 4289082677 4289082677 4289082677 4289079079 4292138196 4294967295 4289104779 4290624957 4290427578 4294967295 4289097583 4289099382 4289099382 4289099382 4289096555 4291151301 4294967295 4289108891 4290427578 4289108120 4294967295 4289100410 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4289088074 4289769648 4289099896 4289096555 4289099382 4290559164 4289097326 4289098868 4289101438 4289099639 4289096812 4289100153 4289103237 4289096555 4289096555 4289101181 4290559164 4289079850 4289082677 4289082677 4289084990 4289107349 4289080107 4289082677 4289080107 4289087817 4289769648 4289099896 4289096555 4289099382 4290559164 4289097326 4289098868 4289101438 4289099639 4289096812 4289100153 4289103237 4289096555 4289096555 4289101181 4290559164 4289079850 4289082677 4289082677 4289084990 4289107349 4289080107 4289082677 4289080107 4289087817 4289769648 4289099896 4289096555 4289099382 4290559164 4289097326 4289098868 4289101438 4289099639 4289096812 4289100153 4289103237 4289096555 4289096555 4289101181 4290559164 4289080107 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4289098868 4289099639 4289099639 4289098868 4289101438 4294967295 4290624957 4289094499 4289096812 4293848814 4294967295 4289097069 4289099382 4289099382 4289099382 4289108891 4294309365 4289075738 4289080107 4289107092 4294967295 4289084990 4289082420 4289087817 4294967295 4289098868 4289099639 4289099639 4289098868 4289101438 4294967295 4290624957 4289094499 4289096812 4293848814 4294967295 4289097069 4289099382 4289099382 4289099382 4289108891 4294309365 4289075738 4289080107 4289107092 4294967295 4289084990 4289082420 4289087817 4294967295 4289098868 4289099639 4289099639 4289098868 4289101438 4294967295 4290624957 4289094499 4289096812 4293848814 4294967295 4289097069 4289099382 4289099382 4289099382 4289108891 4294309365 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4289095784 4289099382 4289099382 4289096812 4292927712 4294967295 4290098613 4289080107 4289080107 4293848814 4294967295 4289099896 4289098868 4289099639 4289096812 4289108891 4294967295 4294704123 4294967295 4289105036 4291546059 4289105036 4294967295 4294967295 4294967295 4289095784 4289099382 4289099382 4289096812 4292927712 4294967295 4290098613 4289080107 4289080107 4293848814 4294967295 4289099896 4289098868 4289099639 4289096812 4289108891 4294967295 4294704123 4294967295 4289105036 4291546059 4289105036 4294967295 4294967295 4294967295 4289095784 4289099382 4289099382 4289096812 4292927712 4294967295 4290098613 4289080107 4289080107 4293848814 4294967295 4289099896 4289098868 4289099639 4289096812 4289108891 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4293848814 4289031533 4289034103 4289026650 4289016884 4289036416 4289024337 4289013286 4289013286 4289026136 4289019197 4289016884 4289032047 4289031276 4289037444 4294967295 4294967295 4294967295 4289835441 4289028706 4289028706 4289034617 4293388263 4294967295 4294967295 4293848814 4289031533 4289034103 4289026650 4289016884 4289036416 4289024337 4289013286 4289013286 4289026136 4289019197 4289016884 4289032047 4289031276 4289037444 4294967295 4294967295 4294967295 4289835441 4289028706 4289028706 4289034617 4293388263 4294967295 4294967295 4293848814 4289031533 4289034103 4289026650 4289016884 4289036416 4289024337 4289013286 4289013286 4289026136 4289019197 4289016884 4289032047 4289031276 4289037444 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4291085508 4292927712 4289044126 4294967295 4290032820 4289013286 4289010973 4289026136 4289019711 4289030762 4289019197 4289013286 4289014314 4294506744 4294967295 4289038472 4291085508 4291677645 4294967295 4289030762 4289036416 4289036416 4289028706 4290427578 4294967295 4291085508 4292927712 4289044126 4294967295 4290032820 4289013286 4289010973 4289026136 4289019711 4289030762 4289019197 4289013286 4289014314 4294506744 4294967295 4289038472 4291085508 4291677645 4294967295 4289030762 4289036416 4289036416 4289028706 4290427578 4294967295 4291085508 4292927712 4289044126 4294967295 4290032820 4289013286 4289010973 4289026136 4289019711 4289030762 4289019197 4289013286 4289014314 4294506744 4294967295 4289038472 4291085508 4291677645 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4289031276 4289031019 4289035902 4294967295 4292796126 4289018940 4289021253 4289043869 4289039757 4289243304 4289041299 4289024337 4289018940 4292796126 4293848814 4289031019 4289031019 4289029991 4292072403 4289034617 4289036416 4289036416 4289032561 4290361785 4291085508 4289031019 4289031019 4289035902 4294967295 4292796126 4289018940 4289021253 4289043869 4289039757 4289243304 4289041299 4289024337 4289018940 4292796126 4293848814 4289031019 4289031019 4289029991 4292072403 4289034617 4289036416 4289036416 4289032561 4290361785 4291085508 4289031019 4289031019 4289035902 4294967295 4292796126 4289018940 4289021253 4289043869 4289039757 4289243304 4289041299 4289024337 4289018940 4292796126 4293848814 4289031019 4289031019 4289030248 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4288968567 4288968310 4288968310 4288962656 4288948778 4288951091 4294309365 4288974221 4288974221 4288974221 4289309097 4291875024 4288947493 4288947493 4288965483 4288968053 4288968053 4288967282 4288967282 4293388263 4288964969 4288966768 4289243304 4292072403 4288963427 4288968310 4288968310 4288968310 4288962656 4288948778 4288951091 4294309365 4288974221 4288974221 4288974221 4289309097 4291875024 4288947493 4288948264 4288965483 4288968053 4288968053 4288967282 4288967282 4293388263 4288964969 4288966768 4289243304 4292072403 4288963427 4288968310 4288968310 4288968310 4288962656 4288948778 4288951091 4294309365 4288974221 4288974221 4288974221 4289309097 4291875024 4288947493 4288947493 4288965483 4288968053 4288968053 4288967539 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4288968053 4288967796 4288969852 4288960086 4288946208 4288948521 4288968567 4288973964 4288973964 4288973964 4288973964 4288953918 4288948521 4288948521 4288962913 4288969852 4288968310 4288967282 4288971651 4294967295 4293388263 4288958030 4294704123 4294967295 4288970109 4288967796 4288967796 4288969852 4288960086 4288946208 4288948521 4288968567 4288973964 4288973964 4288973964 4288973964 4288953918 4288948521 4288948521 4288962913 4288969852 4288968310 4288967282 4288971651 4294967295 4293388263 4288958030 4294704123 4294967295 4288970109 4288967796 4288967796 4288969852 4288960086 4288946208 4288948521 4288968567 4288973964 4288973964 4288973964 4288973964 4288953918 4288948521 4288948521 4288962913 4288969852 4288968310 4288967539 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4288968053 4288967796 4288967796 4293783021 4288970623 4288950834 4289967027 4288973964 4288973964 4288973964 4288978333 4288960343 4288956231 4288978847 4291085508 4288965226 4288968053 4288968053 4288967282 4290361785 4288968824 4288968824 4288968824 4290361785 4288970109 4288967796 4288967796 4288967796 4293783021 4288970623 4288950834 4289967027 4288973964 4288973964 4288973964 4288978333 4288960343 4288956231 4288978847 4291085508 4288965226 4288968053 4288968053 4288967282 4290361785 4288968824 4288968824 4288968824 4290361785 4288970109 4288967796 4288967796 4288967796 4293783021 4288970623 4288950834 4289967027 4288973964 4288973964 4288973964 4288978333 4288960343 4288956231 4288978847 4291085508 4288965226 4288968053 4288968310 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4288970109 4288969852 4288972422 4294967295 4294967295 4288950834 4288945180 4291875024 4288975506 4293322470 4288964712 4288945180 4288958287 4294967295 4294967295 4288966511 4288966511 4288977305 4294967295 4288968567 4288966511 4288970623 4288966511 4289177511 4294967295 4288969852 4288969852 4288972422 4294967295 4294967295 4288950834 4288945180 4291875024 4288975506 4293322470 4288964712 4288945180 4288958287 4294967295 4294967295 4288966511 4288966511 4288977305 4294967295 4288968567 4288966511 4288970623 4288966511 4289177511 4294967295 4288969852 4288969852 4288972422 4294967295 4294967295 4288950834 4288945180 4291875024 4288975506 4293322470 4288964712 4288945180 4288958287 4294967295 4294967295 4288966511 4288966511 4288977305 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4288965740 4288977305 4291875024 4288948264 4288948264 4288950834 4288948007 4288948007 4288953147 4288947493 4288947493 4293783021 4289638062 4288972422 4294967295 4294967295 4294967295 4288968567 4288966511 4288966511 4288966511 4288979875 4294967295 4294967295 4294967295 4288965740 4288977305 4291875024 4288948264 4288948264 4288950834 4288948007 4288948007 4288953147 4288947493 4288947493 4293783021 4289638062 4288972422 4294967295 4294967295 4294967295 4288968567 4288966511 4288966511 4288966511 4288979875 4294967295 4294967295 4294967295 4288965740 4288977305 4291875024 4288948264 4288948264 4288950834 4288948007 4288948007 4288953147 4288947493 4288947493 4293783021 4289638062 4288972422 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4288904316 4288902003 4288902003 4288902003 4288899690 4293125091 4288900461 4288882728 4288878873 4289967027 4291875024 4288895578 4288902260 4288901489 4288901489 4288912540 4294967295 4294967295 4294967295 4288907914 4288910484 4288910484 4294967295 4294967295 4294967295 4288904316 4288902003 4288902003 4288902003 4288899690 4293125091 4288900461 4288882728 4288878873 4289967027 4291875024 4288895578 4288902260 4288901489 4288901489 4288912540 4294967295 4294967295 4294967295 4288907914 4288910484 4288910484 4294967295 4294967295 4294967295 4288904316 4288902003 4288902003 4288902003 4288899690 4293125091 4288900461 4288882728 4288878873 4289967027 4291875024 4288895578 4288902260 4288901489 4288901489 4288912540 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4288904059 4288901746 4288901746 4288901746 4288904316 4294967295 4292006610 4288889153 4288888125 4294506744 4294967295 4288903545 4288902003 4288902003 4288901232 4289638062 4294967295 4288887868 4288894293 4288913054 4294967295 4288904830 4288896606 4288896606 4294967295 4288904059 4288901746 4288901746 4288901746 4288904316 4294967295 4292006610 4288889153 4288888125 4294506744 4294967295 4288903545 4288902003 4288902003 4288901232 4289638062 4294967295 4288887868 4288894293 4288913054 4294967295 4288904830 4288896606 4288896606 4294967295 4288904059 4288901746 4288901746 4288901746 4288904316 4294967295 4292006610 4288889153 4288888125 4294506744 4294967295 4288903545 4288902003 4288902003 4288901232 4289638062 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4288902774 4288904059 4288901746 4288901746 4288901746 4288899947 4288906629 4288902260 4288904059 4288901746 4288903545 4288912283 4288901232 4288901746 4288901746 4288901746 4288902517 4288889410 4288882728 4288881700 4288890181 4294506744 4288885041 4288881700 4288882728 4288902517 4288904059 4288901746 4288901746 4288901746 4288899947 4288906629 4288902260 4288904059 4288901746 4288903545 4288912283 4288901232 4288901746 4288901746 4288901746 4288902517 4288889410 4288882728 4288881700 4288890181 4294506744 4288885041 4288881700 4288882728 4288902517 4288904059 4288901746 4288901746 4288901746 4288899947 4288906629 4288902260 4288904059 4288901746 4288903545 4288912283 4288901232 4288901746 4288901746 4288901746 4288902517 4288889667 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4288902774 4294967295 4288903802 4288903802 4288899690 4294967295 4288911512 4288901232 4288902260 4288902260 4288898662 4290493371 4294967295 4288899690 4288899690 4289638062 4294967295 4288887611 4288885041 4288885041 4288885041 4288885041 4288885041 4288885041 4288882471 4288902517 4294967295 4288903802 4288903802 4288899690 4294967295 4288911512 4288901232 4288902260 4288902260 4288898662 4290493371 4294967295 4288899690 4288899690 4289638062 4294967295 4288887611 4288885041 4288885041 4288885041 4288885041 4288885041 4288885041 4288882471 4288902517 4294967295 4288903802 4288903802 4288899690 4294967295 4288911512 4288901232 4288902260 4288902260 4288898662 4290493371 4294967295 4288899690 4288899690 4289638062 4294967295 4288887868 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4289901234 4288847261 4288834668 4294967295 4294967295 4294967295 4288838266 4288835953 4288835953 4288835953 4288833640 4289572269 4294967295 4294967295 4294967295 4288824388 4291809231 4288847261 4288813594 4288816935 4288821561 4288839037 4288819248 4288816935 4288813080 4289901234 4288847261 4288834668 4294967295 4294967295 4294967295 4288838266 4288835953 4288835953 4288835953 4288833640 4289572269 4294967295 4294967295 4294967295 4288824388 4291809231 4288847261 4288813594 4288816935 4288821561 4288839037 4288819248 4288816935 4288813080 4289901234 4288847261 4288834668 4294967295 4294967295 4294967295 4288838266 4288835953 4288835953 4288835953 4288833640 4289572269 4294967295 4294967295 4294967295 4288824388 4291809231 4288847261 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4288816164 4288815907 4288816935 4288828500 4294967295 4294967295 4294967295 4288838266 4288833897 4288833897 4289572269 4294967295 4294967295 4294967295 4288819248 4288816935 4288815907 4288819248 4288843920 4288822075 4288833126 4294967295 4288821561 4288830813 4288839037 4288815907 4288815907 4288816935 4288828500 4294967295 4294967295 4294967295 4288838266 4288833897 4288833897 4289572269 4294967295 4294967295 4294967295 4288819248 4288816935 4288815907 4288819248 4288843920 4288822075 4288833126 4294967295 4288821561 4288830813 4288839037 4288815907 4288815907 4288816935 4288828500 4294967295 4294967295 4294967295 4288838266 4288833897 4288833897 4289572269 4294967295 4294967295 4294967295 4288819248 4288816935 4288815907 4288819505 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4288817192 4288819248 4288816935 4288826701 4294967295 4289638062 4289638062 4289638062 4294967295 4294967295 4289111718 4289111718 4292730333 4294967295 4288819248 4288819248 4288819248 4288815907 4291809231 4294967295 4288842378 4288844691 4288845719 4294967295 4288838780 4288816935 4288819248 4288816935 4288826701 4294967295 4289638062 4289638062 4289638062 4294967295 4294967295 4289111718 4289111718 4292730333 4294967295 4288819248 4288819248 4288819248 4288815907 4291809231 4294967295 4288842378 4288844691 4288845719 4294967295 4288838780 4288816935 4288819248 4288816935 4288826701 4294967295 4289638062 4289638062 4289638062 4294967295 4294967295 4289111718 4289111718 4292730333 4294967295 4288819248 4288819248 4288819248 4288816164 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4288816678 4288818991 4288815907 4288826701 4288848289 4288834925 4288834925 4288834925 4294506744 4291348680 4288834925 4288834925 4288834925 4289374890 4288821304 4288816678 4288818991 4288816678 4288828500 4288842121 4288842121 4288842121 4288842121 4288980132 4288816421 4288816421 4288818991 4288815907 4288826701 4288848289 4288834925 4288834925 4288834925 4294506744 4291348680 4288834925 4288834925 4288834925 4289374890 4288821304 4288816678 4288818991 4288816678 4288828500 4288842121 4288842121 4288842121 4288842121 4288980132 4288816421 4288816421 4288818991 4288815907 4288826701 4288848289 4288834925 4288834925 4288834925 4294506744 4291348680 4288834925 4288834925 4288834925 4289374890 4288821304 4288816678 4288818991 4288816935 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4288778384 4288751142 4293125091 4294967295 4288776328 4288769132 4288773244 4288773244 4288760394 4288767333 4288773244 4288773244 4288765277 4291348680 4294967295 4288770931 4288753455 4294638330 4294967295 4288776585 4288776585 4288776585 4288776585 4288776585 4294967295 4288778384 4288751142 4293125091 4294967295 4288776328 4288769132 4288773244 4288773244 4288760394 4288767333 4288773244 4288773244 4288765277 4291348680 4294967295 4288770931 4288753455 4294638330 4294967295 4288776585 4288776585 4288776585 4288776585 4288776585 4294967295 4288778384 4288751142 4293125091 4294967295 4288776328 4288769132 4288773244 4288773244 4288760394 4288767333 4288773244 4288773244 4288765277 4291348680 4294967295 4288770931 4288753455 4294638330 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4288758852 4288753455 4288765020 4290953922 4288771188 4288769132 4288773244 4288771188 4293322470 4289572269 4288769132 4288769132 4288769132 4288776071 4288773244 4288755511 4288753455 4288765020 4289835441 4288776585 4288776585 4288776585 4288776585 4288776585 4289374890 4288758595 4288753455 4288765020 4290953922 4288771188 4288769132 4288773244 4288771188 4293322470 4289572269 4288769132 4288769132 4288769132 4288776071 4288773244 4288755511 4288753455 4288765020 4289835441 4288776585 4288776585 4288776585 4288776585 4288776585 4289374890 4288758595 4288753455 4288765020 4290953922 4288771188 4288769132 4288773244 4288771188 4293322470 4289572269 4288769132 4288769132 4288769132 4288776071 4288773244 4288755511 4288753455 4288765277 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4288753455 4288753198 4288747287 4288768618 4294967295 4288767076 4288767076 4290164406 4294967295 4294967295 4288778641 4288771188 4290164406 4294967295 4288751142 4288753198 4288753198 4288747287 4288770931 4294967295 4288776585 4288776585 4288776585 4294967295 4288753198 4288753198 4288753198 4288747287 4288768618 4294967295 4288767076 4288767076 4290164406 4294967295 4294967295 4288778641 4288771188 4290164406 4294967295 4288751142 4288753198 4288753198 4288747287 4288770931 4294967295 4288776585 4288776585 4288776585 4294967295 4288753198 4288753198 4288753198 4288747287 4288768618 4294967295 4288767076 4288767076 4290164406 4294967295 4294967295 4288778641 4288771188 4290164406 4294967295 4288751142 4288753198 4288753198 4288747544 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4288747287 4288753198 4288750885 4288758338 4294967295 4294967295 4294967295 4288774786 4290361785 4288768875 4290098613 4294967295 4294967295 4294967295 4288747030 4288753198 4288753198 4288749857 4291940817 4289309097 4288781211 4294967295 4288764763 4293125091 4288778127 4288747030 4288753198 4288750885 4288758338 4294967295 4294967295 4294967295 4288774786 4290361785 4288768875 4290098613 4294967295 4294967295 4294967295 4288747030 4288753198 4288753198 4288749857 4291940817 4289309097 4288781211 4294967295 4288764763 4293125091 4288778127 4288747030 4288753198 4288750885 4288758338 4294967295 4294967295 4294967295 4288774786 4290361785 4288768875 4290098613 4294967295 4294967295 4294967295 4288747030 4288753198 4288753198 4288750114 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4288768618 4288753198 4288755768 4294967295 4294967295 4294967295 4288780697 4288770160 4288767333 4288769389 4288767590 4292796126 4294967295 4294967295 4294243572 4288750628 4288762450 4288768361 4288750885 4288747030 4288760651 4293783021 4288750885 4288749857 4288753198 4288768361 4288753198 4288755768 4294967295 4294967295 4294967295 4288780697 4288770160 4288767333 4288769389 4288767590 4292796126 4294967295 4294967295 4294243572 4288750628 4288762450 4288768361 4288750885 4288747030 4288760651 4293783021 4288750885 4288749857 4288753198 4288768361 4288753198 4288755768 4294967295 4294967295 4294967295 4288780697 4288770160 4288767333 4288769389 4288767590 4292796126 4294967295 4294967295 4294243572 4288750628 4288762450 4288768618 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4291940817 4294967295 4288709764 4290361785 4290098613 4294967295 4288702311 4288704367 4288704367 4288704367 4288701283 4290888129 4294967295 4288714133 4290098613 4288713105 4294967295 4288705138 4288685349 4288687662 4288687662 4288687662 4288687662 4288687662 4288684321 4291940817 4294967295 4288709764 4290361785 4290098613 4294967295 4288702311 4288704367 4288704367 4288704367 4288701283 4290888129 4294967295 4288714133 4290098613 4288713105 4294967295 4288705138 4288685349 4288687662 4288687662 4288687662 4288687662 4288687662 4288684321 4291940817 4294967295 4288709764 4290361785 4290098613 4294967295 4288702311 4288704367 4288704367 4288704367 4288701283 4290888129 4294967295 4288714133 4290098613 4288713105 4294967295 4288705395 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4288692802 4289440683 4288704624 4288701283 4288704110 4290295992 4288702311 4288703853 4288706423 4288704367 4288701797 4288704881 4288708222 4288701283 4288701283 4288705909 4290295992 4288684835 4288687405 4288687405 4288689718 4288712334 4288685349 4288687405 4288685349 4288692545 4289440683 4288704624 4288701283 4288704110 4290295992 4288702311 4288703853 4288706423 4288704367 4288701797 4288704881 4288708222 4288701283 4288701283 4288705909 4290295992 4288684835 4288687405 4288687405 4288689718 4288712334 4288685349 4288687405 4288685349 4288692545 4289440683 4288704624 4288701283 4288704110 4290295992 4288702311 4288703853 4288706423 4288704367 4288701797 4288704881 4288708222 4288701283 4288701283 4288705909 4290295992 4288685092 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4288703596 4288704367 4288704367 4288703596 4288706423 4294967295 4290295992 4288699227 4288701540 4293783021 4294967295 4288701797 4288704110 4288704110 4288704110 4288713876 4294243572 4288681494 4288685092 4288712334 4294967295 4288689461 4288687405 4288692545 4294967295 4288703596 4288704367 4288704367 4288703596 4288706423 4294967295 4290295992 4288699227 4288701540 4293783021 4294967295 4288701797 4288704110 4288704110 4288704110 4288713876 4294243572 4288681494 4288685092 4288712334 4294967295 4288689461 4288687405 4288692545 4294967295 4288703596 4288704367 4288704367 4288703596 4288706423 4294967295 4290295992 4288699227 4288701540 4293783021 4294967295 4288701797 4288704110 4288704110 4288704110 4288713876 4294243572 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4288700512 4288704367 4288704367 4288701540 4292796126 4294967295 4289769648 4288685092 4288685092 4293717228 4294967295 4288704881 4288703596 4288704624 4288701540 4288713876 4294967295 4294638330 4294967295 4288710021 4291282887 4288710021 4294967295 4294967295 4294967295 4288700512 4288704367 4288704367 4288701540 4292796126 4294967295 4289769648 4288685092 4288685092 4293717228 4294967295 4288704881 4288703596 4288704624 4288701540 4288713876 4294967295 4294638330 4294967295 4288710021 4291282887 4288710021 4294967295 4294967295 4294967295 4288700512 4288704367 4288704367 4288701540 4292796126 4294967295 4289769648 4288685092 4288685092 4293717228 4294967295 4288704881 4288703596 4288704624 4288701540 4288713876 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4293717228 4288701797 4288704624 4288696914 4288687148 4288706937 4288694601 4288684064 4288684064 4288696400 4288689461 4288687148 4288702311 4288701540 4288707965 4294967295 4294967295 4294967295 4289506476 4288698970 4288698970 4288705138 4293256677 4294967295 4294967295 4293717228 4288701797 4288704624 4288696914 4288687148 4288706937 4288694601 4288684064 4288684064 4288696400 4288689461 4288687148 4288702311 4288701540 4288707965 4294967295 4294967295 4294967295 4289506476 4288698970 4288698970 4288705138 4293256677 4294967295 4294967295 4293717228 4288701797 4288704624 4288696914 4288687148 4288706937 4288694601 4288684064 4288684064 4288696400 4288689461 4288687148 4288702311 4288701540 4288707965 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4290822336 4292730333 4288649368 4294967295 4289703855 4288618528 4288616472 4288630864 4288624439 4288635490 4288623925 4288618528 4288619299 4294506744 4294967295 4288643457 4290822336 4291480266 4294967295 4288635490 4288641401 4288641401 4288633434 4290098613 4294967295 4290822336 4292730333 4288649368 4294967295 4289703855 4288618528 4288616472 4288630864 4288624439 4288635490 4288623925 4288618528 4288619299 4294506744 4294967295 4288643457 4290822336 4291480266 4294967295 4288635490 4288641401 4288641401 4288633434 4290098613 4294967295 4290822336 4292730333 4288649368 4294967295 4289703855 4288618528 4288616472 4288630864 4288624439 4288635490 4288623925 4288618528 4288619299 4294506744 4294967295 4288643457 4290822336 4291480266 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4288636004 4288635747 4288640887 4294967295 4292598747 4288623668 4288625724 4288649111 4288644742 4288914339 4288646541 4288629065 4288623668 4292598747 4293717228 4288635747 4288635747 4288634719 4291875024 4288639345 4288641401 4288641401 4288637289 4290098613 4290822336 4288635747 4288635747 4288640887 4294967295 4292598747 4288623668 4288625724 4288649111 4288644742 4288914339 4288646541 4288629065 4288623668 4292598747 4293717228 4288635747 4288635747 4288634719 4291875024 4288639345 4288641401 4288641401 4288637289 4290098613 4290822336 4288635747 4288635747 4288640887 4294967295 4292598747 4288623668 4288625724 4288649111 4288644742 4288914339 4288646541 4288629065 4288623668 4292598747 4293717228 4288635747 4288635747 4288634976 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4288639088 4288638831 4288638831 4288632920 4288619299 4288621612 4294243572 4288644742 4288644742 4288644742 4288980132 4291677645 4288618271 4288618271 4288635747 4288638574 4288638574 4288637803 4288637803 4293256677 4288635233 4288637289 4288914339 4291875024 4288633691 4288638831 4288638831 4288638831 4288632920 4288619299 4288621612 4294243572 4288644742 4288644742 4288644742 4288980132 4291677645 4288618271 4288619042 4288635747 4288638574 4288638574 4288637803 4288637803 4293256677 4288635233 4288637289 4288914339 4291875024 4288633691 4288638831 4288638831 4288638831 4288632920 4288619299 4288621612 4294243572 4288644742 4288644742 4288644742 4288980132 4291677645 4288618271 4288618271 4288635747 4288638574 4288638574 4288638060 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4288638317 4288638060 4288640373 4288630350 4288617243 4288619299 4288638831 4288644742 4288644742 4288644742 4288644742 4288624182 4288619299 4288619299 4288633177 4288640373 4288638574 4288637803 4288642172 4294967295 4293256677 4288628294 4294638330 4294967295 4288640630 4288638060 4288638060 4288640373 4288630350 4288617243 4288619299 4288638831 4288644742 4288644742 4288644742 4288644742 4288624182 4288619299 4288619299 4288633177 4288640373 4288638574 4288637803 4288642172 4294967295 4293256677 4288628294 4294638330 4294967295 4288640630 4288638060 4288638060 4288640373 4288630350 4288617243 4288619299 4288638831 4288644742 4288644742 4288644742 4288644742 4288624182 4288619299 4288619299 4288633177 4288640373 4288638574 4288638060 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4288572781 4288572524 4288572524 4293717228 4288575608 4288555819 4289703855 4288578949 4288578949 4288578949 4288583575 4288565071 4288560959 4288584089 4290822336 4288569954 4288572781 4288572781 4288572010 4290032820 4288573552 4288573552 4288573552 4290032820 4288575094 4288572524 4288572524 4288572524 4293717228 4288575608 4288555819 4289703855 4288578949 4288578949 4288578949 4288583575 4288565071 4288560959 4288584089 4290822336 4288569954 4288572781 4288572781 4288572010 4290032820 4288573552 4288573552 4288573552 4290032820 4288575094 4288572524 4288572524 4288572524 4293717228 4288575608 4288555819 4289703855 4288578949 4288578949 4288578949 4288583575 4288565071 4288560959 4288584089 4290822336 4288569954 4288572781 4288573038 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4093640703 4294967295 4294967295 4294967295 4294967295 4294967295 4288904316 4288574837 4288577407 4294967295 4294967295 4288555819 4288550679 4291677645 4288580748 4293256677 4288569440 4288550679 4288563272 4294967295 4294967295 4288571496 4288571496 4288582547 4294967295 4288573552 4288571496 4288575608 4288571496 4288848546 4294967295 4288574837 4288574837 4288577407 4294967295 4294967295 4288555819 4288550679 4291677645 4288580748 4293256677 4288569440 4288550679 4288563272 4294967295 4294967295 4288571496 4288571496 4288582547 4294967295 4288573552 4288571496 4288575608 4288571496 4288848546 4294967295 4288574837 4288574837 4288577407 4294967295 4294967295 4288555819 4288550679 4291677645 4288580748 4293256677 4288569440 4288550679 4288563272 4294967295 4294967295 4288571496 4288571496 4288911769 4294967295 4294967295 4294967295 4294967295 4294967295 4093640703 3741319167 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4288570725 4288582290 4291677645 4288553506 4288553506 4288555562 4288553249 4288553249 4288557875 4288552478 4288552478 4293717228 4289309097 4288577407 4294967295 4294967295 4294967295 4288573295 4288571496 4288571496 4288571496 4288585117 4294967295 4294967295 4294967295 4288570725 4288582290 4291677645 4288553506 4288553506 4288555562 4288553249 4288553249 4288557875 4288552478 4288552478 4293717228 4289309097 4288577407 4294967295 4294967295 4294967295 4288573295 4288571496 4288571496 4288571496 4288585117 4294967295 4294967295 4294967295 4288570725 4288582290 4291677645 4288553506 4288553506 4288555562 4288553249 4288553249 4288557875 4288552478 4288552478 4293717228 4289309097 4288577407 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 3741319167 2986344447 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4288574837 4288572267 4288572267 4288572267 4288569954 4293059298 4288570725 4288553506 4288549908 4289638062 4291677645 4288565842 4288572524 4288571753 4288571753 4288583318 4294967295 4294967295 4294967295 4288578692 4288581005 4288581005 4294967295 4294967295 4294967295 4288574837 4288572267 4288572267 4288572267 4288569954 4293059298 4288570725 4288553506 4288549908 4289638062 4291677645 4288565842 4288572524 4288571753 4288571753 4288583318 4294967295 4294967295 4294967295 4288578692 4288581005 4288581005 4294967295 4294967295 4294967295 4288574837 4288572267 4288572267 4288572267 4288569954 4293059298 4288570725 4288553506 4288549908 4289638062 4291677645 4288565842 4288572524 4288571753 4288571753 4288583318 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 2986344447 1778384895 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4289760910 4288572267 4288572267 4288572267 4288574837 4294967295 4291809231 4288559417 4288558389 4294440951 4294967295 4288574066 4288572524 4288572524 4288571753 4289309097 4294967295 4288558132 4288564814 4288583832 4294967295 4288575351 4288566870 4288566870 4294967295 4288574580 4288572267 4288572267 4288572267 4288574837 4294967295 4291809231 4288559417 4288558389 4294440951 4294967295 4288574066 4288572524 4288572524 4288571753 4289309097 4294967295 4288558132 4288564814 4288583832 4294967295 4288575351 4288566870 4288566870 4294967295 4288574580 4288572267 4288572267 4288572267 4288574837 4294967295 4291809231 4288559417 4288558389 4294440951 4294967295 4288574066 4288572524 4288572524 4288571753 4290361785 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 1778384895 419430399 4244635647 4294967295 4294967295 4294967295 4294967295 4294967295 4293385693 4288506731 4288506731 4288506731 4288504932 4288511614 4288507245 4288509044 4288506731 4288508530 4288517782 4288506217 4288506731 4288506731 4288506731 4288507502 4288494138 4288487713 4288486942 4288494909 4294440951 4288490026 4288486942 4288487713 4288507502 4288509044 4288506731 4288506731 4288506731 4288504932 4288511614 4288507245 4288509044 4288506731 4288508530 4288517782 4288506217 4288506731 4288506731 4288506731 4288507502 4288494138 4288487713 4288486942 4288494909 4294440951 4288490026 4288486942 4288487713 4288507502 4288509044 4288506731 4288506731 4288506731 4288504932 4288511614 4288507245 4288509044 4288506731 4288508530 4288517782 4288506217 4288506731 4288506731 4288506731 4293385436 4294967295 4294967295 4294967295 4294967295 4294967295 4244635647 419430399 16777215 2583691263 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4293451743 4289563274 4288504675 4294967295 4288516754 4288506217 4288507245 4288507245 4288503647 4290164406 4294967295 4288504675 4288504675 4289309097 4294967295 4288492596 4288489769 4288489769 4288489769 4288489769 4288489769 4288489769 4288487713 4288507502 4294967295 4288508787 4288508787 4288504675 4294967295 4288516754 4288506217 4288507245 4288507245 4288503647 4290164406 4294967295 4288504675 4288504675 4289309097 4294967295 4288492596 4288489769 4288489769 4288489769 4288489769 4288489769 4288489769 4288487713 4288507502 4294967295 4288508787 4288508787 4288504675 4294967295 4288516754 4288506217 4288507245 4288507245 4288503647 4290164406 4294967295 4288504675 4289559933 4293651435 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 2583691263 16777215 16777215 469762047 4093640703 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4288904316 4288506731 4288506731 4288506731 4288504418 4289309097 4294967295 4294967295 4294967295 4288495166 4291611852 4288518039 4288485143 4288487970 4288492339 4288509815 4288490026 4288487970 4288484372 4289572269 4288518039 4288505446 4294967295 4294967295 4294967295 4288509044 4288506731 4288506731 4288506731 4288504418 4289309097 4294967295 4294967295 4294967295 4288495166 4291611852 4288518039 4288485143 4288487970 4288492339 4288509815 4288490026 4288487970 4288484372 4289572269 4288518039 4288505446 4294967295 4294967295 4294967295 4288509044 4288506731 4288506731 4288506731 4288504418 4289638062 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4093640703 469762047 16777215 16777215 16777215 1728053247 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 1728053247 16777215 16777215 16777215 16777215 16777215 2533359615 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 2533359615 16777215 16777215 16777215 16777215 16777215 16777215 67108863 2483027967 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 2483027967 67108863 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 1778384895 4143972351 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4143972351 1778384895 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 570425343 2785017855 4244635647 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4244635647 2785017855 570425343 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215 369098751 1627389951 2986344447 3439329279 4043309055 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4294967295 4043309055 3439329279 2986344447 1627389951 369098751 16777215 16777215 16777215 16777215 16777215 16777215 16777215 16777215)) +] + +{ #category : #'instance creation' } +MGCardElement class >> inASpace [ + "waiting for Pharo 90 to extend the inspector" + + | space card | + space := BlSpace new. + card := MGCardElement new. + space addChild: card. + space show. + { space . card } inspect +] + +{ #category : #'visual properties' } +MGCardElement >> backgroundPaint [ + "Return a BlPaint that should be used as a background (fill) + of both back and face sides of the card. Color is polymorphic + with BlPaint and therefore can be used too." + + ^ Color pink +] + +{ #category : #accessing } +MGCardElement >> card [ + "Return a card model assigned to this card element" + + ^ card +] + +{ #category : #accessing } +MGCardElement >> card: aCardModel [ + "Attach a card model and subscribe to its announcements. + aCardModel must not be nil" + + card := aCardModel. + + card announcer when: MGCardFlippedAnnouncement send: #onFlipped to: self. + card announcer when: MGCardDisappearAnnouncement send: #onDisappear to: self +] + +{ #category : #'visual properties' } +MGCardElement >> cornerRadius [ + "Return a number representing a corner radius of the card element" + + ^ 12 +] + +{ #category : #drawing } +MGCardElement >> drawOnSpartaCanvas1: aCanvas [ + + aCanvas fill + paint: self backgroundPaint; + path: self boundsInLocal; + draw +] + +{ #category : #drawing } +MGCardElement >> drawOnSpartaCanvas: aCanvas [ + aCanvas fill + paint: self backgroundPaint; + path: (aCanvas shape ellipse: self boundsInLocal); + draw + +] + +{ #category : #initialization } +MGCardElement >> initialize [ + + super initialize. + self size: 80@80. + self card: (MGCard new symbol: $a) +] + +{ #category : #'announcement - handling' } +MGCardElement >> onDisappear [ + | vanish enlarge minimize disappear | + + "when two cards match we want them to enlarge a bit to get player's attention" + enlarge := BlTransformAnimation scale: 1.15 @ 1.15. + enlarge + absolute; + easing: BlEasing bounceOut; + duration: 0.5 seconds. + + "vanish animation manipulates opacity to make element transparent" + vanish := BlOpacityAnimation new + opacity: 0; + duration: 0.35 seconds. + + "minimization animation changes card's scale to a tiny value" + minimize := BlTransformAnimation scale: 0.01 @ 0.01. + minimize + absolute; + easing: BlEasing linear; + duration: 0.35 seconds. + + "disappearing animation makes card transparent and minimizes until it becomes invisible" + disappear := BlParallelAnimation with: { vanish . minimize }. + + "final animation consists of two sequential animations: enlarge and disappear" + self addAnimation: (BlSequentialAnimation with: { enlarge. disappear }) +] + +{ #category : #'announcement - handling' } +MGCardElement >> onFlipped [ + "Is sent after the card is flipped in the model" + + self card isFlipped + ifTrue: [ self onFlippedFace ] + ifFalse: [ self onFlippedBack ] +] + +{ #category : #'announcement - handling' } +MGCardElement >> onFlippedBack [ + | animation | + + animation := BlTransformAnimation scale: 1@1. + animation + absolute; + easing: BlEasing bounceOut; + duration: 0.35 seconds. + + self addAnimation: animation. +] + +{ #category : #'announcement - handling' } +MGCardElement >> onFlippedFace [ + | animation | + + animation := BlTransformAnimation scale: 0.85 @ 0.85. + animation + absolute; + easing: BlQuinticInterpolator default; + duration: 0.3 seconds. + + self addAnimation: animation. +] diff --git a/src/Bloc-Memory/MGCardFlippedAnnouncement.class.st b/src/Bloc-Memory/MGCardFlippedAnnouncement.class.st new file mode 100644 index 0000000..eb9ee00 --- /dev/null +++ b/src/Bloc-Memory/MGCardFlippedAnnouncement.class.st @@ -0,0 +1,8 @@ +" +Is sent by ==MgdCardModel== after the card is flipped +" +Class { + #name : #MGCardFlippedAnnouncement, + #superclass : #Announcement, + #category : #'Bloc-Memory-Events' +} diff --git a/src/Bloc-Memory/MGGame.class.st b/src/Bloc-Memory/MGGame.class.st new file mode 100644 index 0000000..389dbe2 --- /dev/null +++ b/src/Bloc-Memory/MGGame.class.st @@ -0,0 +1,158 @@ +" +I am a memory game model +" +Class { + #name : #MGGame, + #superclass : #Object, + #instVars : [ + 'availableCards', + 'chosenCards' + ], + #category : #'Bloc-Memory-Model' +} + +{ #category : #factory } +MGGame class >> withChinese [ + ^ self new initializeForSymbols: '为从公家里地个时' +] + +{ #category : #factory } +MGGame class >> withEmoji [ + ^ self new initializeForSymbols: '💰🏡🎅🍪🍕🚀😸🙈' +] + +{ #category : #factory } +MGGame class >> withNumbers [ + ^ self new initializeForSymbols: '12345678' +] + +{ #category : #adding } +MGGame >> addCard: aCard [ + "Add card to the list of available cards" + + availableCards add: aCard +] + +{ #category : #accessing } +MGGame >> availableCards [ + + ^ availableCards +] + +{ #category : #accessing } +MGGame >> cardsCount [ + "Return how many cards there should be." + + ^ self gridSize * self gridSize +] + +{ #category : #actions } +MGGame >> chooseCard: aCard [ + "This is the main logic of the game. + The user pick a card, if this is a new one it is added to the chosen ones, + then flipped. At this point the game check if all the cards have been chosen and + if they are good, remove them. + Else the cards are flipped back and remove from the chosen list." + + (self chosenCards includes: aCard) + ifTrue: [ ^ self ]. + self chosenCards add: aCard. + aCard flip. + self shouldCompleteStep + ifTrue: [ ^ self completeStep ]. + self shouldResetStep + ifTrue: [ self resetStep ] +] + +{ #category : #testing } +MGGame >> chosenCardMatch [ + "Return whether the chosen cards match." + "The implementation is handling the fact that we could want to have a game where more than two matches are needed e.g., three cards of the same symbol." + + | firstCard | + firstCard := self chosenCards first. + ^ self chosenCards allSatisfy: [ :aCard | + aCard isFlipped and: [ firstCard symbol = aCard symbol ] ] +] + +{ #category : #accessing } +MGGame >> chosenCards [ + ^ chosenCards +] + +{ #category : #actions } +MGGame >> completeStep [ + "The player found the same cards so the step is complete. The cards should be removed from the board." + + self chosenCards + do: [ :aCard | aCard disappear ]; + removeAll. +] + +{ #category : #accessing } +MGGame >> gridSize [ + "Return grid size, total amount of card is gridSize^2" + + ^ 4 +] + +{ #category : #initialization } +MGGame >> initialize [ + super initialize. + + availableCards := OrderedCollection new. + chosenCards := OrderedCollection new +] + +{ #category : #initialization } +MGGame >> initializeForSymbols: aCollectionOfCharacters [ + + "Initialize game model with the cards that are represented by character symbols taken from a given + collection of symbols. + Note, amount of characters must correspond to amount of possible card combinations + which is in fact = (total card count / how many card to match). + So, if grid size is 4, then total card count is 4^2 = 16. If player should match 2 cards, + then collection size must be 16 / 2 = 8" + + aCollectionOfCharacters size = (self cardsCount / self matchesCount) + ifFalse: [ self error: 'Amount of characters must be equal to possible all combinations' ]. + + availableCards := (aCollectionOfCharacters asArray + collect: [ :aSymbol | + (1 to: self matchesCount) collect: [ :i | + MGCard new symbol: aSymbol ] ] ) flattened shuffled asOrderedCollection +] + +{ #category : #accessing } +MGGame >> matchesCount [ + "How many chosen cards should match to disappear" + + ^ 2 +] + +{ #category : #actions } +MGGame >> resetStep [ + "" + + | lastCard | + lastCard := self chosenCards last. + self chosenCards + allButLastDo: [ :aCard | aCard flip ]; + removeAll; + add: lastCard +] + +{ #category : #testing } +MGGame >> shouldCompleteStep [ + "Return true if current step should be completed, false otherwise. + According to game rules step is done when all chosen cards match + and their amount corresponds to a specific number (#matchesCount)" + + ^ self chosenCards size = self matchesCount + and: [ self chosenCardMatch ] +] + +{ #category : #testing } +MGGame >> shouldResetStep [ + ^ self chosenCards size > self matchesCount +] diff --git a/src/Bloc-Memory/MGGameElement.class.st b/src/Bloc-Memory/MGGameElement.class.st new file mode 100644 index 0000000..af51342 --- /dev/null +++ b/src/Bloc-Memory/MGGameElement.class.st @@ -0,0 +1,52 @@ +" +| board space | +board := MGGameElement example. +space := BlSpace new. +space extent: 420@420. +space addChild: board. +space show. +{ board . space } inspect +" +Class { + #name : #MGGameElement, + #superclass : #BlElement, + #instVars : [ + 'memoryGame' + ], + #category : #'Bloc-Memory-Elements' +} + +{ #category : #example } +MGGameElement class >> example [ + "self example" + + + | game board | + game := MGGame withNumbers. + board := MGGameElement new. + board memoryGame: game. + ^ board +] + +{ #category : #initialization } +MGGameElement >> initialize [ + super initialize. + self layout: BlGridLayout horizontal. +] + +{ #category : #accessing } +MGGameElement >> memoryGame [ + ^ memoryGame +] + +{ #category : #accessing } +MGGameElement >> memoryGame: anObject [ + memoryGame := anObject. + memoryGame availableCards + do: [ :aCard | self addChild: (self newCardElement card: aCard) ] +] + +{ #category : #accessing } +MGGameElement >> newCardElement [ + ^ MGCardElement new +] diff --git a/src/Bloc-Memory/package.st b/src/Bloc-Memory/package.st new file mode 100644 index 0000000..c96533b --- /dev/null +++ b/src/Bloc-Memory/package.st @@ -0,0 +1 @@ +Package { #name : #'Bloc-Memory' }