SystemOrganization addCategory: #'AIMS-Model'! SystemOrganization addCategory: #'AIMS-View'! SystemOrganization addCategory: #'AIMS-Session'! SystemOrganization addCategory: #'AIMS-Old'! WAEntryPoint subclass: #AIMSGetUser instanceVariableNames: 'sEmail sPassword personTable connection' classVariableNames: '' poolDictionaries: '' category: 'AIMS-Old'! !AIMSGetUser class methodsFor: 'as yet unclassified' stamp: 'jon made a few screens pretty 8/27/2007 16:09'! description ^ 'View User Info'! ! !AIMSGetUser methodsFor: 'as yet unclassified' stamp: 'jon made a few screens pretty 8/30/2007 17:16'! authRow ^ ((self person where: #email equals: sEmail) where: #password equals: sPassword)! ! !AIMSGetUser methodsFor: 'as yet unclassified' stamp: 'jon made a few screens pretty 8/30/2007 17:00'! handleRequest: aRequest | resp string | (aRequest isGet) ifTrue:[ resp := self processFormGetFrom: aRequest . resp ifNil: [^ WAResponse document: 'I don'' find anyone by that name' mimeType: 'text/html'] ifNotNil:[ string := WriteStream on: String new. string nextPutAll: '['. resp do: [:field | string nextPut: $". string nextPutAll: field asString. string nextPut: $". string nextPut: $,]. string nextPutAll: ']'. ^ WAResponse document: string mimeType: 'text/html']]. ^ WAResponse document: '' mimeType: 'text/html'. ! ! !AIMSGetUser methodsFor: 'as yet unclassified' stamp: 'gm 11/16/2007 14:43'! person (AIMSPGPool connection isConnected) ifFalse: [ Transcript cr; show: 'Bad connection'. connection := nil . personTable := nil]. ^ personTable ifNil: [ personTable := RAPostgresRelation name: 'person' connection: AIMSPGPool connection.]! ! !AIMSGetUser methodsFor: 'as yet unclassified' stamp: 'jon made a few screens pretty 8/30/2007 17:17'! processFormGetFrom: aRequest | row reset | sEmail := aRequest fields at: 'email'. sPassword := aRequest fields at: 'id'. reset := aRequest fields at: 'reset' ifAbsent: [nil]. reset ifNotNil: [personTable := nil. connection := nil]. [row := self authRow asArray.] on: Exception do: [:ex | Transcript cr; show: 'An error!!'. personTable := connection := nil. row := self authRow asArray]. row size > 0 ifTrue: [^row first values]. Transcript cr; show: 'returning nil - no records'. ^ nil! ! !AIMSGetUser methodsFor: 'as yet unclassified' stamp: 'jon made a few screens pretty 8/30/2007 17:11'! unregistered Transcript cr; show: 'AimsGetUser>>unregistered'. personTable := connection := nil.! ! WAEntryPoint subclass: #PostTask instanceVariableNames: 'persons connArgs connection' classVariableNames: '' poolDictionaries: '' category: 'AIMS-Old'! !PostTask class methodsFor: 'as yet unclassified' stamp: 'rbb 10/9/2006 11:26'! description ^ 'Task Upload'! ! !PostTask methodsFor: 'as yet unclassified' stamp: 'rbb 11/9/2006 14:53'! categories ^ RAPostgresRelation name: 'category' connection: self connection.! ! !PostTask methodsFor: 'as yet unclassified' stamp: 'rbb 11/17/2006 13:01'! categoriesAsText ^ (String streamContents: [:stream | stream nextPutAll: '['. (self categories orderBy: #id) do: [:ea || t| t := '(', ea id asString, ', "', ea name, '", ', ea parentid asString, '), '. stream nextPutAll: t]. stream nextPutAll: ']']) asString. ! ! !PostTask methodsFor: 'as yet unclassified' stamp: 'gwm 8/9/2007 11:38'! connection connection ifNil: [connection := PGConnection new connectionArgs: self connectionArgs; startup; yourself]. (connection isConnected) ifFalse: [connection := PGConnection new connectionArgs: self connectionArgs; startup; yourself]. ^ connection! ! !PostTask methodsFor: 'as yet unclassified' stamp: 'jon made a few screens pretty 8/28/2007 10:04'! connectionArgs ^ connArgs ifNil: [ connArgs := PGConnectionArgs hostname: (self session application preferenceAt: #dbHost) portno: (self session application preferenceAt: #dbPort) databaseName: (self session application preferenceAt: #dbName) userName: (self session application preferenceAt: #dbUser) password: (self session application preferenceAt: #dbPassword)] ! ! !PostTask methodsFor: 'as yet unclassified' stamp: 'rbb 11/9/2006 14:47'! handleRequest: aRequest | resp | (aRequest isGet) ifTrue:[resp := self processFormGetFrom: aRequest ] ifFalse:[ resp := self processFormPostFrom: aRequest. Transcript cr; show: 'Finished, should send response now']. ^ WAResponse document: resp mimeType: 'text/html'! ! !PostTask methodsFor: 'as yet unclassified' stamp: 'gwm 8/21/2007 14:07'! isAuthorizedFrom: aRequest "Find out if the posted password and email are valid" | reqEmail reqPass person | Transcript cr; show: 'isAuthorizedFrom'. reqEmail := aRequest fields at: 'email'. reqPass := aRequest fields at: 'password'. person := self persons select: [:ea | (ea email = reqEmail) & (ea enabled=true) & (ea password = reqPass)]. ^ person size > 0 ! ! !PostTask methodsFor: 'as yet unclassified' stamp: 'rbb 10/10/2006 10:51'! persons ^ RAPostgresRelation name: 'person' connection: self connection.! ! !PostTask methodsFor: 'as yet unclassified' stamp: 'rbb 11/9/2006 14:50'! processFormGetFrom: aRequest (aRequest url endsWith: 'category') ifTrue: [^ self categoriesAsText] ifFalse: [^ self testFormHtmlFor: aRequest]! ! !PostTask methodsFor: 'as yet unclassified' stamp: 'rbb 10/10/2006 16:58'! processFormPostFrom: aRequest "Check authorization and then dispatch based on that" |message | message := String new. (self isAuthorizedFrom: aRequest) ifTrue: [Transcript cr; show: 'Authorized!!'. (self processUploadFrom: aRequest) ifTrue: [message := 'Files successfully uploaded'] ifFalse: [message := 'Error uploading file']. ^ self responseHtml: message for: aRequest] ifFalse: [Transcript cr; show: 'Not Authorized!!'. ^ self responseHtml: 'Not Authorized!!' for: aRequest]. ! ! !PostTask methodsFor: 'as yet unclassified' stamp: 'rbb 10/24/2006 11:40'! processUploadFrom: aRequest "Save the AIMS task file that has been uploaded, if any, and then save the database info" | reqFile | reqFile := aRequest fields at: 'taskFile'. (reqFile class = WAFile) ifTrue: [ self saveFileFrom: aRequest named: 'taskFile'. self saveFileFrom: aRequest named: 'taskReport'. self saveFileFrom: aRequest named: 'taskImage'. self saveTaskInfoFrom: aRequest. ^ true]. ^ false ! ! !PostTask methodsFor: 'as yet unclassified' stamp: 'rbb 10/23/2006 21:25'! responseHtml: aString for: aRequest | bodyContents | bodyContents := WriteStream on: String new. bodyContents nextPutAll: '

Post Results

'.
	bodyContents nextPutAll: aString.
	bodyContents nextPutAll: '

'. Transcript cr; show: 'responding'. ^ bodyContents! ! !PostTask methodsFor: 'as yet unclassified' stamp: 'rbb 10/24/2006 11:44'! saveFileFrom: aRequest named: aFileName | reqFile sl folderName email fname currentFile reqFname fields | Transcript cr; show: 'Saving file for key: ', aFileName. fields := aRequest fields. reqFile := fields at: aFileName. email := fields at: 'email'. reqFname := reqFile fileName. sl := FileDirectory default slash. folderName := FileDirectory default fullName, sl, 'tasks', sl, email. FileDirectory default assureExistenceOfPath: folderName. fname := folderName, sl, reqFname. currentFile := FileStream forceNewFileNamed: fname. currentFile binary. currentFile nextPutAll: (ZLibReadStream on: ( reqFile contents)) contents . currentFile close. ^ true ! ! !PostTask methodsFor: 'as yet unclassified' stamp: 'rbb 10/24/2006 11:40'! saveTaskInfoFrom: aRequest | fields email person taskInfoFields | fields := aRequest fields. email := fields at: 'email'. person := self persons where: #email equals: email. taskInfoFields := OrderedCollection new. taskInfoFields add: (fields at: 'title'); add: (fields at: 'description'); add: (fields at: 'author'); add: (DateAndTime now asString); add: (fields at: 'created'); add: (fields at: 'modified'); add: ((fields at: 'taskImage') fileName); add: ((fields at: 'taskFile') fileName); add: ((fields at: 'taskReport') fileName); add: (fields at: 'filehash'); add: 'f'; add: (fields at: 'notes'); add: (fields at: 'category') asNumber; add: person asArray first id. self tasks addMostValues: taskInfoFields. Transcript cr; show: 'Saved taskinfo'. ^ true ! ! !PostTask methodsFor: 'as yet unclassified' stamp: 'rbb 10/10/2006 16:23'! tasks ^ RAPostgresRelation name: 'taskinfo' connection: self connection.! ! !PostTask methodsFor: 'as yet unclassified' stamp: 'gwm 8/9/2007 14:22'! testFormHtmlFor: aRequest | host | host := aRequest headers at: 'host'. Transcript cr; show: 'Posting to: ', host. ^' Test Post













'! ! WAEntryPoint subclass: #TasksFolder instanceVariableNames: '' classVariableNames: '' poolDictionaries: '' category: 'AIMS-Old'! !TasksFolder class methodsFor: 'as yet unclassified' stamp: 'rbb 10/6/2006 10:56'! description ^ 'Task Files'! ! !TasksFolder methodsFor: 'as yet unclassified' stamp: 'rbb 10/23/2006 12:01'! handleRequest: aRequest | task sl taskName urlElements| urlElements := aRequest url findTokens: '/'. urlElements remove: 'seaside'. sl := FileDirectory slash. taskName := (FileDirectory default) fullName, sl, (urlElements joinTokens: sl). task := StandardFileStream fileNamed: taskName. task ifNil: [^ WAResponse notFound: aRequest url] ifNotNil: [^ WAResponse document: task mimeType: (self mimeTypeFrom: taskName)] ! ! !TasksFolder methodsFor: 'as yet unclassified' stamp: 'gwm 10/23/2006 16:58'! mimeTypeFrom: aString Transcript cr; show: 'returning: ', aString. (aString endsWith: 'pdf') ifTrue: [^ 'application/pdf']. (aString endsWith: 'zip') ifTrue: [^'application/zip']. (aString endsWith: 'jpg') ifTrue: [^'image/jpeg']. (aString endsWith: 'png') ifTrue: [^'image/png']. (aString endsWith: 'gif') ifTrue: [^'application/gif']. ^ 'text/html'! ! WATree subclass: #AIMSTree instanceVariableNames: '' classVariableNames: '' poolDictionaries: '' category: 'AIMS-View'! !AIMSTree methodsFor: 'accessing' stamp: 'rbb 11/28/2006 21:17'! collapseButton ^ '- '! ! !AIMSTree methodsFor: 'accessing' stamp: 'rbb 11/28/2006 21:17'! expandButton ^ '+ '! ! !AIMSTree methodsFor: 'accessing' stamp: 'lr 12/10/2007 21:59'! hasTasks: aNode | tasks | tasks := self storage tasks select: [ :each | each category = aNode ]. self session loggedUser isNil ifTrue: [ tasks := tasks select: [ :each | each reviewed ] ]. ^ tasks notEmpty! ! !AIMSTree methodsFor: 'rendering-nodes' stamp: 'lr 12/10/2007 21:54'! renderNode: aNode on: html html listItem class: (self root = aNode ifTrue: [ 'root' ] ifFalse: [ 'leaf' ]); with: [ self renderNodeButton: aNode on: html. self renderNodeLabel: aNode on: html. self renderNodeChildren: aNode on: html ]! ! !AIMSTree methodsFor: 'rendering-nodes' stamp: 'lr 12/10/2007 21:55'! renderNodeButton: aNode on: html | isExpanded | html span class: 'button'; with: [ (self hasChildren: aNode) ifTrue: [ isExpanded := self isExpanded: aNode. self renderNodeButtonLink: aNode action: (MessageSend receiver: self selector: (isExpanded ifTrue: [ #collapse: ] ifFalse: [ #expand: ]) argument: aNode) text: (isExpanded ifTrue: [ self collapseButton ] ifFalse: [ self expandButton ]) on: html ] ]! ! !AIMSTree methodsFor: 'rendering-nodes' stamp: 'lr 12/10/2007 21:56'! renderNodeLabelLink: aNode action: aBlock text: anObject on: html (self hasTasks: aNode) ifTrue: [ html anchor callback: aBlock; with: anObject ] ifFalse: [ html render: anObject ]! ! !AIMSTree methodsFor: 'rendering' stamp: 'rbb 11/28/2006 21:18'! style ^'LI {list-style-type: none}'! ! !WAPresenter methodsFor: '*aims-accessing' stamp: 'lr 12/10/2007 21:57'! storage ^ AIMSStorage default! ! WAFileLibrary subclass: #AIMSCssResources instanceVariableNames: '' classVariableNames: '' poolDictionaries: '' category: 'AIMS-Old'! !AIMSCssResources methodsFor: 'accessing' stamp: 'rbb 10/30/2006 15:46'! aimsCss ^ 'body { background-image: url(/seaside/css/bg.gif); padding-top: 100px; padding-left: 25px; } #trail { padding-bottom: 10px; } #loginwidget { font-family: sans-serif; font-size: 8pt; text-align: right; position: absolute; top: 5px; right: 20px; padding: 2px 2px 0px 2px; border: 2px black solid; } #loginwidget input {width: 70px} #loginwidget input.submit {font-size: 7px; width: 47px} #AdminArea { position: absolute; bottom: 30px; right: 20px; border: 2px black solid; font-family: sans-serif; font-size: 8pt; } td { vertical-align: top; text-align: left; } .tableHeader { border: 1px solid #FFFFFF; background-color: #006699; color: #FFFFFF; } th a:link { color: #FFFFFF; text-decoration: none; } th a:visited { color: #FFFFFF; text-decoration: none; } th a:hover { color: #CCCCCC; text-decoration: none; } td { border: 1px solid #FFFFFF; } '! ! !AIMSCssResources methodsFor: 'accessing' stamp: 'rbb 10/10/2006 11:15'! bgGif | xxxCache | xxxCache := #(nil). (xxxCache at: 1) isNil ifTrue: [ xxxCache at: 1 put: #(71 73 70 56 57 97 184 11 184 11 247 0 0 0 0 0 255 255 255 39 30 31 29 22 23 31 27 28 53 49 50 65 62 63 47 43 45 71 68 70 92 89 91 57 53 56 81 78 81 101 99 101 241 239 241 34 32 35 111 109 112 157 156 158 38 37 41 247 247 253 242 242 248 248 248 253 187 187 191 133 133 136 245 245 249 215 215 218 211 211 214 207 207 210 192 192 195 253 253 254 252 252 253 234 234 235 244 245 252 243 244 251 42 43 49 245 246 252 238 239 245 143 144 149 235 236 241 230 231 236 120 121 125 224 225 229 220 221 224 163 165 170 217 219 224 248 250 255 46 49 56 180 182 186 173 175 179 251 252 254 250 251 253 228 229 231 235 240 249 237 242 250 245 248 253 54 63 76 50 56 65 205 219 240 195 208 228 198 211 230 189 201 218 217 229 247 222 232 247 227 236 249 240 244 250 201 203 206 196 198 201 192 213 240 199 218 243 177 191 210 207 223 245 183 197 216 183 208 238 82 90 100 167 183 202 192 207 226 192 205 221 145 155 167 198 209 223 231 239 249 243 247 252 55 78 103 140 173 209 120 147 176 162 196 233 173 203 236 138 161 186 153 172 194 203 214 226 239 245 252 98 156 213 130 176 222 55 71 88 151 191 230 214 228 242 244 247 250 248 250 252 243 245 247 253 254 255 237 238 239 0 94 179 21 83 138 74 141 205 50 85 117 118 170 220 91 110 127 115 134 151 0 105 191 0 103 188 0 101 185 0 98 184 0 99 182 0 100 182 0 97 181 0 98 181 0 96 180 1 100 181 1 98 177 2 95 170 3 91 163 3 83 148 6 87 155 9 78 136 14 101 174 12 87 148 21 99 162 21 94 154 25 90 145 27 87 138 32 96 150 35 91 138 42 105 158 50 114 168 43 99 144 45 90 128 52 100 139 73 110 141 85 124 157 138 186 228 185 199 211 0 102 183 0 101 176 12 112 188 49 137 203 37 78 110 55 107 145 238 243 247 241 245 248 0 113 188 0 107 185 19 123 194 24 91 137 22 81 121 119 182 226 65 98 121 94 140 172 226 235 241 232 239 244 246 249 251 245 248 250 237 240 242 2 119 193 2 82 130 3 108 174 4 95 153 8 86 133 26 134 200 24 97 141 57 118 155 63 123 159 81 136 169 105 152 181 133 171 195 150 183 203 157 188 207 164 193 211 175 200 215 194 213 225 197 215 226 200 217 228 210 224 233 213 226 234 222 232 238 229 237 242 239 244 247 0 81 129 1 82 129 5 127 199 4 84 131 6 85 132 11 89 134 14 91 136 16 92 137 20 95 139 22 96 140 29 101 144 32 103 145 35 105 146 39 108 148 43 110 150 45 112 151 49 115 154 73 131 165 120 163 188 142 178 199 170 197 213 180 204 218 184 207 220 189 210 222 199 217 227 206 222 231 218 230 237 227 236 241 234 241 245 24 115 160 43 103 133 203 220 229 215 228 235 225 235 240 237 243 246 243 247 249 2 119 172 28 149 207 47 159 212 74 169 213 208 229 239 59 171 217 220 239 247 48 140 172 82 186 224 28 41 46 43 110 131 102 199 230 125 206 231 192 226 237 247 250 251 49 119 138 66 156 183 156 223 241 224 246 252 138 217 238 169 229 244 187 235 247 201 240 249 215 244 251 239 251 254 250 254 255 230 248 252 235 250 253 242 252 254 240 249 251 246 253 254 246 246 245 251 250 250 248 248 248 243 243 243 255 255 255 33 249 4 1 0 0 255 0 44 0 0 0 0 184 11 184 11 0 8 255 0 95 53 115 246 12 22 44 104 215 162 205 154 133 13 155 180 90 181 54 221 10 64 177 162 197 139 24 51 106 220 200 177 163 199 143 32 67 138 28 73 178 164 201 147 40 83 170 92 201 178 165 203 151 48 99 202 156 73 179 166 205 155 56 115 234 220 201 179 167 207 159 64 131 10 29 74 180 168 209 163 72 147 42 93 202 180 169 211 167 80 163 74 157 74 181 170 213 171 88 179 106 221 202 181 171 87 165 2 9 22 140 37 43 225 44 90 14 33 102 155 248 181 173 219 183 112 227 202 157 75 183 174 221 187 120 243 234 221 203 183 175 223 191 128 3 11 30 76 184 176 225 195 136 19 43 94 124 146 89 216 177 8 21 50 148 246 48 91 36 198 152 51 107 222 204 185 179 231 207 160 67 139 30 77 186 180 233 211 168 83 171 94 205 186 181 235 188 142 7 18 60 40 43 154 194 134 15 107 105 171 138 111 94 188 118 232 206 145 11 231 205 91 183 227 221 188 133 11 71 238 220 59 120 243 244 189 158 78 189 186 245 235 216 179 107 223 206 189 187 247 239 224 195 139 255 31 79 190 60 207 216 3 199 150 85 136 150 178 110 168 244 228 181 59 23 174 155 174 251 186 64 129 194 95 169 148 127 255 142 4 40 96 56 231 192 67 143 121 8 38 168 224 130 12 54 232 224 131 16 70 40 225 132 20 86 104 225 133 229 49 19 219 108 180 73 214 222 123 75 225 35 207 59 228 216 151 159 126 251 225 167 203 127 0 10 232 162 35 101 196 88 198 55 239 204 131 225 141 56 230 168 227 142 60 246 232 227 143 64 6 41 228 144 68 22 25 148 43 27 62 83 16 52 235 157 229 144 52 212 36 229 206 124 246 129 50 9 138 248 129 34 202 40 192 20 98 70 38 104 132 249 64 152 104 100 146 137 33 131 200 168 230 140 232 184 99 228 155 112 198 41 231 156 116 214 105 231 157 120 230 169 231 158 114 34 41 80 122 176 144 101 22 45 237 69 89 148 61 237 148 168 203 149 250 221 55 73 29 189 124 105 1 4 27 96 224 65 63 1 116 192 1 69 28 116 208 1 63 98 100 240 130 5 103 150 145 69 140 167 102 241 77 59 124 182 234 234 171 176 198 255 42 235 172 180 214 106 235 173 184 202 234 231 99 6 33 52 168 67 134 246 228 206 129 1 208 3 79 137 86 94 153 223 36 163 92 146 137 5 47 96 176 143 69 155 134 164 1 169 166 102 161 173 182 232 224 147 235 183 224 134 43 238 184 228 150 107 238 185 232 166 171 110 77 72 38 169 158 89 12 97 195 201 79 225 160 67 17 58 139 54 10 138 29 206 146 176 129 7 46 121 64 194 33 219 110 139 137 61 235 38 172 240 194 12 55 236 240 195 16 71 44 241 196 134 185 178 171 88 129 70 182 80 67 243 246 20 207 36 141 216 195 65 5 148 44 58 138 25 39 188 0 240 76 26 160 177 237 25 89 156 129 9 177 20 215 108 243 205 56 231 172 243 206 60 247 236 115 172 22 163 55 91 44 145 177 39 175 78 97 132 17 64 61 225 140 49 198 57 153 154 105 65 16 251 40 109 147 24 39 196 28 243 25 103 160 99 245 207 96 135 45 246 216 100 151 109 246 217 104 167 45 87 208 175 240 74 219 175 193 214 164 79 59 225 216 18 0 60 148 192 225 198 28 242 4 255 176 15 63 60 93 112 2 215 132 107 193 170 218 136 39 174 248 226 140 55 238 248 227 144 63 204 182 219 76 194 123 116 77 245 192 227 205 36 153 244 163 143 55 99 188 241 198 24 223 252 20 134 9 105 96 194 181 22 172 187 25 249 235 176 199 46 251 236 180 215 110 251 237 174 77 158 222 187 30 118 60 19 60 225 136 82 199 40 27 4 240 206 34 110 136 238 198 24 240 252 4 131 11 202 176 46 61 21 184 87 111 253 245 216 103 175 253 246 220 119 63 147 238 24 11 106 219 89 190 195 36 15 57 220 140 50 202 29 104 4 96 79 55 114 136 46 186 28 142 192 240 19 7 105 36 34 189 22 92 212 224 253 255 0 12 160 0 7 72 192 2 26 176 97 65 115 87 160 214 195 158 242 181 196 29 231 72 159 29 238 96 6 21 96 10 29 108 72 158 252 222 32 135 119 0 165 2 90 72 132 8 185 144 8 28 184 165 6 52 240 196 1 87 200 194 22 186 240 133 48 140 161 12 173 2 62 37 101 236 26 215 88 8 45 28 168 18 125 188 163 20 234 27 197 35 255 72 48 173 0 204 67 23 161 219 224 27 224 80 9 154 241 164 1 82 32 97 20 184 192 5 234 181 165 11 170 72 130 34 90 49 195 46 122 241 139 96 12 163 24 199 200 194 26 190 107 80 60 68 73 60 194 209 135 95 52 235 4 50 168 72 24 206 161 55 37 190 97 14 114 192 132 77 244 65 15 125 212 163 30 248 160 25 19 168 72 200 41 124 161 34 245 184 73 34 73 98 15 120 160 131 28 223 8 199 55 206 129 14 120 184 206 34 157 144 194 43 6 145 12 50 122 242 147 160 12 165 40 71 73 202 137 129 111 104 190 146 140 221 86 98 143 115 84 227 15 166 184 4 26 52 112 17 121 128 34 126 118 124 131 27 26 97 35 154 196 163 20 200 233 70 41 172 64 145 36 76 129 144 84 164 1 69 232 225 13 101 212 164 29 222 0 130 72 230 113 142 82 228 109 12 114 144 3 28 176 249 134 74 124 3 30 210 161 200 19 170 176 131 42 172 162 148 232 76 167 58 215 201 206 118 186 51 71 102 204 88 147 102 177 202 148 192 99 28 129 8 196 31 160 224 255 130 14 96 132 28 184 204 229 232 74 71 19 121 80 194 105 78 107 67 26 40 18 143 86 80 113 10 16 93 229 60 64 81 7 90 202 132 30 221 24 195 66 65 242 195 56 200 129 13 106 80 3 27 22 1 210 53 112 112 12 112 112 4 60 170 229 9 192 85 235 157 48 141 169 76 103 74 211 154 218 84 49 241 36 26 14 85 153 18 119 144 131 24 249 28 98 17 47 242 49 56 8 84 121 115 136 7 77 236 113 203 57 204 129 131 47 216 148 56 184 0 209 170 246 128 161 147 80 3 34 102 242 14 54 172 97 163 29 169 199 57 38 17 58 53 212 193 16 105 96 194 11 84 144 134 65 44 194 164 111 136 195 26 84 240 181 155 218 245 174 120 205 171 94 247 202 215 35 249 169 25 178 129 204 60 167 129 146 123 22 162 16 151 96 64 6 52 162 143 166 41 145 13 108 80 226 24 188 81 215 151 220 163 18 184 100 67 29 42 16 0 14 184 99 10 74 160 2 21 140 64 133 171 222 141 18 110 160 131 52 97 226 142 140 174 97 171 29 153 227 34 228 240 214 64 255 168 160 136 245 80 26 63 92 48 136 54 188 65 179 47 232 171 112 135 75 220 226 26 247 184 119 61 165 96 19 162 144 77 152 228 30 231 32 198 97 161 160 2 142 180 131 18 113 216 224 26 252 240 7 53 72 246 112 49 161 71 41 50 91 135 226 5 192 9 71 200 193 17 214 75 5 31 80 228 29 186 212 42 76 194 128 14 55 196 65 13 135 120 169 70 222 65 137 248 169 161 16 41 216 8 53 190 33 7 53 252 161 1 200 77 176 130 23 204 224 6 59 56 128 237 106 219 238 122 197 192 89 100 163 36 241 96 135 151 30 241 128 0 111 4 31 240 123 236 90 231 176 136 13 194 161 20 254 139 9 62 74 145 68 205 6 65 105 246 16 194 16 116 32 132 245 98 128 34 231 136 31 27 232 96 222 150 28 209 191 132 0 220 70 126 252 6 53 144 97 177 28 185 71 41 212 208 190 7 59 249 201 80 142 178 148 167 172 51 182 1 214 25 28 18 159 66 106 65 146 119 28 195 12 133 128 2 4 42 139 145 227 105 80 116 106 8 50 63 12 225 93 249 45 207 255 94 49 209 199 120 69 167 217 213 186 3 7 56 152 113 141 145 76 142 36 170 225 20 254 108 201 57 228 167 6 64 32 120 35 231 120 106 137 45 240 145 120 232 129 4 84 142 180 164 39 77 233 74 91 26 79 17 190 50 135 160 81 180 89 112 57 36 246 32 135 151 204 128 132 27 119 196 29 44 222 32 27 230 16 220 0 184 160 14 145 69 106 35 46 233 18 125 56 34 137 109 168 195 106 197 209 133 46 228 121 8 68 0 24 211 146 232 6 55 184 160 37 182 196 229 26 246 128 130 15 103 244 13 203 54 117 108 87 176 178 75 91 251 218 216 206 182 182 183 237 157 76 7 214 32 90 158 133 52 66 34 15 118 64 193 12 80 176 0 166 60 50 232 51 23 25 18 66 14 192 33 218 44 186 57 140 129 28 49 129 65 136 127 107 7 36 139 163 7 93 152 5 14 138 144 132 77 129 56 137 69 62 198 186 83 18 6 114 100 151 206 118 176 104 70 228 49 9 163 174 129 16 11 143 45 183 55 206 241 142 123 252 227 32 23 140 183 49 182 192 157 50 4 36 240 255 64 198 185 183 240 130 64 119 132 200 242 219 49 103 43 162 1 60 192 85 116 113 224 27 76 234 1 58 136 211 50 12 62 240 1 15 124 205 131 86 187 67 23 1 253 109 117 85 18 15 80 24 149 206 229 221 72 59 144 87 228 252 134 252 234 88 207 186 214 183 206 245 169 236 234 202 54 44 185 89 176 241 17 116 88 227 220 165 14 137 195 149 136 95 140 164 33 214 242 35 157 126 87 194 243 22 219 225 198 245 112 130 15 122 48 244 33 52 59 0 20 127 58 154 5 225 15 134 59 54 230 172 222 8 124 147 167 6 72 116 253 241 144 143 188 228 39 79 249 145 124 253 219 55 132 87 71 240 113 14 116 67 225 1 98 32 247 45 85 173 235 139 116 32 5 126 160 247 18 153 247 146 14 244 156 223 55 214 199 12 244 94 11 30 44 65 200 120 123 184 252 214 192 4 123 86 188 196 242 91 68 239 247 171 75 104 247 225 208 149 79 190 242 151 207 252 230 91 90 67 18 198 178 13 99 65 150 10 207 221 34 246 248 6 20 160 176 5 11 196 64 36 135 39 52 255 108 47 18 6 18 140 116 131 244 11 39 75 56 240 122 54 216 33 5 28 192 199 15 102 176 119 30 72 123 241 197 23 221 26 248 80 109 146 124 110 12 139 64 7 116 176 123 96 133 17 83 151 60 171 118 108 206 183 128 12 216 128 14 248 128 55 5 125 97 65 114 149 51 62 179 224 114 23 225 14 236 176 5 220 7 105 34 1 15 147 160 123 208 118 119 26 33 6 129 160 122 163 227 65 45 17 6 237 135 7 30 192 1 53 240 3 52 160 119 179 128 124 57 166 89 124 0 119 106 32 5 39 113 93 110 192 6 190 192 8 226 183 17 241 128 93 104 134 12 25 7 129 74 184 132 76 216 132 78 184 66 142 241 39 36 71 52 21 54 11 234 48 113 227 192 129 54 176 116 33 241 127 108 87 128 24 161 2 116 0 119 75 84 9 247 224 18 223 208 98 119 16 71 20 240 4 52 48 123 210 22 0 125 182 108 203 0 10 15 199 6 124 240 119 35 129 81 114 176 6 119 176 12 165 240 116 109 167 17 246 128 89 187 55 126 79 152 136 138 184 136 140 216 136 140 255 35 52 83 152 74 146 177 13 24 33 15 89 8 5 54 208 106 33 17 6 83 39 130 107 208 7 122 152 17 107 134 130 99 160 71 45 209 130 43 16 0 95 240 4 243 183 9 213 86 119 107 64 6 218 208 103 132 6 134 28 133 60 108 128 6 157 176 111 105 22 111 228 71 139 116 54 7 223 64 107 142 88 140 198 120 140 200 152 140 235 34 97 129 85 16 11 84 133 187 97 17 242 128 10 54 176 5 153 72 18 24 133 112 104 102 139 24 177 1 118 112 115 186 196 75 44 17 6 105 72 103 120 16 71 49 16 131 52 128 2 47 37 94 99 240 95 128 103 132 191 85 81 35 241 62 99 176 108 25 192 130 73 180 93 161 167 17 241 176 8 186 183 60 149 128 14 8 163 140 6 121 144 8 153 144 10 57 39 204 56 133 130 194 92 11 81 62 242 128 12 213 120 141 36 129 14 84 183 123 125 208 143 29 129 6 164 72 80 43 81 142 191 117 7 161 151 142 79 192 9 28 105 68 78 135 95 155 2 140 69 134 8 100 198 17 237 198 6 39 64 17 225 160 108 120 255 224 97 26 113 14 99 224 110 114 48 6 149 112 14 241 16 147 11 89 148 70 121 148 72 153 148 223 33 133 145 88 22 240 50 11 132 69 17 243 48 14 213 184 5 16 80 18 168 150 116 208 54 124 30 145 1 54 183 65 246 165 84 43 113 120 108 128 7 133 7 3 20 80 3 38 160 95 31 35 87 77 54 15 141 112 135 113 208 99 30 241 99 6 22 71 1 192 147 80 183 90 26 241 5 4 102 71 63 185 8 222 208 38 74 89 152 134 121 152 136 153 152 157 1 88 19 150 49 21 40 25 158 38 149 227 96 0 214 232 129 36 113 14 197 166 93 128 80 120 32 145 6 224 184 68 142 176 72 40 193 1 100 105 150 1 0 3 44 16 9 67 69 17 7 168 6 96 165 151 104 118 10 190 184 17 115 52 7 108 16 7 150 137 14 79 167 89 10 248 97 89 0 89 118 180 77 99 208 8 228 208 75 138 121 156 200 153 156 202 185 156 93 1 118 206 40 79 16 169 67 216 16 6 247 192 14 6 80 141 15 96 18 48 39 58 36 197 133 31 33 3 169 247 93 33 255 185 143 119 0 48 28 192 2 41 25 0 244 245 112 87 73 17 238 80 9 79 183 8 109 160 137 28 97 75 239 88 8 200 215 14 249 199 6 92 185 17 245 96 5 122 32 82 185 20 7 195 217 45 204 121 160 8 154 160 10 186 160 57 209 140 224 86 57 209 73 40 216 144 15 223 112 3 213 136 4 171 41 18 0 197 118 240 54 18 36 64 82 38 86 10 249 160 18 105 152 60 126 184 150 1 0 6 24 72 17 0 197 155 22 129 14 8 167 6 132 231 17 228 0 7 154 165 2 47 85 132 15 247 85 31 193 1 24 160 9 116 32 160 193 57 89 169 200 160 70 122 164 72 154 164 74 26 0 210 231 140 212 7 161 30 130 22 216 112 14 54 80 165 54 160 147 35 81 84 170 70 7 189 25 18 96 112 130 96 57 6 112 134 18 34 233 135 50 192 1 97 144 132 54 57 6 238 199 151 1 112 89 130 167 6 253 153 17 77 87 96 133 144 113 129 135 102 136 200 17 28 192 1 26 160 9 122 176 6 66 42 63 112 208 6 122 16 4 75 154 168 138 186 168 140 255 186 144 74 242 156 213 199 92 144 137 22 232 176 5 22 106 145 36 49 108 108 103 117 23 129 15 240 64 73 240 16 147 47 0 107 38 54 107 163 121 120 102 218 1 223 135 17 217 184 108 88 26 6 239 16 80 251 215 127 228 215 52 238 71 159 238 99 136 85 55 18 29 32 3 76 128 10 65 74 134 208 166 7 72 214 168 198 122 172 200 154 172 12 24 118 212 39 11 78 105 129 103 65 11 237 96 6 45 96 161 53 105 18 120 35 120 191 197 99 24 49 15 230 118 110 129 240 13 78 68 17 252 48 111 146 133 111 40 81 154 98 208 167 25 49 81 5 22 8 200 71 17 43 22 80 174 185 17 32 8 7 106 144 9 43 170 15 188 72 8 25 106 45 82 16 160 108 119 10 106 170 172 6 123 176 8 155 176 219 230 164 145 26 157 209 154 14 200 80 0 22 186 0 233 217 133 175 71 104 135 128 17 250 192 14 10 96 3 224 122 7 232 122 17 65 240 141 96 169 115 39 81 162 191 229 130 68 24 130 106 96 8 43 26 0 237 16 80 108 160 7 113 88 17 159 255 211 135 120 64 151 21 241 122 159 136 151 37 209 1 63 154 153 220 57 159 10 91 180 70 123 180 72 235 100 15 234 172 59 5 153 78 242 13 18 123 3 55 48 115 37 113 60 34 168 89 18 87 17 241 80 173 28 104 6 129 48 10 118 0 14 25 225 145 146 85 6 162 73 18 34 201 6 107 40 117 200 51 136 22 17 6 7 55 132 6 136 93 76 22 147 192 232 126 89 107 18 174 224 116 24 155 180 126 251 183 128 27 184 53 37 79 12 52 169 148 106 3 213 106 3 12 112 18 247 240 108 27 36 95 24 129 14 14 112 3 93 251 181 118 192 5 25 177 2 123 0 142 0 217 60 38 209 130 161 248 182 232 144 93 108 192 141 119 35 180 59 134 168 22 209 184 247 136 7 170 139 17 57 70 103 116 64 181 40 209 14 66 251 137 180 42 184 186 187 187 188 219 187 50 196 36 207 10 173 132 66 11 233 96 14 7 32 181 55 160 8 47 11 18 245 229 110 159 88 179 20 209 10 17 64 185 224 58 10 117 16 5 26 225 153 74 148 126 37 65 142 118 231 179 255 255 20 58 108 64 2 215 119 154 23 251 103 46 7 171 200 179 6 77 134 17 176 250 112 37 230 157 39 193 1 119 91 7 175 235 187 248 155 191 250 187 191 216 195 180 182 97 184 82 250 13 7 208 2 213 122 2 181 32 9 88 137 116 95 168 17 65 48 189 28 88 8 95 203 8 93 106 17 30 208 93 146 245 14 229 203 88 20 161 143 16 7 189 59 203 166 116 64 87 26 1 15 115 160 65 242 217 155 246 48 94 203 150 183 22 113 128 250 103 186 36 33 15 0 185 173 184 202 191 54 124 195 56 156 195 103 211 180 11 33 157 184 209 14 55 16 2 213 122 3 77 144 13 182 64 148 50 25 7 206 219 7 224 107 17 254 112 157 149 91 7 150 144 187 21 193 4 182 105 98 102 248 17 97 144 15 246 163 158 237 247 126 26 145 141 154 69 187 24 113 190 130 80 68 231 176 190 237 75 167 242 232 154 25 44 18 97 192 175 226 59 7 242 171 195 118 124 199 120 156 199 14 3 173 209 218 30 216 0 14 200 16 1 4 124 3 6 156 13 211 160 66 34 145 108 74 255 196 123 28 177 1 45 240 192 129 112 9 53 236 196 108 22 166 166 200 17 245 96 15 49 80 45 236 103 119 30 172 146 31 133 7 197 74 167 25 185 149 70 132 68 106 176 7 159 76 17 20 247 112 141 215 18 142 181 99 147 172 199 180 92 203 182 124 203 177 210 195 209 218 16 79 34 13 232 208 2 3 92 173 64 144 13 155 48 13 156 128 196 238 235 146 104 6 8 235 202 17 64 192 0 11 176 5 12 64 198 25 49 170 100 24 7 226 184 17 250 48 15 95 176 201 156 242 197 159 220 150 219 69 197 22 17 126 159 168 13 137 86 100 107 156 17 71 39 136 24 199 18 177 92 7 19 140 203 244 92 207 246 124 207 66 162 67 18 218 203 181 0 14 230 32 0 66 124 3 12 176 9 197 108 11 182 224 5 33 161 165 170 54 167 26 193 1 232 208 10 200 92 17 28 96 174 27 68 58 28 33 14 20 16 3 222 236 197 158 172 17 173 105 8 5 107 17 255 120 102 112 192 14 72 151 202 171 188 76 115 102 124 77 124 18 142 181 6 120 144 210 248 60 211 52 255 93 211 54 93 30 195 203 203 238 81 11 190 28 1 33 32 196 45 224 2 211 48 13 6 109 11 199 252 17 154 250 184 254 10 18 222 144 5 33 49 178 159 9 7 42 104 17 244 16 15 29 32 6 50 16 6 49 208 1 74 3 3 169 198 111 163 252 162 70 229 182 28 33 146 111 208 6 114 144 93 107 112 2 17 93 119 62 183 18 113 251 95 33 125 211 116 93 215 118 125 215 171 129 27 148 177 215 16 129 13 235 0 208 66 140 0 210 80 212 70 205 9 8 236 17 215 117 181 111 48 203 24 225 14 160 112 6 34 65 182 38 54 7 231 48 15 245 176 205 239 208 13 147 144 8 1 128 2 159 16 6 92 29 0 249 112 107 16 23 214 21 129 9 226 11 195 34 61 195 218 165 202 30 65 154 8 55 187 24 97 15 232 96 2 34 161 165 60 138 215 186 189 219 188 221 219 154 177 215 59 173 22 239 16 2 62 45 196 22 64 216 133 205 9 87 200 17 114 204 161 179 41 117 140 160 5 34 145 2 155 171 68 113 0 7 186 96 28 186 176 8 115 48 9 149 255 32 4 157 13 6 153 226 15 252 74 94 44 172 158 229 56 190 111 108 17 102 141 102 215 74 163 8 199 159 6 8 185 32 81 163 208 182 7 166 237 219 250 189 223 252 221 223 113 17 220 106 145 13 217 192 14 2 80 220 45 80 1 201 205 9 10 206 9 212 176 170 251 85 202 219 58 207 27 209 103 172 16 209 23 161 189 128 137 77 122 179 8 147 80 10 142 32 14 1 144 2 96 240 130 245 240 213 117 150 17 114 246 81 116 124 182 27 97 80 186 135 143 22 158 151 244 106 139 152 201 200 141 102 135 94 197 214 254 189 227 60 222 227 62 30 21 16 17 224 2 62 13 233 96 3 4 224 211 45 128 0 181 192 9 9 206 224 212 160 13 14 126 17 41 44 130 187 10 18 246 128 116 18 206 17 224 137 130 118 196 225 149 0 35 88 0 180 254 52 175 80 119 191 21 193 84 31 37 207 33 241 151 250 183 206 28 161 155 125 123 17 182 58 6 172 224 17 242 240 108 255 101 219 63 190 231 124 222 231 126 142 19 181 32 224 2 94 204 67 45 185 17 80 220 15 255 176 224 78 78 13 79 174 13 142 222 9 25 209 110 164 231 166 29 241 14 140 16 7 148 254 17 36 64 7 159 169 68 221 221 225 142 144 5 95 115 89 153 53 6 58 203 202 0 233 126 102 94 159 70 8 211 231 77 124 26 212 139 22 113 116 58 182 6 228 64 140 22 1 15 120 78 6 171 254 231 190 254 235 192 30 236 27 65 204 5 93 212 211 144 10 3 112 232 66 12 1 10 206 232 206 238 232 208 174 13 219 80 87 219 169 127 123 138 201 222 80 7 122 208 210 30 193 15 104 48 7 157 190 65 148 112 37 149 80 5 47 133 230 220 57 6 212 12 179 241 227 234 34 81 142 76 246 129 25 137 187 22 129 15 223 208 6 145 101 111 65 25 15 247 144 72 250 224 14 199 66 86 32 245 7 235 158 87 125 122 240 8 159 240 10 191 240 12 223 240 14 255 240 16 31 241 18 63 241 20 95 241 22 127 241 24 159 241 26 191 241 28 223 241 30 255 241 32 31 242 34 63 242 36 95 242 38 127 242 40 159 242 42 191 242 44 223 242 46 255 242 48 31 243 50 255 63 243 52 95 243 54 127 243 56 159 243 58 191 243 60 223 243 62 255 243 64 31 244 66 63 244 68 95 244 70 127 244 72 159 244 40 95 236 132 13 14 143 144 236 197 29 4 207 30 237 208 30 9 183 112 11 146 240 5 74 211 112 33 213 245 33 213 111 9 45 10 116 32 8 46 85 241 254 128 6 118 48 168 74 52 238 117 192 4 154 114 240 238 80 113 242 35 7 47 192 2 26 125 247 49 128 218 208 38 202 120 143 247 12 255 143 238 183 1 111 31 241 69 232 6 139 240 86 186 166 240 171 80 96 145 229 52 221 84 28 221 80 9 253 229 6 222 149 9 64 48 248 74 159 249 154 191 249 156 223 249 158 255 249 160 31 250 162 63 250 164 95 250 166 127 250 168 159 250 170 191 250 172 223 250 174 255 250 176 31 251 178 63 251 180 95 251 182 127 251 66 143 220 11 14 15 229 112 228 62 109 0 216 48 245 142 30 9 218 112 245 88 47 9 200 47 9 158 240 5 136 240 8 206 255 252 143 64 76 106 87 7 140 176 10 74 115 241 252 64 2 151 16 164 34 255 5 89 130 106 86 133 240 98 9 63 15 147 176 6 230 111 254 230 158 240 60 215 6 130 26 113 21 255 13 249 186 201 19 79 113 26 228 85 76 144 240 48 0 3 65 144 12 220 15 16 107 216 184 25 3 7 78 155 53 106 230 248 33 81 130 195 67 136 17 37 78 164 88 209 226 69 140 25 53 110 228 216 209 227 71 144 33 69 142 36 89 210 228 201 135 32 84 174 100 217 210 229 75 152 49 101 206 164 89 211 230 77 156 57 117 238 228 217 211 231 79 160 65 133 14 37 90 212 232 81 164 73 149 46 101 218 212 233 83 168 81 165 78 165 90 213 234 85 172 89 181 110 229 218 213 235 87 176 97 197 142 37 91 214 236 89 180 105 213 174 101 219 118 169 45 184 156 228 114 242 128 110 128 131 8 17 66 36 208 214 183 111 36 109 145 4 223 34 124 75 210 97 196 37 76 44 102 92 2 204 182 109 94 36 79 158 236 201 83 167 78 78 198 85 106 212 228 114 207 12 39 30 229 177 83 167 142 157 60 102 44 160 120 217 163 10 9 38 177 153 188 112 73 131 21 255 108 38 36 82 224 124 82 36 77 133 156 63 146 168 32 174 130 9 240 151 19 128 72 57 197 167 14 29 232 116 236 248 57 196 100 197 15 183 217 181 111 103 251 193 187 119 151 223 193 183 20 255 33 188 248 243 223 211 143 103 89 126 189 121 242 232 227 171 159 207 126 165 251 250 240 219 203 223 79 191 191 125 149 240 251 79 191 251 248 43 208 191 3 1 4 65 192 4 9 12 208 192 7 17 140 80 65 6 39 116 112 65 8 49 148 80 67 10 51 172 144 195 11 63 20 209 67 18 55 28 209 196 18 59 68 113 69 21 91 12 49 197 23 89 140 209 197 247 106 204 207 198 1 113 108 80 71 11 121 4 209 199 19 105 188 113 200 28 137 220 209 200 30 145 252 81 201 32 103 116 18 72 24 161 148 81 74 33 139 180 242 200 43 147 204 114 201 45 155 164 242 73 38 163 12 115 202 49 171 196 242 76 45 209 228 82 77 47 203 4 179 75 49 225 36 83 78 51 211 180 115 205 59 219 164 243 77 54 227 236 115 206 63 235 196 115 80 61 3 229 51 79 63 17 5 255 84 81 65 11 101 244 80 66 19 141 116 209 73 27 149 212 209 74 33 197 116 211 75 59 165 148 211 79 61 181 52 84 82 71 53 85 83 81 81 157 115 46 86 169 81 229 174 188 66 120 128 26 191 2 19 44 146 194 36 49 12 49 94 33 243 21 178 201 34 243 194 50 203 48 51 150 139 50 146 253 4 179 77 77 168 0 2 11 44 128 96 131 18 180 156 0 59 243 104 88 48 60 44 188 195 2 139 48 193 69 181 91 112 111 156 224 2 25 128 168 224 133 23 92 0 66 6 16 38 216 243 75 122 221 172 119 94 123 243 197 119 95 67 239 237 87 223 127 249 181 80 191 242 252 43 152 189 131 9 62 184 65 131 23 30 24 97 135 65 108 184 96 134 33 166 248 97 133 47 150 216 98 1 19 174 56 227 142 35 246 24 227 143 75 38 249 228 141 65 230 111 228 148 77 110 25 101 150 99 22 121 102 141 101 174 153 230 144 111 214 57 103 158 87 198 217 231 157 129 238 121 226 161 57 22 250 104 162 145 54 58 105 166 151 118 90 229 166 161 126 218 101 155 139 150 255 250 106 170 127 142 58 235 160 183 134 89 235 169 191 238 58 236 151 203 174 90 105 172 197 182 154 235 181 213 70 155 237 183 221 246 218 108 176 211 166 123 108 187 207 158 91 111 178 249 206 187 110 184 247 6 92 238 190 7 191 187 237 195 227 78 92 112 188 3 47 188 113 194 255 134 124 241 199 17 247 219 113 201 45 55 252 242 200 49 247 188 115 208 41 207 92 113 206 69 255 220 244 208 75 87 125 115 214 39 95 221 245 214 53 191 152 26 218 107 167 29 149 1 8 136 213 130 91 111 25 44 87 94 37 249 245 87 47 132 149 204 147 97 137 37 214 88 117 156 200 66 149 44 172 184 172 19 216 233 27 157 113 217 179 63 26 195 211 95 215 30 123 210 99 15 191 250 239 43 31 191 252 235 205 7 95 112 17 42 108 31 194 247 37 140 31 192 249 29 172 191 165 251 89 202 127 165 253 85 234 31 132 255 5 208 125 3 132 31 1 229 103 64 250 33 208 126 10 196 31 3 245 231 64 254 65 208 127 18 4 32 5 5 88 64 12 30 48 131 9 220 224 2 59 216 255 192 15 62 48 132 17 28 225 4 75 88 193 19 94 80 131 43 228 32 11 61 232 66 16 194 80 132 50 36 33 13 77 104 67 20 226 80 133 45 228 225 11 123 24 195 31 206 48 136 53 28 226 13 139 152 195 35 238 208 135 75 4 34 19 133 232 68 34 66 209 136 82 68 34 21 149 216 68 44 62 49 139 81 220 226 20 187 88 197 47 94 81 139 99 228 34 25 189 104 70 48 162 81 140 101 100 227 25 219 152 198 55 174 209 141 115 132 35 29 229 88 71 60 222 81 143 22 228 99 10 251 168 195 63 38 49 144 86 28 100 24 11 169 198 67 198 49 145 118 92 100 30 27 185 71 63 70 18 144 146 20 36 37 9 105 73 67 98 18 145 154 84 36 39 25 233 73 71 202 167 118 181 186 69 38 96 165 23 21 224 106 87 193 67 204 240 124 85 60 88 30 207 50 201 195 204 244 212 113 203 78 80 33 10 81 56 67 45 166 7 201 73 6 179 146 194 188 36 49 51 105 204 77 34 179 147 202 252 36 51 67 233 76 96 14 83 154 197 4 144 120 234 87 158 107 255 90 51 97 222 201 230 119 186 201 205 109 126 224 155 226 12 231 56 205 89 78 116 110 243 156 234 76 103 194 214 233 206 118 30 236 157 242 140 103 193 230 105 207 122 98 51 159 218 100 103 63 225 233 79 122 2 20 159 2 213 39 65 249 249 79 132 6 52 161 3 93 104 65 27 122 80 133 70 148 161 18 117 40 69 33 58 81 140 86 52 163 23 213 104 71 57 250 81 111 238 51 164 6 29 233 67 75 106 209 147 110 52 165 30 93 41 72 193 73 210 151 154 52 166 40 157 169 74 107 202 210 155 186 148 156 48 221 169 76 123 74 211 159 218 52 168 56 29 170 78 239 73 212 163 26 85 164 57 109 105 83 153 250 212 162 58 53 170 80 77 170 84 171 74 213 165 78 85 171 87 221 106 86 185 250 85 175 134 149 167 96 29 171 88 125 74 214 179 154 21 168 104 93 171 90 133 202 214 183 186 21 169 114 85 106 89 237 154 214 187 182 53 175 113 221 235 92 251 90 87 188 6 86 175 130 229 43 97 253 26 216 90 1 70 27 212 128 194 41 67 240 2 86 246 138 255 120 95 64 222 19 64 240 3 204 210 64 179 63 208 44 13 102 240 217 207 58 65 180 163 237 2 21 76 59 133 46 248 160 7 171 93 45 15 138 240 218 215 226 0 7 67 160 109 109 105 43 4 220 230 86 183 71 224 109 111 125 107 90 224 6 55 184 83 32 110 113 141 107 92 46 36 87 185 203 77 110 34 156 251 92 232 58 23 19 211 165 110 117 173 123 93 236 98 247 12 152 56 67 119 189 235 221 68 252 224 175 86 165 43 121 199 139 213 243 118 53 189 112 61 236 96 221 91 216 247 134 83 190 243 165 111 125 237 123 95 252 230 87 191 251 229 111 127 253 251 95 0 7 88 192 3 38 112 129 13 124 96 4 39 88 193 11 102 112 131 29 252 96 8 71 88 194 19 166 112 133 45 124 97 12 103 88 195 27 230 112 135 61 252 97 16 135 88 196 35 38 113 137 77 124 98 20 167 88 197 43 102 113 139 229 235 187 194 16 230 30 54 112 44 100 183 33 60 87 14 207 19 95 232 196 5 36 49 2 73 212 224 9 35 128 139 45 54 81 139 90 72 67 26 180 255 96 242 44 102 17 141 39 235 32 7 57 80 194 18 154 208 132 37 44 97 7 91 54 130 17 136 240 101 47 127 57 9 99 38 115 18 172 112 102 52 167 185 10 86 168 66 155 221 252 102 55 75 65 206 115 166 115 157 53 33 5 77 228 89 207 123 70 132 38 250 140 8 64 7 90 208 136 64 5 161 81 113 10 84 28 250 20 139 86 52 36 28 253 104 72 59 218 16 144 152 180 33 44 125 105 76 103 90 211 135 40 129 139 61 253 105 80 127 88 4 163 206 38 169 75 77 106 121 162 218 158 170 198 38 171 173 233 106 111 194 154 155 178 22 39 173 77 157 234 81 227 250 212 185 94 53 175 91 237 235 87 3 59 214 194 158 53 177 107 109 236 91 247 122 215 203 214 117 179 149 237 236 95 51 251 217 211 142 54 180 131 45 237 106 83 251 218 214 30 54 182 183 173 237 110 115 187 216 222 14 55 184 199 45 238 99 147 251 220 230 78 55 186 147 157 109 120 127 59 222 229 158 247 186 235 221 110 118 191 91 222 251 166 55 191 237 237 111 124 223 91 223 253 38 248 255 191 11 30 112 128 15 220 224 11 71 248 193 21 222 112 134 63 92 226 182 166 56 178 43 174 110 136 103 124 226 22 231 56 198 55 238 241 139 187 59 228 249 30 185 192 75 158 240 147 59 60 229 17 95 185 198 91 254 113 145 119 60 230 32 151 57 201 107 110 242 155 163 60 231 42 223 57 203 123 238 242 159 195 220 230 52 39 250 204 141 62 244 163 227 188 232 72 103 186 210 147 174 243 165 59 189 233 80 127 58 207 163 78 245 169 91 189 234 62 191 186 214 179 254 239 24 35 230 22 52 118 0 94 66 160 130 195 184 82 50 198 59 158 44 145 7 6 99 25 203 19 34 160 0 102 70 221 9 9 76 192 31 78 232 2 54 112 16 13 184 223 82 29 239 30 65 167 1 248 190 203 46 72 2 53 80 245 101 205 67 206 92 171 132 6 152 189 214 7 36 32 129 200 131 0 92 152 229 252 5 64 112 1 208 135 30 244 19 152 128 4 46 240 129 17 72 160 216 240 41 151 74 68 239 249 207 107 96 55 15 63 118 127 79 47 117 220 99 61 247 94 223 61 215 183 255 14 244 174 251 254 235 192 255 189 208 149 254 62 83 39 127 220 202 79 55 243 147 159 236 231 171 58 250 188 158 62 242 167 191 124 232 95 191 249 217 143 62 246 165 175 253 234 123 159 250 224 39 127 247 183 255 125 243 135 255 252 227 79 127 249 159 47 126 235 183 95 254 239 95 127 252 233 175 126 252 187 223 249 250 231 254 253 249 143 126 255 155 191 253 19 192 254 27 192 0 60 64 3 76 192 2 92 64 0 84 192 6 100 64 246 67 64 8 180 63 7 140 192 10 164 192 9 132 63 13 172 191 13 204 63 2 124 64 16 180 192 12 228 64 18 244 64 9 12 65 12 68 193 14 252 63 17 84 193 18 100 193 20 108 65 25 140 65 26 92 193 15 156 65 27 60 65 28 124 193 27 172 65 30 212 65 31 52 193 11 204 193 33 252 193 34 20 194 17 68 66 23 84 194 29 100 194 32 132 65 34 76 66 40 52 66 41 236 193 40 92 194 41 116 194 43 108 194 44 236 66 43 164 66 44 252 66 45 4 67 46 20 67 47 4 194 45 124 66 51 92 67 52 36 67 255 53 108 195 49 140 195 51 60 194 57 172 66 56 172 195 48 188 67 54 164 195 61 76 66 194 96 165 45 112 44 18 200 177 226 97 187 228 89 158 78 32 129 7 192 12 92 138 59 117 232 4 193 147 1 5 0 2 22 152 1 26 240 1 19 80 135 47 216 196 47 96 190 7 88 128 238 235 180 9 24 181 81 4 65 19 16 129 120 249 128 82 36 181 194 19 191 109 114 129 7 120 188 4 200 0 84 27 181 17 88 189 131 81 196 4 192 128 82 28 69 13 28 1 15 4 70 86 147 195 62 204 67 62 212 67 100 60 70 101 180 195 101 52 70 102 124 70 103 140 198 8 172 189 247 171 69 229 179 198 91 195 70 108 220 62 106 188 198 92 171 198 111 244 198 246 1 199 113 20 71 110 212 198 112 44 199 108 76 199 109 36 199 115 100 199 116 124 71 117 108 71 115 116 71 123 172 71 124 92 199 121 140 199 123 212 71 121 252 199 126 164 71 127 12 72 126 204 71 129 60 200 130 28 72 131 76 72 132 84 71 128 92 72 135 36 200 136 132 200 110 84 72 139 108 200 255 138 196 72 116 156 200 139 100 72 143 228 72 141 132 71 144 252 200 140 36 201 141 44 201 145 76 73 148 92 201 147 108 73 145 100 201 151 116 201 125 84 73 153 124 200 142 164 201 152 204 201 153 132 201 157 172 73 137 228 73 155 12 201 158 212 201 160 52 73 162 252 73 159 164 200 164 188 73 160 68 202 163 84 202 167 100 202 165 20 202 162 196 201 161 188 202 170 108 74 168 196 74 167 228 202 173 204 202 169 52 74 175 148 202 168 164 202 174 4 203 178 20 75 180 28 75 179 252 202 179 124 75 183 140 75 178 100 75 181 132 203 185 92 75 188 180 203 182 188 75 189 172 75 185 220 75 192 244 75 190 252 75 193 12 76 171 204 75 194 60 76 82 139 172 82 114 172 7 200 49 228 33 150 67 84 30 203 88 128 2 128 187 13 96 128 7 0 2 79 32 1 32 80 7 19 96 128 19 168 128 79 32 0 12 224 128 14 120 128 32 72 1 21 184 165 10 0 3 226 152 0 8 40 129 81 99 0 80 180 0 23 16 129 21 80 129 9 176 128 7 112 1 21 96 128 255 4 32 129 12 72 0 6 176 0 17 176 0 18 16 1 19 176 128 15 192 0 209 60 1 88 76 128 19 88 1 6 8 130 15 128 128 7 120 128 229 12 130 19 24 53 8 144 1 17 8 130 229 252 0 105 1 143 11 80 1 1 56 69 32 24 0 13 24 129 5 96 0 8 200 128 5 248 196 23 16 1 18 64 78 243 4 130 113 68 129 2 152 0 19 40 1 11 48 78 8 248 128 18 56 129 81 124 1 231 4 129 2 181 0 6 208 204 83 76 78 90 196 128 4 120 0 231 36 129 10 77 128 20 72 75 197 76 76 173 28 76 16 53 204 15 21 209 176 236 208 16 45 76 20 53 81 195 124 55 237 91 191 110 99 81 243 115 81 87 156 81 25 173 209 22 189 209 24 197 81 250 179 209 28 237 209 29 213 81 230 227 209 31 245 209 32 5 82 24 29 82 36 45 82 34 61 82 37 77 82 38 125 210 97 92 210 40 117 210 41 109 82 43 133 82 95 51 210 42 197 210 248 209 210 44 149 210 47 165 210 48 189 210 45 45 211 49 229 210 23 53 211 46 5 211 255 53 21 211 54 37 211 51 85 211 52 141 83 58 125 83 52 165 81 47 181 83 57 197 83 54 157 83 61 173 83 63 13 84 62 117 83 65 21 82 56 253 83 68 45 212 60 85 212 62 29 212 67 101 84 66 117 212 59 53 212 73 93 84 73 221 83 74 197 84 75 205 84 64 189 212 78 229 212 68 245 212 80 5 85 72 125 84 81 45 213 74 109 84 82 61 85 86 93 85 87 221 84 88 85 213 88 141 212 87 149 85 91 165 213 89 53 213 90 197 213 91 213 213 92 77 85 94 13 86 95 237 85 96 29 86 97 45 86 100 213 84 98 85 214 99 101 214 34 205 177 125 56 4 199 90 128 91 160 140 97 145 37 183 59 196 78 72 129 4 112 0 32 232 132 23 72 0 32 48 128 126 72 0 21 232 4 15 136 0 25 248 2 49 32 128 20 224 49 4 208 0 20 0 128 119 133 0 127 56 1 21 112 23 12 249 196 15 96 128 3 24 129 20 240 204 4 248 0 20 232 205 4 80 142 73 116 0 20 120 128 239 148 1 4 69 0 8 16 129 12 24 129 10 80 128 255 17 0 1 5 8 130 13 40 128 0 85 0 23 208 128 1 184 207 213 48 207 3 152 128 126 69 206 81 99 208 1 104 80 2 168 128 17 56 0 94 220 216 17 112 129 8 48 129 19 96 0 17 24 1 7 40 79 130 37 0 4 85 197 227 52 217 13 24 0 90 84 129 1 8 130 228 20 129 4 176 128 18 168 79 17 40 1 1 88 78 32 152 196 1 72 129 19 120 128 17 16 206 79 253 85 103 77 214 173 93 214 175 109 214 176 53 86 178 245 218 81 229 218 177 45 214 203 171 190 181 157 190 182 141 190 183 125 190 184 77 190 185 53 181 186 37 181 187 29 181 188 21 129 189 237 91 204 115 219 191 133 219 192 149 219 193 165 219 194 181 219 195 197 219 196 213 219 197 229 219 198 245 91 182 125 92 201 141 92 202 5 220 202 21 220 203 37 220 204 53 220 205 69 220 206 85 220 207 101 220 208 117 220 209 133 92 203 61 93 204 69 93 205 85 93 206 101 93 207 117 93 208 133 93 209 149 93 210 165 93 211 77 93 220 93 221 220 109 221 221 125 221 222 141 221 255 223 157 221 224 173 221 225 189 93 221 61 94 222 69 94 223 85 94 224 101 94 225 117 94 226 133 94 227 77 94 234 93 222 234 109 222 235 125 222 236 141 222 237 157 94 235 253 94 236 5 95 237 21 95 238 37 95 239 13 95 244 29 223 244 45 223 245 61 95 245 125 95 246 133 95 247 141 95 250 157 95 251 157 92 219 197 223 226 213 95 233 229 223 238 245 95 243 5 224 246 21 96 249 37 224 250 53 224 251 45 93 4 94 96 5 110 224 252 117 224 253 133 224 254 149 224 255 165 224 0 182 224 1 198 224 2 214 224 3 230 224 4 126 96 16 142 224 16 158 224 17 174 224 228 35 158 200 216 134 52 184 11 179 11 1 206 92 158 98 65 196 78 152 30 99 153 150 5 176 0 79 112 129 5 144 206 78 96 0 23 80 7 25 40 0 32 64 1 15 112 0 13 248 2 117 72 128 32 112 88 3 248 132 23 0 3 8 72 0 8 224 0 82 251 68 252 84 128 7 48 1 8 192 0 2 32 1 113 34 1 156 213 0 3 120 1 3 40 1 11 189 128 230 4 130 255 3 160 205 81 219 0 3 24 53 3 0 130 237 20 167 237 44 206 8 64 1 8 40 88 11 200 88 17 176 80 0 186 188 40 70 0 20 176 0 3 128 128 9 80 0 21 200 128 113 29 197 2 168 0 223 148 128 32 176 205 11 200 181 7 24 128 5 48 1 9 56 78 113 82 1 4 32 1 16 208 97 5 40 129 229 100 128 229 84 1 5 24 207 4 72 0 137 29 227 50 62 129 239 220 128 53 46 225 11 150 229 12 166 229 13 182 229 14 198 229 15 22 97 94 38 225 94 54 97 193 93 220 203 19 230 188 29 102 192 37 102 100 62 102 101 14 230 101 38 220 100 102 102 104 118 230 102 54 220 103 150 230 104 166 230 105 70 220 106 198 230 107 214 230 108 86 220 109 246 230 110 6 231 111 102 220 112 38 231 113 54 231 114 118 220 115 86 231 116 102 231 117 54 230 119 150 103 107 174 103 110 182 103 113 198 103 116 214 103 119 230 103 120 158 231 98 14 232 118 254 103 127 166 231 123 62 232 124 70 232 125 86 232 126 102 104 130 118 104 131 78 104 137 94 232 255 137 110 232 138 126 232 139 142 104 138 222 104 139 230 104 140 246 104 141 238 104 145 254 232 145 14 105 146 62 105 147 78 105 129 142 231 149 6 232 129 86 233 151 110 233 130 150 105 136 166 233 140 182 105 144 198 233 146 214 105 148 230 105 152 102 233 152 14 106 160 30 106 151 38 234 153 22 234 162 78 234 163 54 234 154 70 234 165 86 234 166 102 234 155 118 234 168 134 234 169 150 234 156 166 234 171 182 234 172 198 234 157 214 234 174 230 234 175 246 234 158 6 235 177 22 235 178 206 230 202 56 68 8 32 0 188 208 139 16 192 225 24 166 97 230 97 68 193 235 132 10 53 0 3 248 130 10 48 128 7 80 1 126 24 77 117 64 129 3 176 128 10 144 1 7 192 128 77 76 128 10 72 129 12 208 206 31 126 1 0 96 0 42 30 53 43 134 128 32 136 0 11 80 1 16 176 128 1 32 129 11 0 99 137 61 128 8 168 0 9 240 227 230 172 128 146 37 53 55 22 167 56 22 205 81 187 89 117 249 196 134 0 130 1 253 78 11 21 39 204 51 108 7 96 128 255 13 184 225 15 40 0 233 92 100 17 240 88 223 76 78 8 128 89 83 35 129 1 80 129 76 70 206 3 181 0 4 248 128 23 248 109 82 22 129 235 54 101 228 62 0 25 88 1 210 174 128 15 112 229 11 8 130 88 70 235 159 54 111 159 78 111 179 78 107 244 94 239 243 126 106 248 174 234 248 190 232 234 171 111 251 190 111 252 206 111 253 222 111 254 238 111 255 254 111 0 15 112 1 31 112 2 47 112 3 63 112 4 79 112 5 95 112 6 111 112 7 127 112 8 143 112 9 159 112 10 175 112 11 191 112 12 207 112 13 223 112 14 239 112 15 255 112 16 15 113 17 31 113 18 47 113 19 63 113 20 79 113 21 95 113 22 111 113 23 127 113 24 143 113 17 80 158 90 242 132 13 112 235 88 9 1 27 16 135 184 235 113 71 20 60 117 200 128 205 52 218 20 200 204 126 56 128 11 240 237 47 248 4 5 160 129 0 224 98 12 136 1 79 88 0 32 192 128 10 232 135 5 216 235 252 52 0 90 180 108 80 36 129 9 120 129 1 64 89 21 88 128 208 14 99 255 4 168 80 17 184 218 15 72 1 11 72 129 196 102 109 3 112 109 219 86 101 17 88 0 207 124 129 17 40 0 5 200 78 11 56 1 3 0 1 11 37 181 9 64 208 5 56 0 9 168 208 67 6 70 55 22 1 196 118 115 172 229 78 3 88 206 156 165 205 225 236 99 228 172 0 238 188 227 23 8 2 20 16 128 5 0 1 82 190 128 19 72 128 172 37 1 5 128 128 20 72 243 7 232 227 239 36 129 57 151 113 89 159 117 90 55 113 10 184 117 92 207 117 93 223 117 94 239 117 95 255 117 96 15 118 97 31 118 98 47 118 99 63 118 100 79 118 101 95 118 102 111 118 103 127 118 104 143 118 105 159 118 106 175 118 107 191 118 108 207 118 109 223 118 110 239 118 111 255 118 112 15 119 113 31 119 114 47 119 115 63 119 116 79 119 117 95 119 118 111 119 119 127 119 120 143 119 121 159 119 122 175 119 123 191 119 124 207 119 125 199 246 30 127 68 117 16 131 2 120 235 16 8 129 3 208 132 187 198 37 32 135 68 32 87 7 105 233 7 79 32 0 195 54 0 255 87 254 130 165 5 130 43 136 128 209 204 128 49 111 136 5 8 130 12 112 129 24 8 226 192 134 128 23 64 0 48 160 128 24 72 0 4 248 2 11 144 129 114 61 1 12 32 1 153 103 249 5 160 0 32 40 128 32 72 108 53 134 236 24 56 129 5 0 78 48 216 216 11 240 132 2 216 0 25 40 100 8 64 0 49 120 22 10 80 237 133 165 128 6 32 0 13 120 128 4 120 1 49 160 0 25 96 0 10 128 128 19 160 0 219 108 0 205 174 128 204 86 129 10 141 129 237 124 22 126 128 245 11 248 2 20 48 87 13 77 249 19 232 121 12 224 135 78 126 129 10 216 122 3 160 0 2 21 226 23 80 129 14 144 238 12 192 121 1 192 0 159 87 129 2 112 129 125 79 124 197 95 124 198 111 124 199 127 124 200 143 124 201 159 124 202 175 124 203 191 124 204 207 124 205 223 124 206 239 124 207 255 124 208 15 125 209 31 125 210 47 125 211 63 253 122 87 248 133 87 7 6 16 248 16 104 129 2 88 6 125 208 68 193 67 226 218 215 68 219 79 1 48 216 68 255 12 208 125 12 192 128 14 248 2 25 112 1 41 72 130 220 72 130 89 200 215 12 96 251 221 223 253 24 16 131 24 40 1 15 160 0 13 192 245 20 192 0 10 192 100 10 144 0 25 104 250 32 184 117 19 88 129 24 160 126 10 200 0 19 160 128 20 120 129 12 144 0 148 215 0 23 200 0 10 0 129 234 167 254 11 136 127 23 112 1 246 159 128 18 184 245 20 0 136 11 40 40 80 200 80 2 69 144 13 18 8 174 32 120 129 2 138 12 20 128 108 192 64 33 136 11 32 4 81 200 48 241 240 2 144 133 18 130 168 48 193 208 132 132 134 16 83 140 152 240 133 66 195 21 27 92 148 160 32 195 229 5 13 57 41 104 48 97 98 166 140 126 4 135 18 45 106 244 40 210 164 74 151 50 109 234 244 41 212 168 82 167 82 173 106 245 42 214 172 90 65 112 237 218 245 195 7 175 98 193 138 245 74 182 44 215 179 104 213 150 101 59 54 44 90 16 110 205 194 93 91 183 237 221 183 113 229 230 165 187 119 238 215 190 129 255 10 78 91 152 47 225 196 113 1 255 27 86 108 215 49 94 200 122 23 31 102 140 152 178 100 191 152 55 63 230 28 217 243 228 206 162 63 143 14 77 250 180 233 212 154 75 175 70 221 90 245 96 208 175 103 199 102 93 219 245 109 216 141 101 231 166 189 219 246 111 220 193 117 95 6 94 92 248 113 226 150 151 87 110 158 185 55 244 225 190 147 79 103 254 92 122 116 234 217 173 243 198 238 93 251 119 238 198 197 35 39 175 220 121 119 240 234 205 87 71 63 222 125 121 248 231 175 175 151 223 158 62 251 237 246 245 227 223 31 222 127 125 253 9 152 94 126 255 13 248 222 129 241 37 56 31 129 0 22 24 96 131 11 222 23 33 133 8 86 168 224 133 12 90 184 33 134 28 106 216 33 136 186 109 51 34 137 36 186 224 128 3 17 132 16 66 11 45 220 144 72 137 49 142 232 201 23 158 212 240 197 15 79 212 80 3 13 51 208 240 3 144 88 184 83 132 14 58 20 193 67 23 56 244 224 132 19 62 56 249 100 15 78 246 48 37 15 69 88 89 4 14 88 90 57 4 151 93 114 41 196 16 66 136 57 255 166 16 71 28 81 166 153 105 82 113 4 21 109 186 249 166 155 83 80 49 5 157 117 218 201 5 158 121 234 153 103 34 120 38 242 39 160 137 96 130 137 160 131 18 106 40 162 137 42 170 133 162 103 96 114 134 22 142 158 1 41 163 147 66 58 1 127 25 78 232 225 166 33 118 250 33 168 159 138 154 41 167 164 122 106 234 94 169 170 186 42 171 173 186 250 42 172 177 202 58 43 173 181 218 122 43 174 185 234 186 43 175 189 250 250 43 176 193 10 59 44 177 197 26 123 44 178 201 42 187 44 179 205 58 251 44 180 209 74 59 45 181 213 90 123 45 182 217 106 187 45 183 221 122 251 45 184 225 138 59 46 185 226 202 72 226 39 6 68 160 34 139 45 222 160 140 59 231 110 227 133 39 49 116 114 129 36 146 76 48 66 3 253 54 48 129 56 66 44 161 68 14 69 234 144 67 14 77 204 114 5 195 87 52 241 240 18 17 239 48 177 17 70 16 113 241 197 73 104 188 113 18 86 116 108 5 200 33 135 92 5 201 37 155 76 178 20 85 164 44 5 203 45 187 172 255 10 203 154 72 33 179 38 53 219 124 179 38 136 228 140 8 207 61 251 140 10 34 168 8 141 202 41 69 27 125 10 50 144 156 2 9 211 77 59 205 180 33 77 27 50 53 213 85 91 93 245 33 37 148 187 53 215 93 123 253 53 216 97 139 61 54 217 101 155 125 54 218 105 171 189 54 219 109 187 253 54 220 113 203 61 55 221 117 219 125 55 222 121 111 43 239 136 42 164 184 162 187 55 220 176 78 59 52 240 93 162 39 158 144 40 78 59 89 232 172 138 50 85 172 18 69 20 73 124 114 193 188 36 122 66 111 226 158 164 90 216 93 64 2 249 129 8 34 220 53 129 232 119 157 37 58 13 19 76 16 9 166 174 187 126 1 237 23 200 46 123 96 97 253 0 130 232 187 207 62 1 237 32 220 14 252 87 101 137 206 213 238 173 38 15 164 240 122 59 255 60 244 209 75 63 61 245 213 91 127 61 246 217 107 191 61 247 221 123 255 61 248 225 139 63 62 249 93 31 126 203 2 43 182 43 248 13 10 216 144 204 59 224 108 35 9 223 94 120 33 14 60 228 140 67 255 136 33 60 215 12 185 20 172 32 6 47 148 200 126 6 228 92 249 18 168 192 235 61 168 129 14 122 160 132 80 53 42 3 105 74 130 22 164 96 169 48 120 42 13 134 234 130 16 202 224 7 55 24 194 14 114 112 130 35 52 161 3 35 88 66 15 166 176 130 43 124 225 9 89 8 65 23 198 16 134 45 4 225 13 69 152 67 18 214 176 135 59 68 225 12 113 24 68 29 14 145 135 63 148 161 10 125 88 68 32 38 241 136 54 92 34 18 105 232 68 37 54 17 138 79 172 34 22 165 104 69 42 106 49 139 66 244 34 17 193 104 196 45 78 177 140 100 60 99 92 14 183 141 12 28 0 112 46 18 156 13 108 112 3 27 88 131 29 152 120 7 60 226 33 143 61 198 3 30 239 56 199 55 198 97 13 51 152 161 16 144 56 4 207 82 161 137 84 84 161 1 6 44 224 1 237 39 70 38 118 177 146 95 180 100 24 49 57 198 73 70 241 146 158 204 228 123 180 34 202 81 146 178 148 166 60 37 42 83 169 202 85 178 178 149 174 124 37 44 99 41 203 89 210 178 255 150 182 188 37 46 115 169 203 93 242 178 151 190 252 37 48 131 41 204 97 18 179 152 198 60 38 50 147 169 204 101 50 179 153 206 124 38 52 163 217 137 105 82 179 154 234 80 199 11 34 208 162 55 194 49 142 6 176 193 22 182 80 72 107 152 195 26 214 40 132 25 160 0 133 71 20 178 16 133 136 154 210 6 97 136 23 240 35 6 49 248 194 61 191 160 79 124 218 179 159 209 252 39 64 3 42 208 129 18 180 160 6 61 40 66 19 170 208 133 50 180 161 14 125 40 68 35 42 209 137 82 180 162 22 189 40 70 51 170 209 141 114 180 163 205 236 92 226 58 225 137 106 78 83 5 235 235 102 28 195 169 82 149 170 83 157 132 36 164 59 99 74 136 64 100 66 3 20 208 103 62 191 160 142 125 242 20 159 30 253 41 80 131 10 204 133 36 133 168 72 49 234 81 144 106 20 165 22 133 169 68 113 234 80 160 74 16 169 82 128 170 86 85 202 85 139 138 213 173 106 181 171 71 229 234 87 189 154 84 176 142 85 172 75 37 235 89 205 218 84 180 174 85 173 79 255 101 235 91 221 26 85 184 206 85 174 83 165 235 93 237 90 85 188 238 85 175 89 13 43 96 203 26 216 180 14 182 173 133 141 235 97 235 154 216 188 46 182 175 141 253 171 96 35 75 88 201 26 150 178 136 181 172 98 49 203 88 205 58 150 179 144 157 44 104 43 27 218 203 142 54 179 165 221 236 105 59 155 218 207 138 182 181 164 117 173 105 97 139 90 217 170 150 182 172 125 45 110 99 155 219 217 238 182 182 189 189 173 110 131 203 91 225 250 150 184 192 29 46 114 139 155 220 227 42 183 185 204 125 46 95 161 235 215 232 82 119 186 214 125 108 117 177 123 93 207 102 151 187 219 93 109 119 193 251 93 219 134 151 188 227 253 109 121 209 123 94 227 166 151 189 235 93 110 123 225 251 94 231 198 151 190 243 69 234 1 19 103 191 206 77 211 19 47 40 0 55 227 152 210 149 182 180 165 47 45 100 59 3 17 136 71 60 32 5 66 233 233 53 35 220 211 151 200 87 187 22 246 238 133 197 155 97 243 110 88 189 29 118 239 135 43 140 225 17 107 152 196 28 54 177 255 135 81 28 85 9 176 184 197 70 117 177 139 87 12 227 23 207 152 198 51 150 49 140 113 28 227 169 214 88 199 45 246 49 139 129 108 227 28 243 248 198 69 38 114 85 123 124 228 29 39 217 200 77 70 114 141 135 204 228 40 11 185 202 75 254 241 149 131 156 101 41 99 249 201 83 86 178 151 187 76 229 45 91 57 204 90 54 51 151 207 60 102 52 151 121 205 110 6 243 155 157 28 103 40 195 185 206 114 182 51 157 239 172 231 60 243 249 203 123 246 115 159 197 140 103 64 19 90 208 127 54 116 160 213 60 104 68 23 90 209 135 118 116 162 211 44 233 54 47 26 210 141 158 52 153 51 205 102 77 207 249 210 148 126 52 166 55 45 234 78 51 186 212 150 54 117 168 73 125 234 85 167 186 210 173 6 245 167 35 29 107 79 115 218 213 179 70 245 173 89 157 235 87 203 186 214 176 246 117 175 71 109 107 96 211 90 216 191 54 118 176 85 205 235 98 43 123 215 206 38 54 174 161 173 107 105 47 59 218 200 102 246 176 175 109 237 102 83 251 217 218 158 246 183 171 255 13 110 110 135 219 219 228 62 119 182 209 125 108 117 39 59 221 238 94 183 139 73 68 192 72 130 212 19 26 72 64 8 80 58 224 112 22 24 10 233 60 112 76 31 129 4 23 212 96 154 18 214 103 132 19 190 83 125 154 251 221 237 134 55 196 31 46 113 108 71 156 226 19 223 182 195 45 174 113 140 87 156 227 23 31 119 198 163 13 102 51 63 213 201 36 7 114 201 145 124 242 44 167 156 201 43 127 249 200 99 110 114 153 171 156 230 46 183 121 151 97 62 243 157 215 156 231 55 247 121 206 113 126 102 157 247 188 232 63 55 122 208 129 62 116 161 35 149 233 45 79 58 210 151 174 244 166 79 253 233 82 143 58 213 177 110 245 172 31 189 235 80 247 250 213 193 206 245 175 147 61 236 101 31 187 217 211 142 246 181 111 189 237 40 127 59 203 225 78 116 177 187 61 238 118 159 251 217 235 142 119 181 235 221 233 114 247 251 221 1 191 119 182 255 189 234 133 215 250 225 233 158 248 188 47 158 239 141 39 124 224 13 31 121 196 79 94 241 149 103 252 229 29 159 121 255 200 15 190 239 146 239 252 227 61 79 121 208 111 94 244 150 39 61 234 5 175 250 207 175 126 244 173 63 253 235 49 159 122 214 211 222 245 181 135 253 237 101 31 123 205 207 222 246 190 199 253 239 117 159 123 222 239 158 243 187 175 95 36 189 16 9 8 32 96 142 2 94 41 191 11 252 82 119 154 65 224 47 240 130 53 21 126 205 78 104 127 167 165 15 61 248 191 47 254 222 3 191 252 194 15 62 241 135 111 124 245 155 254 252 230 79 63 250 215 31 127 183 23 191 253 240 127 191 252 241 111 255 252 187 191 255 247 247 63 255 253 159 0 6 32 1 238 159 1 134 31 249 1 224 1 142 95 253 33 96 3 50 32 251 57 96 4 66 224 252 73 96 5 82 160 254 89 96 6 98 160 2 106 96 7 114 224 0 46 96 2 134 160 7 146 32 8 22 96 9 162 224 9 138 224 3 142 160 10 186 32 11 78 32 12 166 96 12 94 224 12 174 32 13 230 32 14 238 224 13 246 96 11 254 160 12 2 161 13 10 225 6 250 96 16 30 225 16 34 97 17 214 95 190 52 255 161 26 141 72 54 64 192 2 180 0 56 17 152 244 29 24 20 108 193 9 108 128 72 133 148 72 81 147 194 145 84 194 17 225 7 26 97 18 158 225 18 42 97 25 146 161 9 154 97 26 162 225 26 170 95 148 205 33 29 214 161 29 222 33 30 230 161 30 238 33 31 246 161 31 254 33 32 6 162 32 14 34 33 22 162 33 30 34 34 38 162 34 46 34 35 54 162 35 62 34 36 70 162 36 78 34 37 86 162 37 94 34 38 102 162 38 110 34 39 118 162 39 126 34 40 134 162 40 142 34 41 150 162 41 158 34 42 166 162 42 174 34 43 182 162 43 190 162 40 54 161 44 58 225 185 128 129 36 220 66 16 88 64 2 200 81 21 110 65 75 133 147 13 32 193 9 188 128 12 72 194 5 232 23 231 240 23 73 41 99 53 193 162 51 62 35 52 70 163 52 146 226 150 17 213 28 86 35 54 162 153 53 142 217 53 106 99 54 118 35 56 114 163 56 42 89 56 146 227 56 26 89 57 162 227 57 18 89 58 178 227 58 238 88 59 194 227 59 98 89 60 210 227 60 106 255 89 61 226 227 61 110 163 57 246 163 58 250 163 59 2 164 60 10 164 61 18 164 62 26 36 63 254 163 66 6 228 66 14 100 67 22 228 67 30 100 68 38 36 67 86 164 67 90 36 68 98 164 68 106 36 69 94 164 71 102 228 71 110 100 72 118 36 72 150 164 72 154 36 73 158 164 74 166 36 75 126 227 62 186 36 66 194 228 68 202 36 71 210 228 72 218 36 74 226 228 74 234 100 75 122 163 79 230 99 79 2 37 79 14 229 79 190 100 81 198 228 81 206 100 82 214 228 82 222 100 83 230 228 83 238 100 84 6 165 81 10 229 84 18 165 85 102 101 85 110 37 82 106 101 87 114 165 82 122 101 88 130 37 83 138 101 89 146 165 83 154 101 90 162 37 84 170 101 91 178 165 84 186 101 92 194 37 85 126 165 93 142 229 93 186 88 36 236 229 45 244 229 44 254 229 44 206 15 66 168 0 9 156 192 9 60 192 9 88 0 4 84 192 10 104 3 24 100 206 35 25 208 230 48 99 189 141 20 53 201 101 93 226 165 102 158 101 94 174 101 103 190 229 103 206 255 101 104 102 38 103 110 166 103 154 38 104 162 166 104 170 38 105 230 24 29 106 163 72 92 227 107 206 166 108 214 38 149 209 230 109 218 102 143 225 230 110 234 230 141 241 230 111 250 166 107 10 103 140 1 231 112 230 38 114 246 102 114 6 231 114 30 167 114 62 39 115 66 167 115 70 39 117 78 167 117 22 39 113 254 152 113 98 103 115 114 167 116 122 103 117 130 231 117 106 103 118 6 217 118 146 103 119 162 231 119 170 103 120 178 231 120 154 103 121 198 102 122 194 231 124 202 231 122 210 231 125 218 103 123 226 231 126 234 231 123 250 167 120 6 168 123 10 40 127 254 39 108 30 232 121 22 40 129 2 232 128 54 168 130 58 40 131 62 168 132 70 40 133 34 104 124 90 104 125 98 104 126 106 104 127 114 168 129 38 104 133 130 168 135 46 232 136 66 104 137 78 232 137 134 232 133 138 40 139 174 168 139 102 104 139 194 232 139 110 104 140 210 232 140 118 104 141 226 232 141 126 232 142 146 104 142 242 168 140 6 169 141 10 169 142 18 41 144 14 41 146 22 105 146 30 255 169 146 54 41 147 62 169 143 246 168 137 254 168 128 106 131 149 106 195 94 70 130 54 244 165 95 118 41 96 206 226 45 208 143 44 158 11 1 141 8 189 213 219 126 213 27 149 78 169 148 162 232 154 186 105 155 170 168 145 70 233 156 178 105 157 194 233 157 202 233 146 210 233 158 218 105 159 226 233 199 137 155 160 54 92 199 129 92 161 14 106 183 37 106 185 41 42 187 109 156 161 6 42 161 66 42 163 134 220 163 58 42 162 46 42 166 54 170 199 89 106 164 114 234 164 30 106 167 110 170 168 86 234 168 94 170 166 146 42 170 154 42 165 170 42 168 126 170 164 102 234 170 134 106 170 202 42 171 190 234 169 214 170 167 194 106 171 234 170 173 198 170 171 230 234 173 210 170 176 254 106 169 14 43 175 2 171 175 30 107 177 18 235 172 50 43 174 46 171 178 54 107 180 62 171 180 6 171 179 26 171 181 78 171 144 105 3 53 92 169 183 90 105 150 242 101 36 112 41 185 126 233 152 230 75 253 204 139 100 110 206 153 122 66 182 190 107 178 194 235 174 202 107 175 206 255 107 188 222 171 189 230 107 189 238 107 177 149 206 28 250 107 148 1 108 141 9 236 140 17 44 140 25 172 139 33 108 139 41 44 139 49 172 4 56 44 196 138 192 191 74 108 192 82 236 192 90 108 193 98 236 193 106 108 194 114 236 194 122 108 195 130 236 195 138 108 196 78 172 201 86 236 201 94 108 202 102 236 202 110 108 203 118 236 203 126 108 204 134 236 204 142 108 205 150 44 202 230 172 202 234 44 203 242 172 203 250 44 204 2 173 204 10 45 205 18 173 205 26 45 206 238 172 210 246 236 210 254 108 211 6 237 211 14 109 212 22 237 212 30 109 213 38 45 211 102 173 211 106 45 212 114 173 212 122 45 213 130 173 213 138 45 214 110 173 217 118 237 217 126 109 218 134 237 218 142 109 219 150 45 218 198 173 218 202 45 219 210 173 219 218 45 220 206 173 222 214 237 222 222 109 223 230 45 223 6 174 223 10 46 224 14 174 225 22 46 226 146 172 226 222 236 226 34 109 227 94 237 227 146 109 228 190 237 228 226 109 229 254 237 229 18 110 230 30 238 230 38 46 227 126 255 174 227 130 46 228 138 174 228 146 46 229 154 174 229 162 46 230 170 174 230 178 46 231 186 174 231 134 174 236 142 238 236 150 110 237 158 238 237 166 46 140 81 3 239 246 174 239 126 43 240 238 37 150 222 194 184 114 233 45 30 111 96 210 207 136 40 111 140 68 146 188 237 87 236 210 174 244 218 238 244 226 110 245 234 238 245 174 110 238 106 111 246 182 238 246 122 111 247 190 238 247 138 111 248 2 46 5 48 236 249 130 108 250 82 25 250 182 175 250 186 47 251 190 175 252 198 47 253 246 24 252 218 239 252 226 111 253 222 216 253 242 111 254 250 239 254 230 88 255 10 240 255 18 112 0 199 216 0 35 112 1 43 240 1 255 88 2 59 240 2 67 112 3 7 217 3 83 112 4 91 240 4 47 68 5 107 240 5 115 112 6 175 175 254 134 48 0 139 176 1 147 48 3 155 176 4 163 48 6 171 176 7 179 48 8 143 48 12 151 112 12 159 240 12 167 112 13 175 240 13 183 112 14 191 176 12 247 48 13 251 176 13 3 49 14 11 177 14 19 49 15 255 48 18 7 255 113 18 15 241 18 23 113 19 31 177 18 71 49 19 75 177 19 83 49 20 79 49 22 87 113 22 95 177 22 119 49 23 127 241 6 131 113 7 139 241 7 135 177 25 143 241 25 151 49 26 175 177 26 183 177 11 167 241 27 179 113 28 187 241 14 195 113 29 203 241 29 211 177 17 219 241 30 227 113 31 235 241 19 243 113 32 251 241 32 3 178 21 11 242 33 19 114 34 27 242 22 35 114 35 43 242 35 51 178 23 63 48 39 84 178 37 115 130 239 246 174 149 118 43 240 122 107 184 142 235 184 30 111 152 126 233 242 62 161 253 56 242 36 67 114 42 75 50 25 207 177 43 231 241 43 255 113 44 23 242 44 47 114 45 71 242 45 175 114 46 183 242 14 147 78 233 96 44 65 248 50 193 6 243 47 3 51 5 8 179 49 35 243 142 41 51 150 49 179 150 57 51 81 65 51 49 255 242 50 23 115 53 83 115 51 91 115 54 99 243 51 107 115 55 115 115 52 123 115 56 131 243 52 15 243 49 139 115 57 39 51 58 159 51 57 179 179 57 75 179 59 171 115 59 195 255 51 61 175 115 61 207 179 61 231 51 62 239 243 59 235 115 63 243 179 60 255 179 64 7 52 65 95 243 64 27 116 65 111 243 65 43 116 66 127 243 66 59 116 67 143 243 67 75 116 68 167 51 66 95 52 67 99 52 68 107 52 69 115 180 69 103 52 72 111 116 72 119 244 72 127 180 72 159 52 73 163 180 73 167 52 75 175 180 75 199 179 71 195 116 73 203 180 74 211 116 75 219 244 75 223 243 68 231 180 63 87 52 78 255 180 78 251 116 80 199 244 80 207 116 81 215 244 81 223 116 82 243 52 64 19 117 79 59 117 83 27 245 83 75 117 84 35 245 84 91 117 85 43 245 85 107 117 86 51 245 78 3 245 86 123 181 80 135 53 88 119 117 89 127 245 82 159 245 88 155 117 90 183 53 89 187 53 91 191 181 92 199 53 93 163 245 92 219 117 93 175 53 94 239 181 94 247 53 84 243 245 95 251 53 85 63 180 45 20 182 45 92 50 98 99 114 38 103 114 39 107 169 99 23 111 40 143 50 41 151 8 186 202 27 92 3 246 96 11 54 86 99 246 102 107 255 54 87 115 246 103 123 182 88 7 54 105 103 118 105 119 246 105 135 118 106 231 52 88 144 78 151 181 182 107 159 25 108 91 236 80 204 246 107 183 54 109 7 51 110 223 54 88 228 246 49 239 182 108 3 183 81 217 118 112 247 54 111 199 246 112 11 119 109 43 183 110 27 119 113 35 247 114 59 119 114 75 119 116 67 119 115 91 247 111 83 247 117 251 54 113 79 55 118 119 119 117 115 55 115 103 247 119 143 55 120 111 247 113 139 183 118 147 183 122 151 247 122 159 55 123 167 183 124 63 119 123 215 247 124 123 183 125 211 247 125 135 247 126 163 183 126 255 55 126 247 119 124 3 56 127 19 184 127 7 184 129 15 56 130 47 120 129 51 248 129 55 56 132 63 184 132 43 120 132 83 248 132 195 55 134 155 183 134 191 247 134 187 183 135 231 183 131 91 184 136 103 56 135 151 248 135 11 56 137 159 120 130 167 56 136 87 56 139 163 120 135 183 248 133 199 56 140 155 184 140 143 56 141 175 120 142 135 248 139 235 184 141 215 184 138 243 248 142 187 248 144 207 248 143 251 255 120 144 19 249 145 11 249 146 43 121 146 27 249 147 227 120 147 67 249 141 247 56 147 71 185 149 59 121 149 23 185 148 99 57 151 103 57 149 3 249 150 79 121 151 143 185 151 147 57 152 151 185 152 175 57 146 155 185 155 179 249 149 191 121 155 195 185 150 211 249 129 27 54 158 231 121 98 39 246 98 115 107 99 99 41 95 246 101 241 254 37 137 140 233 136 164 57 162 127 185 162 163 249 162 159 185 163 203 121 156 219 185 154 207 57 165 71 122 165 215 249 165 135 121 166 79 122 136 127 133 192 18 132 167 231 118 168 99 217 168 107 89 169 19 213 169 131 122 90 124 58 5 164 122 171 175 186 168 195 58 169 203 186 169 211 58 170 219 186 170 203 5 171 187 58 175 227 250 171 235 122 172 3 251 172 11 123 173 19 251 173 27 123 174 251 242 176 43 123 177 51 251 177 59 123 178 239 186 175 247 58 178 255 58 180 91 187 180 87 59 181 95 251 182 103 59 183 79 59 184 107 123 184 127 187 184 151 59 185 159 187 183 167 123 176 163 251 186 171 251 178 187 123 179 195 255 251 179 203 123 180 183 187 189 191 251 189 199 123 190 207 251 190 215 59 190 255 187 190 3 60 191 11 188 191 7 188 193 15 252 193 23 60 194 47 188 194 55 60 182 247 251 195 19 124 196 39 252 196 51 124 197 59 124 183 67 124 198 75 252 198 83 124 199 91 252 199 99 252 184 211 251 197 151 124 200 155 252 200 107 124 202 115 252 202 123 124 203 131 252 203 139 188 185 147 252 201 215 124 204 163 252 204 171 124 206 179 252 206 187 124 207 195 252 207 203 60 187 243 252 208 251 124 209 3 253 209 11 61 205 223 188 205 7 61 206 39 253 211 47 189 211 55 61 212 83 189 212 87 61 211 103 253 212 107 61 214 111 189 215 119 61 216 95 189 216 235 124 209 111 130 217 79 195 38 76 131 218 231 57 158 239 57 98 47 54 239 118 50 160 103 41 185 74 118 190 216 253 54 88 61 217 143 61 209 243 189 209 251 61 210 3 190 210 239 61 225 247 125 225 255 253 225 7 126 226 15 190 225 55 62 197 7 0 228 71 190 228 79 62 229 87 190 229 95 62 230 103 190 230 111 255 62 231 119 190 231 127 62 232 135 190 232 143 62 233 151 190 233 159 62 234 167 190 234 175 62 235 183 190 235 191 62 236 199 190 236 207 62 237 215 190 237 223 62 238 231 190 238 239 62 239 247 190 239 255 62 240 7 191 240 15 63 241 23 191 241 31 63 242 39 191 242 47 63 243 55 191 243 63 63 244 71 191 244 79 127 236 215 66 54 92 63 246 155 125 54 156 61 219 183 253 97 239 185 36 116 2 7 80 63 249 151 191 249 159 63 250 167 191 250 175 63 251 183 191 251 191 63 252 199 191 252 207 63 253 215 191 253 223 63 254 231 191 254 239 63 255 3 68 0 129 3 9 22 52 120 16 97 66 133 11 25 54 116 248 16 98 68 137 19 41 86 180 120 17 99 70 141 27 57 118 244 248 17 100 72 145 35 73 150 52 121 242 100 45 149 43 87 102 115 249 50 219 52 153 182 104 214 172 201 201 22 39 47 28 80 246 244 249 19 104 80 161 67 137 22 53 122 20 105 82 165 75 153 54 117 250 20 106 84 169 83 169 86 181 122 21 107 86 173 91 185 118 245 250 21 255 108 88 177 99 201 150 53 123 22 109 90 181 6 165 181 149 198 18 110 45 152 46 55 213 149 57 173 166 182 48 107 249 246 245 251 23 112 96 193 131 9 23 54 124 24 113 98 197 139 25 55 118 252 24 114 100 201 147 41 87 182 124 25 37 54 205 109 177 185 109 27 183 229 220 186 146 48 151 54 125 26 117 106 213 171 89 183 118 253 26 118 108 217 179 105 215 182 125 27 119 110 221 70 105 209 210 252 251 183 180 206 158 63 199 205 166 110 119 114 229 203 153 55 119 254 28 122 116 233 211 169 87 183 126 29 123 118 237 219 5 206 242 62 139 22 248 222 192 129 19 47 222 137 123 122 245 235 217 183 119 255 30 126 124 249 243 233 215 183 127 31 191 237 104 251 191 247 7 47 30 27 223 200 107 139 180 252 12 60 16 193 4 21 92 144 193 6 29 124 16 194 8 37 156 144 194 146 174 185 240 194 253 248 243 207 187 222 60 212 204 150 10 69 28 145 196 18 77 60 17 197 20 85 92 145 197 22 93 44 17 26 89 100 196 144 70 13 55 236 207 55 158 94 220 145 255 199 30 125 252 17 200 32 133 28 146 200 34 141 52 18 150 88 98 129 102 201 24 103 172 49 154 107 108 156 69 155 35 173 188 18 203 44 181 220 146 203 46 189 252 18 204 48 143 130 133 204 50 149 108 210 73 89 104 204 16 155 189 196 124 19 206 56 229 156 147 206 58 237 188 19 207 60 91 123 134 207 62 203 52 83 73 104 210 84 179 74 61 13 61 20 209 68 21 93 148 209 70 29 125 116 78 103 36 117 166 207 74 255 36 243 76 104 174 113 19 210 78 61 253 20 212 80 69 29 149 212 82 77 189 172 153 84 155 153 116 210 103 40 245 243 207 16 79 157 149 214 90 109 189 21 215 92 117 221 21 215 87 124 85 85 85 103 86 101 181 210 103 190 224 21 217 100 149 93 150 217 102 157 125 22 90 251 152 153 214 215 106 95 1 118 88 86 175 137 150 219 110 189 253 22 220 112 197 29 151 92 175 92 113 101 218 116 173 173 22 91 103 54 41 23 222 120 229 157 151 222 122 237 189 87 217 115 245 61 55 93 106 215 189 214 19 124 5 30 152 224 130 13 62 24 255 225 132 79 108 133 97 134 247 229 183 95 106 159 81 152 226 138 45 190 24 227 140 53 222 216 52 86 88 105 24 228 86 30 134 120 91 142 77 62 25 229 148 85 94 153 229 150 73 242 24 102 143 67 22 89 100 125 107 113 25 231 156 117 222 153 231 158 125 46 119 153 160 151 137 25 230 153 69 46 240 231 164 149 94 154 233 166 157 126 26 76 161 165 30 154 104 153 25 214 17 234 172 181 222 154 235 174 189 254 250 189 85 196 22 123 234 160 89 161 218 99 102 192 94 155 237 182 221 126 27 238 184 27 27 155 110 178 203 30 218 25 185 245 222 155 239 190 253 254 27 240 158 148 25 124 240 186 233 150 58 150 192 21 95 156 241 198 29 127 28 108 194 37 87 102 21 202 13 95 37 26 200 53 223 156 243 206 61 255 124 96 101 84 153 124 114 195 165 1 29 245 212 85 95 157 245 214 63 85 5 118 210 73 31 155 19 215 109 191 29 247 220 117 223 189 71 216 125 247 93 116 217 149 65 154 247 226 141 63 30 249 228 149 215 78 147 223 157 255 93 242 24 150 159 158 255 250 234 173 191 30 251 201 52 217 190 249 230 159 23 125 116 101 176 206 158 252 242 205 63 31 253 244 159 226 126 123 85 186 127 62 118 245 229 159 159 254 250 237 191 223 33 77 82 97 159 125 247 157 87 6 127 1 20 224 0 9 88 192 221 165 2 129 8 212 31 255 218 215 188 85 24 16 130 17 148 224 4 41 24 183 4 94 80 129 251 227 223 42 56 85 65 15 126 16 132 33 20 33 199 146 81 66 12 94 112 129 219 123 224 8 89 216 66 23 190 16 134 223 66 69 9 105 152 140 19 38 80 19 43 140 225 14 121 216 67 31 254 208 81 168 16 226 12 107 104 66 12 46 3 136 73 84 226 18 153 216 196 35 13 113 136 201 32 98 13 19 136 68 39 94 17 139 89 212 226 22 23 116 138 83 64 49 138 83 164 161 21 185 88 70 51 158 17 141 105 116 142 23 189 8 70 48 210 144 21 106 148 227 28 233 88 71 59 78 6 25 121 60 5 50 216 216 70 55 198 241 142 129 20 228 32 9 89 72 175 228 17 145 123 236 163 27 91 97 72 71 62 18 146 145 255 148 228 73 142 81 73 68 234 81 145 108 20 34 32 39 217 73 79 126 18 148 161 12 64 49 140 97 140 74 90 242 146 153 60 69 35 69 217 74 87 190 18 150 101 44 198 44 73 105 202 83 162 82 143 172 140 229 46 121 217 75 95 138 144 24 196 160 229 44 75 121 75 84 234 242 151 201 84 230 50 153 137 190 97 4 19 154 195 44 165 45 43 233 138 102 94 19 155 217 212 102 238 134 241 76 104 6 115 152 196 52 165 218 182 89 78 115 158 19 157 128 19 134 48 186 233 205 111 134 179 24 214 76 231 60 233 89 79 123 58 109 157 235 108 167 59 163 57 75 114 222 19 160 1 21 232 64 51 102 10 131 10 195 20 249 220 39 49 220 217 12 130 62 20 162 17 149 40 188 12 90 209 124 42 116 161 175 152 232 70 57 218 81 143 226 10 24 192 8 70 69 45 122 81 118 14 195 161 31 85 233 74 89 218 210 67 133 84 164 35 37 105 66 77 58 49 151 222 20 167 57 213 233 149 126 241 11 152 2 99 166 37 21 134 77 119 90 84 163 30 21 169 36 234 169 255 79 127 26 210 96 136 212 20 193 24 41 81 147 90 85 171 94 21 171 242 241 197 86 151 218 211 166 66 213 20 121 203 234 88 201 90 86 179 62 103 171 105 237 42 83 127 26 12 177 158 21 174 113 149 235 92 81 147 86 181 174 181 169 137 163 235 94 249 218 87 191 18 166 23 189 176 43 87 241 218 83 104 252 21 177 137 85 236 98 185 18 88 199 58 118 176 190 88 234 97 25 91 89 203 94 22 179 66 33 5 41 30 251 216 200 250 130 178 153 21 237 104 73 91 90 138 108 118 179 157 133 172 93 67 107 90 215 190 22 182 164 69 45 106 85 27 216 180 182 54 182 185 213 237 110 247 58 219 217 214 54 176 178 224 237 112 137 91 92 172 242 194 183 191 85 45 45 140 219 92 231 62 151 165 188 144 110 114 149 27 88 230 66 23 187 217 213 46 64 119 177 11 233 34 151 186 169 237 197 117 183 91 94 243 158 151 153 221 237 238 119 195 187 89 242 162 23 190 241 149 239 39 213 171 222 239 130 215 183 239 157 239 126 249 219 223 58 214 183 190 247 245 237 44 252 255 91 96 3 31 88 139 0 86 176 128 73 65 96 4 63 24 194 17 134 97 40 66 161 96 0 223 215 193 18 214 240 134 57 108 64 10 83 216 194 10 206 112 135 73 92 98 19 155 239 195 31 14 177 122 111 118 98 23 191 24 198 199 75 241 140 67 252 174 24 223 24 199 57 70 221 140 121 92 225 250 102 67 199 65 22 242 144 3 215 99 35 119 23 200 68 86 242 146 153 252 53 35 63 57 201 77 150 242 148 169 220 179 39 27 57 202 85 214 242 150 185 172 177 92 228 226 202 51 206 114 151 201 92 102 51 223 235 203 105 14 115 40 198 124 102 55 191 25 206 220 74 243 156 193 140 229 56 223 25 207 121 230 21 157 249 92 231 15 183 89 207 129 22 244 160 31 213 103 67 131 25 208 132 86 244 162 25 61 167 67 27 58 209 141 150 244 164 41 109 165 71 247 57 210 149 214 244 166 57 205 34 92 224 226 210 115 206 116 167 73 93 106 83 63 232 211 169 254 244 163 71 125 106 87 191 26 214 242 81 245 172 83 77 231 86 199 26 215 185 214 117 117 104 221 107 255 85 223 122 215 193 22 246 176 111 227 107 99 3 155 216 201 86 246 178 77 99 108 95 35 155 217 209 150 246 180 19 227 236 94 67 155 218 217 214 246 182 209 98 109 90 99 155 219 225 22 247 184 175 226 237 89 131 155 220 233 86 247 186 141 98 238 95 179 27 222 241 150 55 82 220 157 106 116 207 27 223 249 214 119 68 234 253 233 123 239 27 224 1 23 120 191 113 241 111 129 31 28 225 240 38 184 193 19 222 112 135 111 123 225 15 151 248 196 231 29 113 138 95 28 227 226 182 120 198 57 222 113 102 111 220 227 33 23 121 174 65 62 114 147 159 188 211 37 71 249 202 89 190 104 149 183 28 230 49 143 51 193 245 43 115 155 223 188 203 4 31 49 206 121 222 243 38 235 220 231 65 23 250 144 129 62 116 163 31 221 197 69 71 250 210 153 30 97 165 55 29 234 81 223 239 211 165 94 117 171 107 151 234 87 215 250 214 135 155 117 174 127 29 236 165 245 122 216 201 94 246 197 142 221 236 105 87 251 92 209 190 118 183 191 29 171 4 47 25 220 233 94 119 171 18 255 28 22 118 215 251 222 119 138 119 190 255 29 240 42 245 123 224 9 95 248 135 14 222 240 137 87 252 60 17 191 120 199 63 254 154 141 135 252 228 41 191 75 201 87 30 243 153 247 228 229 53 223 121 207 19 146 243 159 23 253 232 213 24 122 210 159 30 245 88 36 248 91 83 223 122 215 51 145 224 41 125 253 236 105 207 195 216 215 30 247 185 103 225 237 117 223 123 223 75 144 247 191 23 254 240 239 23 124 226 31 31 249 230 51 126 242 153 223 252 229 17 252 159 206 151 254 244 119 71 112 121 82 31 251 217 103 157 245 181 223 125 239 123 142 251 223 23 255 248 23 23 126 242 159 31 253 114 51 127 250 217 223 126 175 173 223 253 241 151 63 211 8 142 204 249 223 31 255 58 35 56 39 243 223 127 255 167 108 255 254 79 0 7 80 99 2 144 0 15 16 1 15 198 0 19 144 1 27 144 94 22 208 1 35 80 2 193 5 2 39 208 2 47 144 89 8 142 140 48 144 3 59 48 87 8 78 135 60 80 4 71 176 84 64 144 4 79 16 5 63 197 4 83 144 5 255 91 48 81 86 208 5 99 80 6 233 4 6 103 208 6 111 208 75 106 16 7 119 144 7 141 68 7 123 16 8 131 144 71 8 14 128 132 208 8 143 208 211 250 173 8 145 144 9 155 80 68 136 208 9 163 80 10 81 77 9 167 208 10 175 208 64 160 16 11 183 144 11 225 67 11 187 16 12 195 80 59 190 80 12 203 208 12 161 131 224 84 225 12 215 144 13 149 35 13 219 16 14 227 144 54 222 80 14 235 208 14 85 131 14 239 80 15 247 144 50 242 144 15 255 16 16 21 131 224 52 33 16 11 209 16 9 99 16 59 232 16 23 145 17 205 98 16 27 17 18 35 81 44 30 81 18 43 209 18 177 130 18 47 81 19 55 209 41 8 46 21 20 145 19 67 81 20 131 130 224 146 97 20 79 17 21 125 162 20 83 145 21 91 49 36 86 209 21 99 81 22 47 2 22 103 209 22 111 177 33 8 14 21 112 145 23 123 209 32 116 209 23 131 177 23 129 81 24 139 113 22 137 209 24 147 145 21 145 81 25 155 81 20 9 238 24 156 81 26 67 17 26 167 209 26 255 47 177 26 175 81 27 33 49 27 183 209 27 13 177 27 191 81 28 249 144 224 134 97 28 207 113 15 9 78 24 208 145 29 235 80 29 219 17 30 219 240 29 227 145 30 203 112 30 235 17 31 185 144 224 126 33 31 251 17 11 9 206 23 252 81 32 165 16 32 7 210 32 153 176 32 15 82 33 131 48 33 23 210 33 113 144 224 120 225 33 39 210 6 9 14 23 40 18 35 93 208 34 25 46 35 59 210 255 124 141 213 60 82 36 61 16 36 15 141 35 71 18 37 219 175 36 33 45 37 91 50 2 87 18 211 92 82 38 19 208 220 108 109 38 111 114 0 55 18 39 119 178 255 116 146 39 127 82 254 124 18 40 135 50 253 132 146 40 143 82 252 140 18 41 151 50 251 148 146 41 159 210 249 156 18 42 167 242 248 164 146 42 175 210 247 172 18 43 183 178 246 180 146 43 191 178 245 188 18 44 199 114 244 196 146 44 207 82 243 204 18 45 215 114 242 212 146 45 223 82 241 220 18 46 231 50 240 228 146 46 239 82 239 236 18 47 247 242 237 244 146 47 255 210 236 255 44 178 230 0 147 48 233 206 34 119 174 48 19 211 237 14 83 49 27 179 47 219 206 49 35 243 234 24 83 50 43 19 236 40 211 50 51 115 50 33 83 51 59 83 232 48 211 51 67 19 233 64 83 52 75 51 232 72 211 52 83 243 230 80 83 53 91 179 229 88 211 53 99 211 228 44 114 238 100 211 54 103 211 244 110 83 55 41 206 34 243 110 55 127 147 227 122 19 56 135 243 226 132 147 56 143 211 225 140 19 57 151 115 224 114 147 57 159 115 221 148 19 58 167 51 222 164 147 58 175 51 221 172 19 59 183 147 219 180 147 59 191 115 218 44 146 245 192 147 60 163 205 34 101 175 60 211 83 217 206 83 61 219 51 217 216 211 61 227 115 215 224 83 62 235 19 214 232 211 62 243 179 212 240 83 63 251 83 211 44 50 250 252 83 64 37 205 34 175 111 64 15 212 229 224 15 65 23 84 207 10 148 65 31 52 208 28 20 66 39 116 230 20 148 66 47 148 203 36 20 67 55 52 67 235 143 67 63 84 203 44 146 255 64 148 68 149 76 68 75 20 69 77 180 2 255 83 148 69 99 236 68 91 20 70 93 116 69 99 148 70 57 236 69 107 20 71 109 84 3 115 148 71 53 204 34 67 176 71 131 180 192 126 84 72 139 116 72 127 208 72 147 244 188 136 84 73 155 20 189 152 212 73 163 20 235 144 84 74 171 148 184 160 212 74 179 244 74 201 80 75 187 52 183 44 114 9 189 84 76 95 11 76 199 212 76 93 171 76 207 84 77 69 43 77 215 212 77 43 171 77 223 84 78 17 43 78 231 212 78 247 202 34 213 240 78 247 148 174 242 148 79 255 52 174 252 20 80 7 149 172 4 149 80 15 245 238 252 16 81 23 181 168 44 146 16 25 21 82 251 46 17 35 149 82 111 202 81 43 21 83 89 234 82 51 149 83 59 106 83 59 21 84 35 202 34 63 49 84 75 149 160 44 210 20 77 85 85 1 10 85 87 213 85 235 169 85 95 85 86 207 41 86 103 213 86 179 201 34 119 241 86 119 181 153 114 149 87 127 85 153 124 21 88 135 149 151 132 149 88 143 213 149 140 21 89 151 245 147 44 50 26 153 21 90 59 201 89 163 149 90 255 35 105 90 171 21 91 11 233 90 179 149 91 239 104 91 187 21 92 229 200 34 205 49 92 203 53 141 44 114 29 205 85 93 203 8 93 215 213 93 181 168 93 223 85 94 155 40 94 231 213 94 129 200 34 249 241 94 247 181 135 44 50 32 249 21 96 97 200 95 3 150 96 91 104 96 11 22 97 65 232 96 19 150 97 39 200 34 37 178 97 35 22 130 44 242 34 37 214 98 7 136 98 79 242 98 55 214 120 156 205 36 57 22 100 231 199 99 89 50 100 75 246 124 70 54 38 77 86 101 179 7 101 249 76 99 87 22 102 63 199 221 108 50 102 107 86 121 50 214 102 115 246 120 112 86 103 123 86 119 120 214 103 131 214 117 128 86 104 139 54 117 136 214 104 147 182 115 144 86 105 155 246 113 152 214 105 163 86 113 160 86 106 171 182 111 168 214 106 179 54 110 176 86 107 187 150 109 184 214 107 195 182 107 192 86 108 203 22 106 200 214 108 211 118 105 208 86 109 219 182 103 216 214 109 227 22 103 224 86 110 235 86 101 232 214 110 243 150 99 240 86 111 251 246 98 255 40 118 48 253 86 112 77 134 98 17 115 112 15 183 0 97 19 113 23 151 98 10 151 113 31 23 99 28 23 114 39 87 97 36 151 114 47 183 96 44 23 115 55 247 94 52 151 115 63 87 94 60 23 116 71 119 92 68 151 116 79 215 91 76 23 117 87 247 89 84 151 117 95 87 89 40 182 54 97 151 118 99 215 59 107 23 119 113 133 98 125 51 119 123 247 3 111 215 119 131 151 84 118 87 120 139 119 86 136 215 120 147 119 84 144 87 121 155 215 83 152 215 121 163 183 81 160 87 122 171 23 81 168 215 122 179 23 79 176 87 123 187 119 78 40 118 60 189 87 124 225 132 98 209 115 124 207 55 76 202 23 125 215 55 125 249 147 125 223 23 75 212 23 126 231 55 126 221 151 126 239 55 72 228 23 127 247 55 127 1 148 127 255 247 71 40 214 64 1 152 128 147 208 66 11 24 129 75 68 128 19 152 129 81 100 129 27 24 130 71 228 129 35 152 130 37 100 130 43 24 131 27 132 98 237 47 131 59 248 64 40 118 68 61 88 132 239 3 132 71 216 132 241 163 132 255 79 88 133 231 35 133 87 216 133 221 163 133 95 88 134 211 35 134 103 216 134 177 131 98 55 240 134 119 152 58 40 22 72 121 24 136 159 195 135 131 152 136 209 16 75 139 24 137 119 99 136 147 152 137 117 99 137 155 24 138 107 227 137 163 152 138 97 99 138 171 24 139 87 131 98 195 52 139 187 248 52 182 216 139 195 248 139 235 84 140 203 88 50 192 216 140 211 248 140 201 88 141 219 184 218 216 216 141 227 24 17 225 88 142 235 248 47 40 86 79 237 88 143 3 3 143 247 216 143 239 216 80 255 88 144 187 45 144 7 217 144 199 162 143 15 89 145 39 241 83 23 217 145 185 130 98 53 1 20 31 153 146 169 34 146 43 25 147 203 173 145 51 153 147 159 226 146 59 25 148 59 113 84 39 57 148 75 121 40 40 54 85 77 89 149 139 2 149 87 217 149 79 185 86 95 89 150 81 162 149 103 217 150 77 130 98 117 245 150 119 249 21 149 149 151 127 121 35 114 25 152 135 57 152 125 153 152 143 89 34 132 25 153 151 57 153 191 149 153 159 121 33 40 246 89 255 161 153 154 19 66 154 171 25 155 15 226 154 179 153 155 5 98 155 187 57 155 41 150 92 193 25 155 41 54 93 201 185 154 205 25 157 203 185 94 215 249 153 213 217 157 161 153 98 245 53 158 153 153 98 255 181 158 151 249 158 243 217 158 23 150 159 137 121 159 255 249 152 41 22 98 5 122 152 41 182 98 13 26 152 17 90 161 15 186 38 231 140 205 26 250 151 103 150 102 37 250 150 41 90 212 44 122 151 49 58 205 94 86 163 253 152 163 191 204 163 63 90 143 235 173 162 73 218 149 17 122 164 81 90 142 85 154 165 95 217 165 95 122 149 99 90 166 77 153 166 107 58 148 111 26 167 59 89 167 119 58 147 123 218 167 43 25 168 131 250 145 135 154 168 23 217 168 143 250 144 147 90 169 7 153 169 155 250 143 159 26 170 247 88 170 167 218 142 171 218 170 91 154 111 179 58 141 177 154 171 219 24 161 3 247 171 75 218 117 199 186 142 17 218 112 205 250 170 203 90 173 221 24 173 219 90 144 223 26 174 65 154 173 231 218 140 229 218 174 215 90 113 243 250 174 255 235 154 175 189 24 175 255 218 173 253 90 176 177 24 161 103 183 176 251 26 120 19 187 139 17 154 119 25 91 177 157 19 178 169 216 177 39 187 171 185 215 178 13 27 179 51 155 178 55 155 179 161 184 178 63 27 176 61 91 180 147 56 180 75 91 179 197 19 181 179 24 161 205 119 181 155 184 181 95 187 138 99 91 182 163 152 182 107 27 182 245 23 183 77 91 183 119 187 136 17 58 64 125 59 136 17 122 128 133 27 136 137 219 184 145 24 185 147 155 136 151 155 185 143 251 130 159 251 134 157 91 186 167 123 131 171 155 135 17 58 132 177 219 133 181 155 187 173 251 70 191 251 133 189 91 188 101 152 188 203 187 187 107 24 189 77 24 161 117 120 189 71 24 161 127 248 189 61 56 190 231 91 133 235 219 190 217 251 138 243 59 131 241 155 191 233 123 191 255 155 130 253 91 192 49 24 161 185 184 192 35 248 192 19 188 191 209 152 193 7 220 193 31 28 130 23 92 194 21 60 194 43 60 129 41 28 195 25 24 161 243 120 195 17 184 195 63 156 195 19 89 196 11 56 196 255 75 220 196 73 28 197 255 23 161 31 117 197 89 252 147 95 156 127 91 92 198 97 124 147 107 124 126 91 156 148 113 28 125 17 58 149 121 60 199 107 25 200 131 60 150 135 156 125 125 220 200 137 188 22 147 124 125 17 90 151 153 188 199 149 25 202 163 220 152 167 188 123 157 220 202 169 156 25 179 252 202 41 22 25 184 124 124 17 122 154 193 92 123 197 156 204 189 215 204 207 188 204 191 89 205 171 23 161 199 185 205 165 23 161 207 57 206 163 119 206 235 220 205 225 25 207 157 247 206 247 156 207 231 217 207 255 220 159 3 189 120 17 26 159 9 189 208 3 26 209 19 125 208 23 189 119 17 186 160 29 221 119 17 58 161 37 253 209 189 218 210 57 215 164 79 58 211 105 119 211 51 186 211 113 247 211 59 58 212 69 61 164 115 97 165 75 221 110 251 141 211 85 29 117 41 61 213 93 61 110 97 93 214 95 151 214 107 125 117 111 29 215 79 87 215 119 125 116 123 221 215 63 23 216 131 125 115 135 157 216 47 215 216 143 125 114 147 93 217 31 151 217 155 125 113 255 159 29 218 15 87 218 167 93 112 171 221 218 251 22 219 179 61 111 183 157 219 235 214 219 191 125 214 49 93 220 213 150 210 197 186 220 187 61 176 211 253 218 215 157 221 181 221 221 223 93 221 9 91 222 205 150 210 211 186 222 199 157 222 243 61 108 239 157 223 225 125 223 255 93 107 253 93 224 87 61 222 11 62 109 9 30 225 245 157 54 23 94 110 41 253 177 29 62 225 79 91 226 39 158 180 43 222 106 33 30 227 205 157 226 55 190 223 59 222 227 187 86 227 67 94 108 71 158 228 189 214 228 79 126 224 65 94 229 165 150 210 195 183 229 163 150 210 93 59 230 157 118 230 107 62 107 111 30 231 171 86 231 119 94 230 111 219 231 155 182 231 131 94 105 41 61 184 137 94 104 41 189 184 145 62 104 149 158 233 139 158 186 159 190 233 163 94 234 123 214 233 171 62 233 169 30 235 109 150 210 57 120 235 107 150 210 183 251 235 97 54 236 199 222 234 207 219 236 193 30 237 211 158 236 215 158 237 85 182 236 223 62 102 41 221 189 229 62 100 41 93 190 237 158 99 255 241 94 239 87 150 239 251 222 100 255 30 240 239 158 192 7 127 99 5 223 240 15 191 240 19 95 98 41 29 193 25 191 97 29 31 242 21 255 194 39 159 97 37 223 242 27 95 195 51 255 242 55 159 243 17 22 243 63 63 97 41 221 195 69 159 96 73 223 244 71 255 196 83 255 244 87 159 245 1 22 245 95 63 96 41 221 197 101 127 95 105 223 246 97 159 198 115 255 246 119 159 247 237 149 246 119 252 247 195 149 210 127 124 248 221 181 248 143 127 94 147 95 249 223 149 249 155 127 93 159 31 250 205 149 210 159 124 250 137 31 203 175 159 250 179 95 251 177 95 202 187 191 91 41 157 20 192 223 251 45 210 24 200 31 92 41 253 252 209 159 91 213 159 253 219 31 161 215 255 253 171 149 210 225 124 254 161 181 254 239 159 254 223 92 255 1 34 128 192 129 4 11 26 60 136 48 161 194 133 12 27 58 124 8 49 162 196 137 20 43 90 188 136 49 163 198 141 28 59 122 252 8 50 164 200 145 36 75 154 60 137 50 165 202 149 44 91 186 124 9 51 38 69 92 52 255 107 218 188 137 115 152 204 157 60 123 250 252 9 52 168 208 161 68 139 26 61 138 52 169 210 165 76 155 58 125 10 53 170 212 169 84 171 90 189 138 53 171 214 173 92 187 122 253 10 54 172 216 177 17 113 154 61 171 147 172 218 181 108 219 186 125 11 55 174 220 185 116 235 218 189 139 55 175 222 189 124 251 250 253 11 56 176 224 193 132 47 158 61 108 211 84 225 197 140 27 59 126 12 57 178 228 201 148 43 91 190 140 57 179 230 205 156 59 123 254 140 23 177 232 96 160 75 155 62 141 58 181 234 213 172 91 187 126 13 59 182 236 217 180 107 219 214 43 26 49 233 219 188 123 251 254 13 60 184 240 225 196 139 27 63 142 60 185 242 229 117 115 31 222 205 60 186 244 233 212 171 91 191 142 61 187 246 237 220 187 123 255 142 208 249 89 232 224 203 155 63 143 62 189 250 245 236 219 187 127 15 63 190 112 241 102 127 201 191 143 63 191 254 253 252 251 251 255 15 96 128 2 154 71 31 78 190 12 136 96 130 10 46 200 96 131 14 62 8 97 132 18 78 184 81 255 129 55 29 72 97 134 26 110 200 97 135 30 126 8 98 136 34 142 72 151 133 54 97 72 98 138 42 174 200 98 139 46 190 8 99 140 50 246 103 98 77 40 206 136 99 142 58 238 200 99 143 62 254 8 100 144 106 213 72 147 49 66 30 137 100 146 74 46 201 100 147 78 62 249 34 145 184 24 9 101 149 86 94 137 101 150 90 110 201 101 151 174 73 73 165 151 98 142 73 102 153 102 158 137 102 154 106 238 4 230 154 110 190 9 103 156 114 206 73 103 157 58 182 105 103 158 122 238 201 103 159 126 254 9 40 115 82 166 21 104 161 134 30 138 104 162 138 46 202 104 91 131 54 10 105 164 146 78 74 105 165 150 94 90 22 145 132 98 202 105 167 158 126 10 106 168 162 54 249 232 168 166 158 138 106 170 170 174 202 234 126 165 182 10 107 172 178 206 74 107 173 182 170 38 165 98 183 238 202 107 175 190 254 10 108 176 93 73 73 158 176 198 30 139 108 178 202 46 203 172 68 196 54 11 109 180 210 78 75 109 181 160 62 107 109 182 218 110 203 109 183 222 138 137 237 255 183 226 142 75 110 185 230 158 219 161 148 246 161 203 110 187 238 190 11 111 188 221 73 121 163 188 246 222 139 111 190 250 238 219 25 189 252 254 11 112 192 2 15 76 240 90 254 22 140 112 194 10 47 204 112 195 44 29 236 112 196 18 79 76 113 197 14 227 105 113 198 26 111 204 113 199 222 98 236 113 200 34 143 76 114 201 173 130 108 114 202 42 175 204 114 203 126 162 236 114 204 50 207 76 115 205 78 194 108 115 206 58 239 204 115 207 233 106 234 115 208 66 15 77 116 209 247 189 106 116 210 74 47 205 116 211 196 33 237 116 212 82 79 77 117 213 151 65 109 117 214 90 111 205 117 215 142 2 237 117 216 98 143 77 118 217 72 229 106 118 218 106 175 205 118 219 29 133 235 118 220 114 207 77 119 218 112 215 141 119 222 122 239 93 244 221 124 255 13 120 224 130 143 236 247 224 134 31 142 120 226 1 171 171 120 227 142 63 14 185 185 16 71 78 121 229 150 95 30 236 228 152 111 206 121 231 158 95 75 100 189 159 143 78 122 233 166 191 76 100 40 167 175 206 122 255 235 174 155 137 243 235 178 207 78 123 237 59 198 110 123 238 186 239 206 123 134 184 247 14 124 240 194 15 127 52 145 97 18 143 124 242 202 47 207 29 214 204 63 15 125 244 210 243 230 252 244 214 95 143 125 246 154 85 175 125 247 222 127 15 254 94 220 135 79 126 249 230 159 207 213 248 232 175 207 126 251 238 11 133 246 251 242 207 79 127 253 42 21 110 127 254 250 239 207 255 66 248 247 15 192 0 10 208 125 255 27 160 1 15 136 192 235 21 48 129 12 108 160 3 123 199 184 7 74 112 130 20 164 157 230 42 136 193 12 106 208 114 23 220 160 7 63 8 194 191 117 48 132 36 44 161 9 205 54 194 19 170 112 133 44 140 218 239 90 8 195 24 202 48 103 47 156 161 13 111 136 67 145 213 48 135 60 236 161 15 23 182 195 31 10 113 136 68 180 87 16 139 136 196 36 42 177 91 234 91 162 19 159 8 69 102 53 49 138 84 172 162 21 107 53 197 43 106 113 139 92 4 93 141 54 213 197 48 138 113 140 150 202 34 25 207 136 198 52 214 41 126 106 108 163 255 27 223 24 167 5 194 113 142 116 172 227 147 228 104 199 60 234 113 143 119 34 82 177 248 8 200 64 10 178 69 120 28 164 33 15 137 200 6 69 48 145 140 108 164 35 17 148 194 71 74 114 146 148 76 79 36 43 137 201 76 106 146 58 151 220 164 39 63 9 202 223 116 50 148 164 44 165 41 113 101 188 83 170 114 149 172 52 205 17 91 9 203 88 202 210 47 175 156 165 45 111 137 203 175 213 232 120 185 236 165 47 127 73 150 90 2 115 152 196 44 230 81 204 104 204 100 42 115 153 49 65 38 51 159 9 205 104 130 196 153 210 172 166 53 175 249 16 106 98 115 155 220 220 166 54 187 9 206 112 46 147 141 226 44 167 57 173 89 200 115 170 115 157 183 76 39 59 223 9 207 83 186 51 158 244 172 103 38 231 105 207 124 234 51 145 139 220 167 63 255 41 201 81 2 116 160 4 165 163 64 11 138 208 132 146 241 160 10 109 168 67 171 200 208 135 74 116 162 69 20 38 69 47 138 81 27 90 52 163 28 237 168 9 55 234 209 144 138 20 131 32 29 169 73 79 255 138 192 146 162 116 165 44 213 223 55 91 10 211 152 190 239 165 50 173 169 77 195 71 211 155 234 116 167 211 203 41 79 127 10 84 226 249 52 168 68 45 170 237 200 105 212 164 42 21 121 248 92 170 83 159 90 186 166 66 117 170 84 229 160 31 171 138 213 172 70 245 170 90 237 170 87 173 90 163 117 125 117 172 100 69 92 68 203 138 214 180 162 48 116 106 109 171 91 229 118 214 183 202 117 174 77 147 146 234 232 138 215 188 102 77 165 122 237 171 95 93 198 215 191 10 118 176 58 76 37 97 15 139 88 154 5 54 177 140 109 108 194 134 234 216 200 74 150 95 144 157 172 101 47 251 174 202 98 118 179 156 21 151 102 59 11 218 208 82 235 179 162 45 173 105 145 133 212 211 170 118 181 219 146 42 107 95 11 91 94 185 54 182 180 173 237 201 184 106 219 220 234 86 182 184 221 173 111 127 123 219 176 2 119 184 196 61 85 92 139 139 220 228 6 234 184 202 109 174 115 215 200 214 231 74 119 186 203 77 29 117 175 139 221 60 45 54 187 220 237 238 146 182 235 221 255 240 138 183 71 224 29 175 121 207 27 37 195 162 119 189 236 69 18 105 219 11 223 248 78 232 189 242 173 175 125 19 68 223 251 234 119 191 174 2 27 127 255 11 96 10 229 55 192 4 46 48 120 82 107 224 4 43 88 63 179 93 176 131 31 156 157 6 67 120 194 20 94 142 132 43 140 225 12 7 231 194 26 238 176 135 103 211 207 15 139 120 196 195 97 46 137 79 140 226 210 152 56 197 44 110 241 213 162 235 226 24 203 216 149 48 158 177 141 111 140 153 242 226 120 199 60 134 139 142 123 12 228 32 135 229 199 66 46 178 145 175 66 228 35 43 121 201 77 73 50 147 159 12 229 161 12 56 202 84 174 114 51 253 107 229 44 107 249 41 83 222 178 151 191 236 145 46 131 121 204 100 158 9 150 203 140 230 52 175 4 193 106 110 179 155 63 194 225 55 203 121 206 3 137 51 157 239 220 102 59 227 121 207 100 214 51 159 255 188 229 16 3 122 208 127 94 49 161 15 157 101 67 35 122 209 80 86 52 163 31 125 100 71 67 122 210 64 118 50 165 47 205 98 75 99 255 122 211 35 214 52 167 63 173 97 79 131 122 212 19 22 53 169 79 173 96 49 163 122 213 5 86 53 171 95 205 95 87 195 122 214 245 149 53 173 111 205 94 91 227 122 215 227 101 51 175 127 77 97 63 3 123 216 232 21 54 177 143 29 94 99 35 123 217 216 85 54 179 159 253 92 65 67 123 218 246 149 52 181 175 221 92 107 99 123 219 196 213 54 183 191 189 91 187 130 123 220 230 53 53 185 207 221 89 115 163 123 221 150 85 55 187 223 221 88 119 195 123 222 132 213 53 189 239 237 87 123 227 123 223 116 213 55 191 255 221 86 127 3 124 224 100 21 56 193 15 174 85 95 35 124 225 147 117 54 195 31 62 86 135 67 124 226 89 149 56 197 47 14 85 139 99 124 227 73 149 54 199 63 222 239 26 131 124 228 115 245 54 201 79 14 84 147 163 124 229 55 85 57 203 95 14 83 121 195 124 230 23 149 57 205 111 238 80 155 227 124 231 5 213 57 207 127 238 79 159 3 125 232 245 52 56 209 143 254 78 163 35 125 233 230 84 58 211 159 222 77 167 67 125 234 255 232 60 51 213 175 158 81 133 99 125 235 10 213 56 215 191 94 245 26 253 17 236 100 39 168 215 203 142 246 100 158 61 237 108 7 166 199 219 14 119 118 186 60 238 116 255 229 220 235 142 247 118 138 60 239 124 143 250 222 251 14 248 176 155 136 151 129 47 124 52 133 110 248 196 243 83 189 138 111 188 218 25 239 248 200 187 29 242 146 175 60 46 165 110 249 204 183 17 243 154 239 252 66 173 238 249 208 151 146 243 162 47 189 21 73 111 250 212 63 81 235 170 111 61 35 215 238 250 216 159 190 183 178 175 253 226 197 110 251 220 223 222 68 99 215 189 239 243 248 246 223 11 255 141 119 31 190 241 133 88 252 227 43 63 135 201 95 190 243 101 216 252 231 75 127 133 136 159 190 245 41 88 253 235 107 191 129 217 223 190 247 13 216 253 239 139 191 127 225 31 191 249 237 135 250 243 171 159 128 160 95 191 251 97 152 254 247 203 31 167 237 159 191 253 67 24 255 251 235 223 122 172 223 191 255 31 8 123 255 39 128 223 19 128 3 104 128 216 83 128 7 168 128 209 147 255 128 11 232 128 202 19 124 15 40 129 245 19 125 19 104 129 76 245 119 23 168 129 236 87 35 162 179 129 31 184 62 226 6 130 35 200 62 229 71 130 39 136 57 38 136 130 43 24 57 42 200 130 47 168 56 46 8 131 51 56 56 249 71 131 55 200 55 54 136 131 59 88 55 58 200 131 63 232 54 62 8 132 67 104 55 245 71 132 71 216 58 253 135 132 75 248 57 13 200 132 79 200 54 78 8 133 83 88 54 82 72 133 87 232 53 86 136 133 91 184 87 68 34 86 92 8 134 45 152 129 97 72 134 134 83 129 101 136 134 84 115 134 105 200 134 117 53 134 109 8 135 115 35 131 113 72 135 44 51 135 117 136 135 37 115 135 121 200 135 30 179 135 125 8 136 25 243 135 129 72 136 18 35 132 133 136 136 12 115 136 137 200 136 5 179 136 141 8 137 0 243 136 145 72 137 249 50 137 149 136 137 241 162 132 153 200 137 50 163 133 157 8 138 148 69 123 161 72 138 51 243 137 165 136 138 240 114 138 169 200 138 232 18 129 173 8 139 27 179 134 177 72 139 237 50 255 139 181 136 139 229 114 139 185 200 139 31 243 134 189 8 140 8 51 136 193 72 140 188 181 75 197 136 140 10 51 140 201 200 140 176 178 140 205 8 141 169 242 140 209 72 141 162 114 137 213 136 141 157 114 141 217 200 141 149 178 141 221 8 142 144 242 141 225 72 142 137 50 142 229 136 142 213 85 35 186 146 142 237 104 45 171 232 142 241 40 142 163 40 143 245 136 90 244 104 143 249 8 44 240 168 143 253 136 58 194 229 143 1 233 43 187 40 144 5 249 39 4 105 144 9 169 39 8 169 144 13 57 39 12 233 144 17 233 38 211 40 145 21 121 51 148 103 145 25 121 41 20 169 145 29 25 36 28 233 145 33 201 35 32 41 146 37 57 35 231 104 146 41 73 72 70 168 146 45 185 144 44 233 146 49 249 144 48 41 147 53 57 145 52 105 147 57 121 38 155 168 147 61 233 37 252 232 147 65 41 34 64 41 148 69 249 51 184 103 148 73 57 38 68 169 148 77 9 33 175 232 148 81 153 36 16 41 149 85 249 148 191 104 149 89 233 35 84 169 149 93 57 32 34 232 255 149 97 249 35 36 41 150 101 233 29 100 105 150 105 25 97 24 169 150 109 169 34 104 233 150 113 41 40 56 41 151 117 57 95 116 105 151 121 233 32 40 169 151 125 9 28 124 233 151 129 121 27 128 41 152 133 41 27 60 105 152 137 153 31 76 169 152 141 41 74 248 232 152 145 185 152 144 41 153 149 9 31 140 105 153 153 249 37 94 168 153 157 25 31 92 233 153 161 185 153 29 40 154 165 105 73 88 105 154 169 89 29 160 169 154 173 217 47 108 233 154 177 25 29 112 41 155 181 137 27 176 105 155 185 249 52 184 169 155 189 249 152 199 232 155 193 185 155 95 36 156 197 185 97 120 105 156 201 153 26 132 169 156 205 185 21 204 233 156 209 105 21 208 41 157 213 25 21 136 105 157 217 73 25 152 169 157 221 249 156 148 233 157 225 57 25 220 41 158 229 41 21 228 105 158 233 217 100 156 169 158 237 9 25 172 233 158 241 233 20 240 41 159 245 153 20 244 105 159 249 73 20 248 169 159 253 249 19 180 233 159 1 58 77 188 41 160 5 26 76 4 106 160 9 250 255 21 0 170 160 13 58 17 12 234 160 17 234 16 212 41 161 21 26 30 200 105 161 25 170 20 20 170 161 26 202 161 29 106 161 31 10 162 18 138 157 35 106 162 255 9 158 39 170 162 240 147 162 43 234 162 61 129 158 47 234 162 49 42 163 42 10 149 53 138 163 15 131 154 57 202 163 40 193 159 61 58 163 59 10 164 67 26 18 63 74 164 38 10 161 71 154 159 73 170 164 245 201 164 77 26 159 79 10 165 237 41 165 83 154 158 34 106 165 229 137 165 89 26 158 91 202 165 221 233 165 95 154 157 97 42 166 213 89 162 101 138 166 2 65 163 105 170 159 107 202 166 246 233 166 111 42 159 113 42 167 238 121 163 117 154 166 70 138 167 253 169 167 123 186 164 66 234 167 95 10 150 129 234 167 85 74 168 197 105 168 135 26 156 137 170 168 189 201 168 141 154 155 100 10 169 178 41 169 147 234 154 149 106 169 170 137 169 153 106 154 155 202 169 162 121 166 159 90 163 116 42 170 205 73 170 165 154 156 167 138 170 136 218 162 171 202 163 119 234 170 163 10 168 177 250 255 162 125 74 171 209 105 171 183 106 170 214 165 171 77 250 168 189 106 153 191 10 172 146 41 172 195 234 152 197 106 172 138 233 169 201 42 152 203 202 172 126 233 172 207 170 151 209 42 173 118 73 173 213 42 151 161 138 173 9 170 170 219 26 154 221 234 173 157 9 174 225 154 153 227 74 174 149 9 171 231 202 173 179 170 174 5 154 171 237 218 169 236 10 175 254 249 174 243 250 173 8 106 175 238 138 175 249 26 160 200 202 175 101 233 175 255 26 150 1 43 176 93 121 173 5 27 149 7 139 176 77 169 176 11 155 148 13 235 176 69 9 177 17 27 148 218 74 177 222 105 174 23 27 151 25 171 177 109 201 177 29 155 150 31 11 178 0 203 158 35 203 167 242 106 178 99 138 178 41 107 166 43 203 178 184 234 178 47 187 171 192 41 179 115 186 175 53 107 157 4 139 179 54 169 179 59 43 147 61 235 179 46 57 177 65 235 145 67 75 180 26 105 180 71 107 145 73 171 180 18 201 180 77 235 144 22 11 181 181 41 178 83 91 177 173 106 181 194 89 181 89 171 147 91 203 255 181 60 91 178 95 43 157 245 42 182 85 73 182 101 155 176 49 139 182 165 57 168 107 155 170 55 235 182 151 10 183 113 171 169 115 75 183 241 74 179 119 171 181 24 170 183 160 202 183 125 235 153 79 11 184 233 40 184 131 91 142 133 107 184 225 40 181 137 219 152 94 203 184 21 233 184 143 27 145 145 43 185 13 73 185 149 155 144 233 138 185 145 121 182 155 171 146 157 235 185 38 9 186 161 43 146 163 75 186 69 107 183 167 219 172 169 171 186 208 202 186 173 59 173 175 11 187 214 42 187 179 155 173 127 107 187 180 75 156 185 171 153 136 203 187 188 232 187 191 139 139 193 43 188 180 184 184 197 43 150 151 139 188 228 168 188 203 11 142 205 235 188 220 8 189 209 139 141 154 75 189 102 105 186 215 171 143 217 171 189 246 200 189 221 43 143 223 11 190 238 8 180 227 219 139 229 107 190 185 136 190 233 91 139 235 203 190 177 232 190 239 219 138 196 43 191 145 72 191 245 219 136 247 139 191 137 168 191 251 91 136 253 235 191 129 120 188 1 156 147 211 75 192 198 139 255 181 7 172 148 6 172 192 243 155 192 13 44 177 97 11 193 90 41 190 19 156 140 21 108 193 197 136 193 25 28 140 27 204 193 231 91 187 31 156 146 241 43 194 252 27 194 37 92 186 39 140 194 168 155 183 43 252 176 184 235 194 37 9 192 49 204 133 51 76 195 88 104 195 55 76 133 57 172 195 80 56 192 61 28 181 15 12 196 33 201 192 67 252 191 66 108 196 72 139 196 73 188 180 18 204 196 49 233 193 79 156 137 81 44 197 149 72 197 85 108 191 188 138 197 66 171 194 91 188 189 93 236 197 222 11 198 97 28 190 99 76 198 228 11 195 103 220 143 60 172 198 47 200 198 109 188 130 111 12 199 39 40 199 115 60 130 63 108 199 135 187 196 121 92 143 69 204 199 53 188 199 127 140 198 72 41 200 78 235 196 133 156 185 106 139 200 138 171 200 139 220 141 87 236 200 105 8 201 145 92 134 36 76 201 59 104 201 151 124 131 153 172 201 51 200 201 157 236 198 102 12 202 196 88 199 163 252 127 165 108 202 251 135 202 169 124 127 171 204 202 243 231 202 175 252 255 126 120 44 203 192 27 200 181 140 140 126 140 203 158 124 203 187 220 193 189 236 203 32 12 144 193 140 142 147 76 204 64 104 204 199 204 131 201 172 204 56 200 204 205 76 131 159 12 205 10 40 205 211 108 128 213 108 205 2 136 205 217 236 127 219 204 205 250 23 203 223 236 124 225 44 206 202 71 206 229 108 124 231 140 206 194 167 206 235 236 123 180 236 206 89 76 200 241 172 193 192 76 207 152 168 203 247 124 205 246 172 207 242 108 34 95 216 207 182 76 154 1 13 140 207 76 208 14 104 208 7 77 205 141 172 208 136 232 205 13 125 125 15 13 209 211 39 209 19 253 124 21 109 209 203 135 209 25 125 124 237 204 209 154 231 209 31 109 121 33 45 210 146 71 210 37 237 120 39 141 210 138 7 207 43 141 134 249 236 210 223 7 211 49 189 125 51 77 211 17 205 207 55 253 210 135 172 211 249 203 208 61 77 134 9 13 212 226 39 212 67 237 125 109 107 212 38 220 194 73 237 208 162 204 212 79 184 209 79 29 122 81 45 213 157 167 210 85 157 118 87 141 213 101 167 255 213 91 13 118 93 237 213 92 7 214 97 141 117 45 77 214 63 104 211 103 45 123 105 173 214 174 199 214 109 173 122 111 13 215 166 103 189 115 13 213 63 109 215 152 140 215 121 189 201 123 205 215 188 60 208 127 45 201 78 45 216 40 72 213 133 141 119 135 141 216 116 167 216 139 13 119 141 237 216 108 55 214 145 125 115 147 77 217 51 103 217 151 253 114 153 173 217 43 199 217 157 125 114 102 13 218 19 40 215 163 29 120 165 109 218 125 135 218 169 157 119 171 205 218 117 87 215 175 77 130 69 45 219 145 71 219 181 221 120 183 141 219 137 167 219 187 93 120 144 237 219 72 7 220 193 77 116 195 77 220 64 103 220 199 205 115 201 173 220 56 247 217 205 77 112 207 13 221 0 39 221 211 205 111 213 109 221 248 134 221 217 77 111 162 205 221 234 231 218 223 13 117 225 45 222 76 71 222 229 45 220 57 141 222 238 23 219 235 13 206 126 237 222 227 215 219 241 45 214 240 77 223 71 109 223 247 173 125 204 173 223 23 199 223 253 61 113 255 13 224 15 39 224 3 190 255 112 5 110 224 7 183 221 9 62 109 11 206 224 207 230 224 15 190 108 17 46 225 199 70 225 21 62 108 222 141 225 191 119 222 27 62 114 29 238 225 31 7 226 33 190 113 35 78 226 254 205 211 39 190 126 243 173 226 52 199 226 45 14 115 47 14 227 44 135 212 51 126 126 8 110 227 228 134 227 57 14 110 59 206 227 220 230 227 63 142 109 23 46 228 163 70 228 69 254 105 71 142 228 155 166 228 75 126 105 77 238 228 147 166 225 81 62 210 234 77 229 162 103 226 87 62 111 89 174 229 239 198 229 93 190 110 237 13 230 169 39 227 99 142 112 101 110 230 209 157 223 105 206 210 90 204 230 29 77 216 111 110 120 65 46 231 180 70 231 117 14 107 119 142 231 172 6 229 123 62 103 125 238 231 111 6 232 129 158 103 105 76 232 41 109 232 135 222 230 235 168 232 185 247 229 141 142 108 143 14 233 196 38 233 147 14 108 149 110 233 188 38 230 153 14 120 104 206 233 223 230 233 159 190 109 161 46 234 215 70 234 165 222 224 113 142 234 245 189 212 171 94 229 173 238 255 234 38 173 234 177 78 117 122 78 235 131 54 232 183 206 100 185 174 235 74 198 235 189 110 100 191 14 236 66 38 236 195 94 105 68 194 142 198 190 232 188 167 236 136 62 207 205 254 219 86 14 237 230 45 237 211 158 222 195 108 237 157 190 230 217 190 220 219 206 237 206 237 237 223 238 226 225 46 238 49 62 235 229 110 238 176 142 238 89 125 238 235 238 217 237 238 238 161 13 239 241 254 225 137 78 239 63 87 236 247 46 98 249 174 239 30 198 239 253 30 106 246 14 240 227 206 232 3 207 213 213 110 240 36 135 233 9 47 232 8 207 240 34 238 240 15 95 226 41 46 241 75 119 234 21 127 104 23 143 241 184 78 238 27 127 230 110 238 241 212 174 238 33 143 220 243 78 242 255 102 235 39 127 236 35 175 242 224 190 187 45 127 116 255 14 243 177 38 240 51 15 113 50 111 243 247 133 243 57 95 107 200 206 243 37 255 236 63 79 240 204 46 244 59 183 240 69 191 235 17 143 244 91 78 241 75 95 239 129 237 244 155 221 241 81 63 110 26 79 245 94 102 245 87 175 255 101 41 175 245 251 110 242 93 111 234 95 15 246 169 206 242 99 127 243 98 111 246 204 182 243 105 223 108 53 207 246 232 182 246 111 63 93 113 47 247 209 230 246 117 223 227 62 143 247 40 30 244 123 127 224 74 239 247 106 15 248 129 31 233 131 79 248 148 222 244 135 175 221 83 175 248 187 150 245 141 191 99 143 15 249 55 38 249 147 63 99 92 111 249 255 133 249 153 191 95 155 207 249 58 143 246 159 79 106 158 47 250 242 69 247 165 31 91 167 143 250 175 165 250 171 191 90 173 239 250 167 5 251 177 95 90 83 78 251 167 118 244 183 191 96 185 175 251 9 198 251 189 223 106 134 15 252 76 158 248 195 15 225 140 111 252 144 86 249 201 31 108 200 207 252 139 182 252 207 255 96 164 47 253 215 69 253 213 63 247 161 143 253 124 118 253 219 239 92 221 239 253 202 53 251 225 143 88 227 79 254 245 118 247 231 47 229 233 175 254 143 102 254 237 159 111 122 15 255 136 223 247 243 143 107 191 111 255 189 38 252 249 255 231 0 129 75 224 64 130 5 11 6 11 144 255 80 225 66 134 13 29 62 132 24 81 226 68 138 21 45 94 196 152 81 227 70 142 29 61 126 4 25 82 228 72 146 37 77 158 68 153 82 229 74 150 45 93 190 132 25 83 230 76 154 53 109 222 196 153 83 231 78 158 61 125 254 4 26 84 232 80 162 69 141 30 69 154 84 233 82 166 77 157 62 133 26 85 234 212 157 6 173 94 253 69 85 235 86 174 93 189 126 5 27 86 236 88 178 101 205 158 69 155 86 237 90 182 109 221 190 133 27 87 238 92 186 117 237 222 197 155 241 234 94 130 190 242 254 5 28 88 240 96 194 133 13 31 70 156 88 241 98 198 141 29 63 134 28 89 242 100 202 149 197 242 197 236 215 242 102 206 157 61 127 6 29 90 244 104 210 165 77 159 70 157 90 245 106 214 173 33 99 230 171 217 245 108 218 181 109 223 198 157 91 247 110 222 189 125 255 6 30 92 248 112 166 176 247 134 34 158 92 249 114 230 205 157 63 135 30 93 250 116 234 213 173 95 95 108 252 170 49 236 221 189 127 7 31 94 252 120 242 229 205 159 71 159 94 253 82 255 237 86 185 175 135 31 95 254 124 250 245 237 223 199 159 95 255 126 254 65 219 27 124 175 63 1 7 36 176 64 3 15 68 48 65 5 23 100 176 65 179 254 43 40 64 7 39 164 176 66 11 47 196 48 67 13 55 228 176 67 221 32 36 104 24 15 71 36 177 68 19 79 68 49 69 21 87 100 177 197 141 64 28 72 68 23 103 164 177 70 27 111 196 49 71 29 119 228 17 52 24 5 146 177 71 33 135 36 178 72 35 143 68 50 73 37 151 196 232 71 92 130 100 50 74 41 167 164 178 74 43 175 196 50 203 232 156 132 82 75 47 191 4 51 76 49 199 36 179 76 51 183 114 210 148 51 215 100 179 77 55 223 132 51 78 57 191 116 18 161 57 239 196 51 79 61 247 228 179 79 63 229 171 243 79 65 7 37 180 80 67 15 69 52 81 199 2 85 180 81 71 31 133 52 82 73 39 165 84 38 70 43 197 52 83 77 55 229 180 83 79 223 116 50 171 79 71 37 181 84 83 79 69 53 85 13 157 148 77 85 87 95 133 53 86 89 103 165 149 56 86 107 197 53 87 255 93 119 229 181 87 95 255 186 245 87 97 135 37 182 88 99 143 69 150 166 96 147 101 182 89 103 159 133 54 90 93 157 148 80 90 107 175 197 54 91 109 183 205 147 90 110 191 5 55 92 113 199 37 119 71 111 203 69 55 93 117 215 101 183 221 252 206 117 55 94 121 231 165 183 94 123 119 131 247 94 125 247 229 183 95 127 255 13 140 75 128 7 38 184 96 131 15 70 56 41 129 19 102 184 97 135 31 134 56 226 139 22 150 184 98 139 47 198 56 99 119 41 214 184 99 143 63 6 57 100 95 57 22 185 100 147 79 70 57 229 71 211 84 185 101 151 95 134 57 230 50 47 149 185 102 155 111 198 57 231 25 105 214 185 103 159 127 6 58 104 1 121 22 186 104 163 143 70 58 233 45 127 180 83 105 167 159 134 58 106 169 81 11 117 106 171 175 198 58 107 173 5 91 118 107 175 191 6 59 108 177 163 234 122 108 179 207 70 59 109 181 89 42 123 109 183 223 134 59 110 185 219 150 187 110 187 239 198 27 234 124 243 230 187 111 191 255 134 121 111 192 7 39 188 112 255 195 29 22 252 112 197 23 103 188 113 118 19 119 60 114 201 39 167 60 89 200 43 199 60 115 205 55 71 149 100 206 63 7 61 116 209 27 245 124 116 211 79 71 61 117 54 75 87 189 117 215 95 135 29 73 214 99 167 189 118 219 111 55 113 118 220 119 231 189 119 223 9 100 249 119 225 135 39 190 248 245 136 54 62 121 229 151 103 62 57 228 155 135 62 122 233 167 63 237 121 234 175 199 62 123 237 19 179 126 123 239 191 7 63 124 181 170 22 191 124 243 207 71 159 42 186 211 103 191 125 247 223 175 105 125 248 231 167 191 126 251 95 252 177 213 251 247 231 191 255 254 229 247 95 0 5 56 192 239 93 142 128 7 68 96 2 147 103 64 5 54 208 129 15 132 29 3 33 56 65 10 86 48 115 18 180 96 6 53 184 65 192 97 144 131 31 4 97 8 211 166 59 17 150 208 132 39 196 26 9 81 184 66 22 182 16 104 42 116 97 12 101 56 195 148 193 144 134 55 196 97 14 37 102 67 29 246 208 135 63 236 87 240 128 56 68 34 22 241 94 221 51 98 18 149 255 184 196 108 33 145 137 79 132 98 20 135 229 68 41 86 209 138 87 116 21 21 177 184 69 46 118 177 82 228 243 98 24 197 56 70 72 1 144 140 103 68 99 26 227 100 70 53 182 209 141 111 212 18 27 225 56 71 58 214 177 72 78 66 142 29 245 184 71 62 242 200 131 125 4 100 32 5 121 161 63 14 210 144 135 68 228 208 126 84 173 68 54 210 145 143 196 79 33 33 57 73 74 86 178 58 60 180 100 38 53 185 73 225 96 146 147 159 4 101 40 91 227 73 81 150 210 148 167 228 12 41 81 185 74 86 182 242 48 170 116 101 44 101 57 203 184 8 145 150 183 196 101 46 107 201 52 93 246 210 151 191 36 139 22 129 57 76 98 22 211 63 188 52 102 50 149 185 76 159 8 147 153 207 132 102 52 65 2 70 105 86 211 154 215 228 136 28 177 185 77 110 90 83 155 221 4 103 56 141 249 77 113 150 211 156 184 36 231 57 213 185 78 84 74 146 157 239 132 167 38 221 25 79 122 214 51 145 243 180 103 62 245 185 71 124 238 211 159 255 84 99 63 1 58 80 255 130 114 17 150 5 69 104 66 161 120 80 133 54 212 161 64 100 232 67 37 58 81 25 70 148 162 23 197 168 8 45 154 81 142 118 148 130 182 244 104 72 69 90 66 103 142 212 164 39 37 96 73 81 186 82 150 214 79 165 45 133 105 76 207 247 82 153 214 212 166 217 163 230 77 117 186 211 240 165 147 167 63 5 234 240 124 26 84 162 22 181 118 67 53 106 82 149 122 58 164 46 213 169 79 189 224 34 161 58 85 170 162 78 160 85 197 106 86 251 118 85 173 118 213 171 111 227 234 87 197 58 214 176 133 149 172 103 69 235 212 54 154 86 182 182 245 104 107 117 107 92 229 154 51 184 206 213 174 119 109 89 93 241 186 87 190 126 76 175 125 5 108 96 35 6 82 193 22 214 176 38 163 233 97 21 187 88 131 37 150 177 143 133 172 190 28 27 89 202 86 246 113 200 180 108 102 53 187 175 156 110 214 179 159 93 87 83 65 59 90 210 90 46 127 165 69 109 106 181 37 90 213 182 214 181 178 98 237 107 101 59 219 82 153 149 182 183 197 45 165 108 155 91 222 246 255 22 81 187 245 109 112 133 203 39 224 14 215 184 199 5 149 84 145 187 92 230 30 234 175 205 133 110 116 173 244 92 233 86 215 186 178 251 81 151 174 187 93 238 130 137 186 221 5 111 120 91 244 93 241 150 215 188 35 34 236 121 213 187 222 28 77 150 189 239 133 47 33 49 27 95 250 214 55 119 243 181 111 126 245 139 33 247 238 215 191 255 157 79 103 1 60 96 2 243 39 182 5 70 112 130 187 115 96 5 55 216 193 207 97 240 131 37 60 225 224 224 145 194 23 198 176 117 138 155 97 14 119 184 122 202 245 112 136 69 236 155 13 143 216 196 39 126 13 136 81 188 98 22 127 24 70 218 109 113 140 101 188 25 242 206 216 198 55 110 75 141 113 188 99 30 143 69 199 61 6 114 144 213 151 93 33 23 217 200 116 73 239 145 149 188 228 96 226 151 201 79 134 114 87 250 27 101 42 87 185 42 78 182 114 150 181 92 148 41 111 217 203 95 70 137 128 193 60 102 50 91 234 180 101 70 115 154 95 18 97 53 183 217 205 12 97 243 155 229 172 102 11 207 217 206 255 119 158 152 138 241 188 103 62 47 164 196 125 6 180 146 255 28 104 66 7 121 208 133 70 52 142 127 156 104 70 179 120 209 141 134 244 136 31 29 105 74 115 120 210 149 198 244 132 47 157 105 78 43 56 201 157 6 53 143 187 28 106 82 83 120 212 165 70 117 131 79 157 106 86 19 120 213 173 134 245 126 197 28 107 90 103 56 206 181 198 53 124 111 157 107 94 159 119 215 189 6 54 120 127 29 108 98 91 247 208 197 70 246 114 143 157 108 102 11 119 217 205 134 118 110 159 29 109 106 203 118 218 213 198 118 106 55 157 109 110 123 118 219 221 6 119 101 191 29 110 114 51 118 220 229 70 119 97 207 157 110 118 243 245 211 237 134 247 108 95 29 111 122 31 118 222 245 198 55 96 239 157 111 126 223 117 223 253 6 184 91 103 29 112 130 71 118 216 5 71 248 88 15 158 112 134 107 117 225 13 135 248 84 31 30 113 138 43 245 218 21 199 56 79 47 158 113 142 215 116 227 29 7 57 75 63 30 114 146 143 116 228 37 71 57 71 215 157 114 150 63 116 229 45 135 255 57 66 95 30 115 154 255 115 230 53 199 185 61 111 158 115 158 191 243 221 61 7 186 200 177 28 116 162 175 244 223 69 71 122 61 143 158 116 166 179 115 233 77 135 122 57 7 30 117 170 43 116 226 85 199 250 53 175 158 117 174 67 115 235 93 7 123 50 235 28 118 178 251 243 228 101 71 251 44 207 158 118 182 179 114 237 109 135 123 41 223 30 119 186 115 114 231 117 199 59 36 239 158 119 190 35 114 239 125 7 124 32 255 30 120 194 235 113 240 133 71 60 28 127 158 120 198 199 242 233 141 135 188 224 135 30 121 202 183 115 242 149 199 124 40 31 159 121 206 183 113 234 157 7 253 36 191 30 122 210 123 113 244 165 71 253 21 79 159 122 214 47 244 204 173 135 253 33 231 30 123 218 231 112 246 181 199 125 69 245 156 123 222 191 241 246 189 7 62 73 119 31 124 226 139 241 240 197 71 254 3 143 159 124 230 35 112 249 205 135 126 0 159 31 125 234 223 111 250 213 199 62 252 22 159 125 238 211 112 243 221 7 127 74 47 31 126 242 179 240 251 229 71 191 253 255 206 159 126 246 191 239 243 237 135 191 5 87 31 127 250 139 111 254 245 199 255 246 238 159 127 254 83 111 255 253 7 192 230 249 189 0 36 192 223 25 192 2 68 64 220 57 192 4 100 192 216 89 192 6 132 64 213 121 192 8 164 192 209 185 190 10 196 192 202 185 192 12 228 64 199 217 192 14 4 193 195 249 192 16 36 193 14 34 178 18 68 65 255 251 17 53 73 193 22 132 158 245 115 193 24 244 192 241 147 193 26 180 29 24 180 193 28 28 28 28 212 193 30 228 155 247 243 193 32 20 157 255 19 194 34 116 27 34 52 194 36 60 27 36 84 194 38 4 27 38 116 194 40 204 154 9 148 194 42 76 26 42 180 194 44 20 26 44 212 194 46 236 25 46 244 194 48 180 25 48 20 195 50 124 153 17 52 195 52 20 25 52 84 195 54 236 24 54 116 195 56 180 24 56 148 195 58 124 24 58 180 195 60 68 152 237 211 195 62 212 27 26 244 195 64 84 26 30 20 196 66 196 24 66 52 196 68 28 44 64 84 196 70 164 171 31 17 21 71 148 196 45 124 189 73 255 180 196 47 172 196 75 212 196 49 204 196 77 244 196 51 252 145 60 250 196 81 116 25 50 36 197 83 92 173 225 67 197 85 124 67 85 100 197 87 156 67 87 132 197 89 188 195 19 164 197 91 220 33 91 196 197 93 108 24 60 228 197 95 132 21 95 4 198 97 236 28 93 36 198 99 228 23 62 68 198 101 84 23 68 100 198 103 204 21 103 132 198 105 132 45 70 164 198 107 76 69 24 105 26 108 228 198 113 1 194 110 4 199 103 129 194 112 36 71 77 25 199 114 68 199 73 57 199 116 100 71 71 89 199 118 132 71 231 146 197 120 164 199 93 49 197 122 196 199 53 154 199 124 228 199 96 220 199 126 4 200 98 132 17 70 10 200 130 84 21 97 52 200 132 140 18 132 84 200 134 196 174 23 115 200 136 36 21 134 148 200 138 52 23 99 180 200 140 148 20 101 212 200 142 20 20 105 244 200 144 100 18 144 20 201 146 60 18 146 52 201 148 20 18 148 84 201 150 108 47 72 116 201 152 220 147 119 148 201 154 92 17 154 180 201 156 188 47 24 209 31 157 244 73 50 255 193 201 159 20 202 12 185 199 161 52 74 5 41 202 163 84 202 2 73 202 165 116 74 3 251 199 167 148 202 30 105 202 169 180 202 0 195 200 171 212 74 63 202 202 173 244 202 27 161 200 175 20 75 13 235 202 177 52 75 21 9 203 179 84 203 230 224 200 181 116 75 11 97 201 183 148 75 240 136 203 185 180 203 235 168 203 187 212 75 233 200 203 189 244 75 182 132 201 191 20 204 6 9 202 193 52 76 224 40 204 195 84 76 124 233 196 197 116 204 72 106 204 199 148 76 172 28 200 201 180 76 251 168 202 203 212 76 207 200 204 205 244 204 202 232 204 207 20 205 20 171 204 209 52 205 240 72 203 211 84 77 192 72 205 213 116 77 187 104 205 215 148 205 93 130 200 217 180 77 192 172 205 219 212 77 91 89 193 221 244 205 78 178 198 223 20 206 213 232 203 225 52 206 185 40 206 227 84 78 183 72 206 229 116 206 180 248 198 231 148 78 26 139 204 233 180 78 206 172 206 235 212 78 208 204 206 237 244 78 210 4 17 81 252 206 241 156 140 208 36 207 243 60 166 210 255 68 207 245 100 12 243 100 207 247 196 9 247 132 207 249 156 137 216 164 207 251 60 9 251 196 207 253 20 9 253 228 207 255 236 8 255 4 208 1 109 146 178 36 208 3 109 50 24 97 65 4 101 208 179 104 206 6 133 208 145 120 208 8 165 80 143 152 208 10 197 80 189 8 206 12 229 80 162 136 206 14 5 81 160 72 204 16 37 81 136 24 209 18 69 81 63 235 206 20 101 209 156 56 209 22 45 81 249 132 81 6 149 209 25 61 208 26 181 209 1 197 209 28 253 207 29 229 209 253 20 208 31 93 207 32 21 210 243 36 210 34 29 207 35 69 82 239 84 210 37 213 206 182 116 210 40 213 80 109 148 210 42 53 137 11 181 82 29 221 208 44 229 210 135 192 210 46 5 210 192 4 211 49 45 80 158 36 211 51 181 136 23 69 83 250 84 211 53 133 207 54 117 83 246 244 209 56 117 206 57 165 83 229 180 211 59 53 206 60 213 83 225 228 211 62 245 205 38 5 84 215 20 212 65 85 205 66 53 84 211 68 212 68 21 205 69 101 84 207 132 210 71 205 209 47 255 149 84 233 164 212 74 173 211 45 197 84 24 189 212 77 61 206 15 245 212 22 133 211 80 253 212 21 37 85 27 29 213 83 245 83 83 85 85 81 141 202 86 77 209 63 133 85 205 148 213 89 181 204 90 181 85 201 196 213 92 117 76 71 229 213 189 244 213 95 189 203 96 21 214 185 36 214 98 125 203 99 69 214 181 140 212 101 165 81 77 117 86 4 237 212 104 109 84 104 165 86 45 165 210 107 69 81 80 213 86 108 5 145 158 236 214 12 77 213 112 165 85 86 37 87 2 29 187 115 21 215 87 85 215 30 101 215 118 13 83 245 132 87 10 221 213 121 53 75 101 181 215 165 196 215 124 61 202 125 229 215 161 244 215 127 253 201 128 21 88 157 108 214 130 77 82 107 69 88 38 85 216 133 125 210 134 117 88 235 156 214 136 181 75 110 165 216 135 53 211 139 229 207 113 213 88 185 228 216 142 117 203 116 5 217 55 125 215 145 157 206 122 53 89 161 68 217 148 245 201 149 101 217 156 36 216 151 213 200 152 149 89 139 164 217 154 149 200 155 197 89 135 212 217 157 255 85 200 131 245 89 221 156 216 160 157 202 161 37 218 167 52 218 163 213 87 136 85 218 213 180 216 166 149 205 143 133 90 165 148 218 169 53 202 170 181 90 149 53 215 172 157 77 151 229 90 155 45 217 175 61 212 176 21 91 69 37 219 178 173 86 121 69 219 223 236 217 181 69 199 182 117 91 114 132 219 184 5 199 185 165 91 110 180 219 187 189 70 160 213 219 199 76 218 190 45 201 191 5 220 144 20 220 193 237 200 194 53 220 140 124 218 196 61 76 172 101 220 153 221 218 199 237 213 200 149 92 197 116 220 202 205 217 179 197 92 191 244 218 205 77 199 206 245 220 114 4 221 208 13 199 209 37 221 110 204 219 211 165 197 212 85 93 88 100 221 214 101 197 215 133 93 84 148 221 217 37 69 190 181 221 123 101 218 220 253 74 196 229 221 120 244 221 223 109 199 224 21 222 207 21 211 226 29 204 203 69 222 225 165 220 229 21 75 229 117 222 183 13 197 232 21 76 211 165 222 93 180 222 235 189 197 236 213 222 89 228 222 238 125 197 218 5 95 65 20 223 241 245 195 242 255 53 95 61 68 223 244 181 195 245 101 95 57 196 221 247 109 217 221 149 95 155 36 222 250 37 198 251 197 95 96 212 223 253 229 197 197 245 95 251 109 222 0 54 216 1 38 96 1 206 216 3 214 74 232 85 224 255 213 220 6 110 201 239 133 224 68 148 224 9 46 196 10 182 224 64 196 224 12 238 67 247 229 224 40 244 224 15 110 194 16 22 225 36 36 225 18 46 194 19 70 225 32 140 223 21 206 220 108 117 225 129 165 223 24 254 217 25 166 97 131 236 223 27 150 68 0 214 225 134 100 224 30 190 196 31 6 226 73 20 226 33 118 196 34 54 98 69 220 224 36 214 194 37 102 98 43 116 226 39 150 194 40 150 98 39 164 226 42 86 66 21 198 226 14 212 226 45 206 192 46 246 226 10 4 227 48 142 192 49 38 227 6 108 225 51 150 94 24 86 227 138 204 225 54 86 195 55 134 99 51 148 227 57 22 67 30 182 227 210 53 224 60 22 221 61 230 99 61 78 224 63 198 97 63 22 100 188 125 224 66 198 198 43 70 228 18 84 228 69 14 193 70 118 100 46 255 62 228 72 126 70 51 166 100 246 179 228 75 70 191 76 214 100 242 227 228 78 6 191 79 6 101 238 75 227 81 118 96 54 54 101 227 69 229 84 238 227 85 102 101 64 6 145 109 124 101 185 61 222 89 134 101 8 1 87 91 78 100 66 214 229 213 229 229 94 118 221 233 5 230 186 157 228 97 142 221 98 54 102 218 69 230 100 190 221 101 102 230 79 20 229 103 230 189 104 150 102 220 163 230 106 166 189 107 198 102 216 211 230 109 102 189 82 246 102 34 182 225 112 62 226 113 38 103 37 54 231 115 54 196 58 86 231 50 174 229 118 198 69 36 134 103 12 148 231 121 166 192 122 182 103 8 196 231 124 102 64 72 230 103 234 243 231 127 134 190 128 22 104 230 35 232 130 70 190 131 70 104 226 235 230 133 78 188 134 118 232 194 131 232 136 14 188 137 166 232 190 179 232 139 206 59 112 214 232 52 100 231 142 110 191 143 6 233 244 19 233 145 46 191 146 54 233 240 195 227 148 166 227 95 102 233 59 118 233 151 246 194 125 150 105 79 142 233 154 206 66 133 198 233 208 255 211 233 157 238 188 158 246 233 204 3 234 160 174 188 161 38 234 200 203 232 163 198 186 164 86 106 170 99 234 166 134 186 167 134 106 166 147 234 169 70 58 142 182 106 31 68 233 172 238 189 173 230 234 220 243 234 175 174 189 176 22 235 216 91 233 178 238 65 154 70 235 174 190 233 181 150 65 181 118 107 107 110 235 184 110 65 163 166 107 184 179 235 187 102 187 188 214 107 180 227 235 190 38 187 191 6 108 176 171 234 193 46 185 194 54 236 144 67 236 196 238 184 197 102 236 140 115 236 199 174 56 172 150 236 123 78 231 202 214 231 203 198 236 126 214 236 205 70 64 178 246 108 196 59 235 208 118 231 64 38 109 173 158 235 211 46 64 184 86 237 198 19 217 214 182 65 193 134 237 158 147 237 217 206 185 218 182 237 154 195 237 220 142 185 200 230 237 122 243 237 223 142 183 224 22 238 118 35 238 226 78 183 227 70 238 114 163 236 229 198 228 206 118 110 155 118 229 232 254 98 232 166 238 238 3 237 235 38 236 119 214 110 49 78 237 238 14 229 239 6 111 82 22 239 241 255 198 62 214 54 239 192 118 230 244 198 238 245 102 239 236 219 237 247 102 184 248 150 111 132 163 239 250 38 56 229 198 111 98 211 239 253 6 182 254 246 111 94 3 240 0 199 181 1 39 112 90 107 238 3 15 190 236 86 112 158 99 240 6 199 185 7 135 112 154 147 240 9 135 185 209 182 240 5 47 239 12 55 235 13 231 240 214 67 239 15 119 112 15 23 113 212 187 239 18 15 183 19 71 241 110 83 241 21 207 182 22 119 241 106 131 241 24 143 54 3 167 241 72 179 241 27 111 180 28 215 241 68 227 241 30 47 180 31 7 242 64 75 240 33 199 188 10 55 242 249 182 238 36 119 237 37 103 242 135 118 242 39 151 104 238 150 114 134 38 241 42 39 188 16 199 114 138 211 242 45 135 184 46 247 114 37 87 219 48 103 235 49 39 115 176 118 239 51 159 114 51 87 243 108 78 243 54 7 60 33 135 115 50 147 243 57 7 179 58 183 115 47 195 243 60 215 178 61 231 115 43 43 242 63 111 59 36 23 244 20 143 242 66 223 238 233 70 244 159 62 244 69 207 58 12 255 119 116 188 190 242 72 127 244 73 167 244 170 3 243 75 39 183 215 214 244 162 126 243 78 239 186 25 7 245 32 255 244 81 95 234 82 55 117 167 54 208 84 207 242 85 103 245 56 119 245 87 231 59 63 151 245 27 163 245 90 159 177 64 199 245 162 35 244 93 207 181 94 247 245 90 3 246 96 143 181 97 39 246 86 131 244 99 191 106 75 87 246 11 103 246 102 103 185 76 135 118 1 23 230 105 199 59 81 183 118 58 71 245 108 119 118 54 231 246 178 195 246 111 215 243 88 23 247 83 207 205 114 79 187 91 71 119 83 35 247 117 143 234 118 119 119 170 238 205 120 7 247 70 167 247 136 51 246 123 247 113 123 215 119 49 143 229 126 79 116 16 137 68 128 55 247 111 37 120 174 147 246 131 175 180 132 87 120 28 127 246 134 7 184 112 135 120 67 219 246 137 183 239 138 183 248 252 198 248 140 143 248 141 231 120 126 83 247 143 175 175 144 23 249 248 34 249 146 127 175 147 71 249 245 82 249 149 247 181 121 119 249 17 87 244 152 143 118 126 167 249 77 183 249 155 255 7 183 124 215 249 59 167 242 158 63 236 135 7 122 110 99 248 161 111 179 162 55 250 52 67 250 164 47 51 137 103 250 14 115 250 167 183 53 143 151 122 25 167 250 170 175 241 171 199 250 102 107 249 173 87 54 120 247 250 142 63 247 176 159 108 176 39 251 124 235 250 179 119 54 152 87 123 124 207 249 182 255 245 183 135 123 97 151 251 185 47 246 186 183 123 100 255 249 188 7 121 161 231 251 187 55 237 191 23 123 131 23 252 130 227 244 194 199 183 168 71 252 252 82 252 197 31 121 173 119 124 84 107 252 200 215 53 179 167 124 108 75 251 203 47 173 204 215 252 209 226 252 206 255 172 207 7 253 205 210 245 209 151 124 188 55 125 70 227 249 212 15 177 213 103 125 168 71 253 215 39 180 100 151 253 84 91 250 218 63 177 219 199 125 73 243 251 221 39 245 192 247 125 106 155 252 224 151 174 225 39 126 232 50 254 227 103 174 228 87 126 228 98 254 230 55 46 209 135 126 125 179 252 233 103 53 233 183 254 189 194 254 236 247 183 234 231 126 82 43 253 239 239 51 215 255 23 127 255 34 255 242 215 175 243 71 127 251 82 255 245 167 47 218 119 127 64 211 253 248 31 176 249 167 255 255 178 255 251 151 181 222 215 127 128 8 32 112 32 193 130 6 15 34 76 168 112 33 195 134 14 31 66 140 40 113 34 197 138 22 47 98 204 168 113 35 199 142 30 63 130 12 41 114 36 201 146 38 79 162 76 169 114 37 71 92 46 95 194 140 41 211 24 203 154 54 111 226 204 169 115 39 207 158 62 127 2 13 42 116 40 209 162 70 143 34 77 170 116 41 211 166 78 159 66 141 42 117 42 213 170 86 175 98 205 170 117 43 215 174 94 191 130 69 40 115 44 89 154 97 207 162 77 171 118 45 219 182 110 223 194 141 43 119 46 221 186 118 239 226 205 171 119 47 223 190 126 255 2 14 140 151 44 97 152 102 5 35 78 172 120 49 227 198 142 31 67 142 44 121 50 229 202 150 47 99 206 172 121 51 231 206 32 11 131 62 236 121 52 233 210 166 79 163 78 173 122 53 235 214 174 95 195 142 45 123 54 109 211 160 11 139 174 173 123 55 239 222 190 127 3 255 15 46 124 56 241 226 198 143 35 79 158 249 54 225 97 202 159 67 143 46 125 58 245 234 214 175 99 207 174 125 59 247 238 42 153 147 117 238 125 60 249 242 230 207 163 79 175 126 61 251 246 238 223 163 7 63 86 60 252 250 246 239 227 207 175 127 63 255 254 254 255 3 24 96 0 242 201 68 159 128 7 34 152 160 130 11 50 216 160 131 15 66 24 161 132 37 17 24 147 129 19 98 152 161 134 27 114 216 161 135 31 130 24 162 136 125 85 8 147 41 35 162 152 162 138 43 178 216 162 139 47 194 24 163 131 37 190 20 140 140 55 226 152 163 142 59 242 216 163 143 63 2 57 24 141 184 216 24 164 145 71 34 153 164 146 75 50 217 164 147 60 14 73 228 147 83 82 89 165 149 87 98 153 165 150 91 246 22 101 145 92 130 25 166 152 99 146 89 166 153 103 162 89 84 148 191 164 217 166 155 111 194 25 167 156 115 210 121 100 148 190 212 153 167 158 123 242 217 167 159 127 2 170 221 157 129 18 90 168 161 135 34 154 168 162 139 10 73 35 158 140 66 26 169 164 255 147 82 90 169 165 151 102 52 40 166 155 114 218 169 167 159 130 26 170 150 81 230 38 170 169 167 162 154 170 170 171 178 250 31 169 173 194 26 171 172 179 210 90 171 173 180 189 122 171 174 187 242 218 171 175 191 2 171 86 174 193 18 91 172 177 199 34 155 172 178 45 13 89 234 178 207 66 27 173 180 211 82 27 106 148 23 86 155 173 182 219 114 219 173 183 100 94 251 173 184 227 146 91 174 185 231 170 24 46 186 235 178 219 174 187 239 194 27 223 144 216 198 91 175 189 247 226 155 175 190 182 205 187 175 191 255 2 28 176 192 3 203 21 229 137 4 35 156 176 194 11 51 220 240 78 94 58 28 177 196 19 83 92 177 197 3 65 124 177 198 27 115 220 177 199 226 102 252 177 200 35 147 92 178 201 177 134 124 178 202 43 179 220 178 203 128 174 249 178 204 51 211 92 179 205 86 106 122 179 206 59 243 220 179 207 33 230 252 179 208 67 19 93 180 209 240 5 125 180 210 75 51 221 180 211 195 69 25 202 211 83 83 93 181 213 87 111 54 44 214 91 115 221 181 215 255 95 191 165 53 216 99 147 93 182 217 103 171 217 44 218 107 179 221 182 219 111 119 36 54 220 115 211 93 183 221 103 171 123 183 222 123 243 221 183 210 121 251 29 184 224 131 19 110 50 224 133 35 158 184 226 139 15 124 56 227 143 67 30 185 228 32 247 59 185 229 151 99 158 121 177 6 107 222 185 231 159 131 126 106 202 161 147 94 186 233 167 195 60 228 151 168 179 222 186 235 175 139 57 58 236 179 211 94 187 237 61 202 126 187 238 187 243 222 251 134 49 251 30 188 240 195 19 239 234 144 143 22 159 188 242 203 51 223 93 210 205 67 31 189 244 211 119 121 60 245 215 99 159 189 246 165 61 191 189 247 223 131 31 62 137 106 139 95 190 249 231 163 159 150 220 233 179 223 190 251 239 27 181 62 252 243 211 95 191 253 36 201 127 191 254 251 243 223 191 66 249 251 47 128 2 28 160 251 28 71 192 3 34 48 129 219 51 160 2 27 232 192 7 14 143 129 16 156 32 5 43 200 58 9 90 48 131 26 220 160 228 48 200 193 15 130 48 132 123 227 156 8 75 104 194 255 19 194 45 119 40 92 33 11 91 72 53 21 186 48 134 50 156 33 207 96 72 195 27 226 48 135 37 179 161 14 123 232 195 31 58 12 120 64 28 34 17 139 216 56 235 25 49 137 74 92 226 187 186 199 196 39 66 49 138 210 114 162 20 171 104 197 43 242 138 138 88 220 34 23 187 40 58 242 121 49 140 98 28 227 166 0 72 198 51 162 49 141 124 50 163 26 219 232 198 55 150 137 141 112 156 35 29 235 232 36 57 218 49 143 122 220 99 142 60 200 199 63 2 50 144 35 242 163 32 11 105 200 67 206 168 114 136 92 36 35 27 137 32 66 58 50 146 146 156 100 121 32 73 201 75 98 50 147 208 33 161 38 59 233 201 79 34 135 135 160 28 37 41 75 185 26 81 154 50 149 170 92 165 101 80 201 202 87 194 50 150 128 113 165 44 107 105 203 91 134 109 72 108 194 37 47 123 233 75 182 104 241 151 194 28 38 49 157 18 204 98 34 51 153 202 236 201 49 151 233 204 103 66 19 127 72 140 38 53 171 105 77 143 224 241 154 218 220 38 55 5 146 205 110 130 255 51 156 203 252 166 56 203 105 206 94 146 243 156 234 92 39 43 211 201 206 119 194 211 147 150 140 39 61 235 73 201 121 218 51 159 250 52 36 62 247 233 207 127 218 177 159 0 29 40 65 209 40 208 130 34 52 161 88 228 164 66 27 234 208 49 210 242 161 18 157 40 17 35 74 209 139 98 148 134 22 205 40 71 59 106 194 141 122 52 164 34 181 160 16 71 106 210 147 130 176 153 40 93 41 75 7 168 210 150 194 52 166 245 123 169 76 107 106 211 243 69 237 166 58 221 233 251 220 201 211 159 2 53 121 62 13 42 81 139 170 187 161 26 53 169 74 189 32 24 151 234 212 167 222 238 160 80 157 42 85 59 168 200 170 98 53 171 158 147 170 86 187 234 213 187 113 245 171 98 29 235 218 194 74 214 179 162 181 107 12 77 43 91 219 90 86 213 185 53 174 114 37 27 72 231 106 215 187 246 172 174 120 221 43 95 95 166 215 190 2 54 176 35 43 169 96 11 107 216 150 209 244 176 138 93 172 196 18 203 216 199 66 246 136 142 138 44 101 43 27 196 105 90 54 179 255 154 253 23 82 55 235 217 207 106 171 179 160 29 45 105 149 37 218 210 162 54 181 190 58 173 106 91 235 90 89 177 246 181 178 157 173 169 204 74 219 219 226 150 83 182 205 45 111 123 11 169 221 250 54 184 194 13 20 112 135 107 220 227 210 169 184 200 93 46 115 207 180 214 230 66 55 186 123 250 171 116 171 107 93 44 81 247 186 218 221 238 146 178 203 221 239 130 23 119 112 13 47 121 203 251 36 194 154 55 189 234 245 145 99 215 235 222 247 130 168 189 240 157 47 125 37 36 223 250 226 55 191 143 196 172 126 251 235 223 7 197 246 191 2 30 240 121 2 76 224 3 35 56 59 6 78 48 131 27 252 156 5 59 56 194 18 14 14 132 39 108 225 11 207 70 185 24 222 48 135 89 163 225 14 131 56 196 158 249 176 136 75 108 98 202 144 248 196 42 94 177 98 82 204 226 23 195 120 47 207 141 49 141 107 44 25 239 218 56 199 58 142 11 142 119 236 227 31 159 165 199 64 30 50 145 177 34 228 34 35 57 201 198 212 165 146 155 236 228 176 220 247 201 82 158 255 242 80 162 76 229 43 99 57 39 86 206 50 151 187 124 146 45 123 57 204 98 142 91 83 199 108 230 51 163 164 194 104 94 51 155 49 86 230 54 195 57 206 21 81 179 156 235 204 101 58 219 57 207 83 118 177 158 251 220 100 62 251 57 208 68 6 180 160 11 189 99 66 27 58 209 52 70 180 162 27 189 226 25 59 58 210 88 62 178 164 43 205 98 74 91 58 211 37 198 180 166 59 205 97 78 123 58 212 19 70 175 168 75 157 99 48 155 58 213 18 70 181 170 91 157 96 86 187 58 214 2 206 169 172 107 109 98 60 219 58 215 230 197 181 174 123 253 93 94 251 58 216 214 5 182 176 139 221 92 70 27 59 217 198 69 182 178 155 221 91 102 59 59 218 180 133 182 180 171 221 90 106 91 59 219 164 133 180 182 187 125 93 80 123 59 220 168 5 183 184 203 253 89 114 155 59 221 150 69 183 186 219 253 88 82 187 59 222 184 133 181 188 235 253 110 254 218 59 223 174 165 183 190 251 13 88 90 251 59 224 165 37 182 192 11 46 86 130 27 60 225 89 69 184 194 255 27 14 85 134 59 60 226 73 197 182 196 43 254 83 138 91 60 227 54 197 184 198 59 222 82 142 123 60 228 38 5 185 200 75 222 81 110 155 60 229 88 101 183 202 91 46 82 150 187 60 230 25 133 185 204 107 46 81 154 219 60 231 9 133 183 206 123 126 83 126 251 60 232 13 5 186 208 139 78 80 162 27 61 233 251 68 186 210 155 78 79 136 59 61 234 220 132 186 212 171 94 77 170 91 61 235 206 196 186 214 187 94 76 174 123 61 236 190 36 185 216 203 94 75 178 155 61 237 237 188 170 218 219 254 78 180 187 61 238 159 132 187 220 235 142 73 148 219 61 239 209 196 185 222 251 222 73 190 251 61 240 247 28 175 224 11 63 78 194 27 62 241 196 228 185 226 27 127 118 124 59 62 242 178 100 186 228 43 47 72 202 91 62 243 123 196 188 230 59 79 71 176 123 62 244 92 4 189 232 75 95 69 210 155 62 245 76 68 189 234 91 95 68 214 187 62 246 62 164 187 236 107 127 67 218 219 62 247 46 196 189 238 123 127 66 222 251 62 248 41 101 187 240 139 127 255 70 188 27 63 249 87 4 188 242 155 31 66 230 59 63 250 26 132 190 244 171 63 65 234 91 63 251 10 100 188 246 187 175 67 206 123 63 252 13 4 191 248 203 79 64 242 155 63 253 253 3 184 250 219 223 66 216 187 63 254 223 131 191 252 235 143 61 250 219 63 255 209 195 191 254 251 175 60 224 251 95 0 10 15 0 10 96 1 238 14 1 26 96 2 210 14 2 42 96 3 182 14 3 58 96 4 150 14 242 73 96 5 154 15 246 89 96 6 186 14 6 106 96 7 154 14 7 122 96 8 126 14 8 138 96 9 98 14 247 153 96 10 46 15 250 169 96 11 106 14 11 186 96 12 78 14 12 202 96 13 50 14 13 218 96 14 22 14 255 233 96 15 182 13 15 250 96 16 154 13 16 10 97 17 126 13 17 26 97 18 98 13 18 42 97 19 78 13 4 58 97 20 46 13 20 74 97 21 18 13 21 90 97 22 230 21 241 105 97 23 34 14 22 122 97 24 202 12 5 138 97 25 206 13 9 154 97 26 234 12 26 170 97 27 206 12 27 186 97 28 178 12 28 202 97 255 29 238 16 147 217 97 30 226 13 228 233 97 31 110 13 14 250 97 32 14 22 31 10 98 33 54 13 32 26 98 34 90 12 19 42 98 35 234 11 35 58 98 36 214 11 36 74 98 37 182 11 37 90 98 38 154 11 38 106 98 39 126 11 24 122 98 40 110 11 40 138 98 41 78 11 41 154 98 42 46 11 42 170 98 43 26 11 43 186 98 44 254 10 25 202 98 45 18 12 29 218 98 46 34 11 46 234 98 47 6 11 47 250 98 48 102 17 226 9 99 49 250 11 10 26 99 50 94 34 33 42 99 51 178 11 34 58 99 52 214 10 52 74 99 53 194 10 53 90 99 54 166 10 39 106 99 55 42 10 55 122 99 56 22 10 56 138 99 57 250 9 57 154 99 58 230 9 58 170 99 59 198 9 44 186 99 60 182 9 60 202 99 61 198 17 23 218 99 62 210 10 61 234 99 63 102 9 63 250 99 64 82 9 45 10 100 65 150 17 49 26 100 66 90 11 66 42 100 67 234 22 67 58 100 68 86 10 48 74 100 69 54 9 50 90 100 70 18 10 54 106 100 71 222 17 255 51 122 100 72 246 9 71 138 100 73 6 9 251 153 100 74 78 215 155 169 100 75 202 9 59 186 100 76 78 8 76 202 100 77 38 18 141 56 139 77 234 100 236 224 227 78 250 228 168 244 228 79 10 101 149 0 228 80 26 37 126 20 229 81 42 229 123 36 229 82 58 165 122 16 228 83 74 229 141 80 228 84 90 37 82 66 228 85 106 37 85 102 229 86 122 165 139 84 229 87 138 101 129 225 225 88 154 101 139 144 228 89 170 165 188 76 214 90 186 165 136 164 229 91 202 229 118 196 229 92 218 165 117 208 228 93 234 101 109 228 229 94 250 37 108 244 229 95 10 230 41 177 228 96 26 38 127 4 230 97 42 230 136 5 229 98 58 102 123 52 229 99 74 102 101 68 230 100 90 38 100 84 230 101 106 230 98 100 230 102 122 102 96 68 229 103 138 166 114 132 229 104 154 230 141 117 229 105 170 102 114 148 230 106 186 102 98 180 230 107 202 230 95 96 228 108 218 38 95 130 228 109 234 38 174 228 230 110 250 230 107 212 229 111 10 103 163 148 8 242 12 231 113 2 102 56 97 34 231 114 158 70 98 50 231 115 62 133 115 66 231 116 42 133 116 82 231 117 166 13 78 98 231 118 102 77 99 114 231 119 50 70 103 130 231 120 222 132 120 146 231 121 126 135 119 162 231 122 234 69 64 0 0 59) asByteArray ]. ^ xxxCache at: 1! ! WAComponent subclass: #AIMSBaseWidget instanceVariableNames: 'parent' classVariableNames: '' poolDictionaries: '' category: 'AIMS-View'! !AIMSBaseWidget class methodsFor: 'instance creation' stamp: 'rbb 11/1/2006 10:00'! parent: aWidget ^(self new) parent: aWidget! ! !AIMSBaseWidget methodsFor: 'accessing' stamp: 'rbb 11/1/2006 10:02'! parent "Answer the value of parent" ^ parent! ! !AIMSBaseWidget methodsFor: 'accessing' stamp: 'rbb 11/1/2006 10:02'! parent: anObject "Set the value of parent" parent := anObject! ! AIMSBaseWidget subclass: #AIMSBrowseCategory instanceVariableNames: 'category tasks taskWidget persons editWidget categories reportWidget searchActive' classVariableNames: '' poolDictionaries: '' category: 'AIMS-Old'! !AIMSBrowseCategory methodsFor: 'rendering' stamp: 'rbb 10/31/2006 14:58'! actionsFor: aRec on: html self checkBoxFor: aRec on: html. self deleteFor: aRec on: html. self editFor: aRec on: html. ! ! !AIMSBrowseCategory methodsFor: 'accessing' stamp: 'rbb 11/22/2006 15:15'! category ^ category ifNil: [category := categories asArray first]! ! !AIMSBrowseCategory methodsFor: 'rendering' stamp: 'rbb 12/13/2006 12:44'! checkBoxFor: rec on: html html checkbox submitFormNamed: 'reviewForm', (rec id asString); value: rec reviewed; id: 'cb', (rec id asString); callback: [:val | self saveRecord: rec val: val]. html text: 'Approved'. ! ! !AIMSBrowseCategory methodsFor: 'rendering' stamp: 'gwm 8/3/2007 15:46'! checkQueryStatus | taskQuery | (self searchActive) ifTrue: [self searchActive: false] ifFalse: [ (self category id = 0) ifTrue: [taskQuery := tasks] ifFalse:[taskQuery := tasks where: #categoryid equals: self category id]. (self showAllTasks) ifTrue: [self rows: taskQuery] ifFalse: [self rows: (taskQuery select: [:ea | ea reviewed])]]! ! !AIMSBrowseCategory methodsFor: 'rendering' stamp: 'rbb 11/30/2006 13:54'! children ^ Array with: taskWidget with: reportWidget! ! !AIMSBrowseCategory methodsFor: 'rendering' stamp: 'lr 12/19/2007 22:39'! deleteFor: aRec on: html html break. html anchor callback: [ self deleteRec: aRec ]; with: 'Delete'! ! !AIMSBrowseCategory methodsFor: 'rendering' stamp: 'rbb 10/31/2006 15:06'! deleteRec: aRec (self confirm: 'Really delete the "', aRec title,'" task?') ifTrue: ["The database record, the task file, image, and report all must be disposed of" self removeFilesFor: aRec. tasks deleteFor: (tasks select: [:ea | ea id = aRec id]). self deleted: true] ! ! !AIMSBrowseCategory methodsFor: 'rendering' stamp: 'rbb 11/2/2006 17:16'! editFor: aRec on: html html break. html anchor callback: [self call: (editWidget task: aRec)]; with: 'Edit'! ! !AIMSBrowseCategory methodsFor: 'rendering' stamp: 'rbb 10/7/2006 13:52'! imageLinkFor: task |url person email | person := persons where: #id equals: task personid. email := person asArray first email. url := 'tasks/', email, '/', task image. "html anchor resourceUrl: url. " ^ url! ! !AIMSBrowseCategory methodsFor: 'initialization' stamp: 'lr 12/10/2007 21:22'! initialize super initialize. taskWidget := AIMSTaskViewer parent: self. editWidget := AIMSTaskEditor parent: self! ! !AIMSBrowseCategory methodsFor: 'accessing' stamp: 'rbb 9/22/2006 11:23'! on: aCategory category := aCategory! ! !AIMSBrowseCategory methodsFor: 'rendering' stamp: 'rbb 10/31/2006 15:17'! removeFileFrom: aRec named: fname | sl folderName email person fileName | person := ((persons select: [:ea | ea id = aRec personid]) asArray) first. email := person email. sl := FileDirectory default slash. folderName := FileDirectory default fullName, sl, 'tasks', sl, email. FileDirectory default assureExistenceOfPath: folderName. fileName := folderName, sl, fname. FileDirectory deleteFilePath: fileName. ^ true! ! !AIMSBrowseCategory methodsFor: 'rendering' stamp: 'rbb 10/31/2006 15:09'! removeFilesFor: aRec self removeFileFrom: aRec named: (aRec image). self removeFileFrom: aRec named: (aRec taskfile). self removeFileFrom: aRec named: (aRec taskreport).! ! !AIMSBrowseCategory methodsFor: 'rendering' stamp: 'lr 12/19/2007 22:38'! renderContentOn: html (self category isNil) ifTrue: [html heading level: 3; with: 'No Category Selected'] ifFalse:[ self checkQueryStatus. html div class: 'tasklist'; with: [ html anchor callback: [self answer: true]; with: ['[Back]']. html render: self reportWidget]] ! ! !AIMSBrowseCategory methodsFor: 'rendering' stamp: 'rbb 10/23/2006 11:01'! reportLinkFor: task |url person email | person := persons where: #id equals: task personid. email := person asArray first email. url := 'tasks/', email, '/', task taskreport. "html anchor resourceUrl: url. " ^ url! ! !AIMSBrowseCategory methodsFor: 'accessing' stamp: 'rbb 11/22/2006 16:22'! reportWidget ^ reportWidget ifNil: [ self setupReportWidget ]! ! !AIMSBrowseCategory methodsFor: 'initialization' stamp: 'rbb 11/30/2006 14:52'! rows ^ self reportWidget rows ifNil: [^ (tasks select: [:ea | (ea categoryid = self category id)])]! ! !AIMSBrowseCategory methodsFor: 'rendering' stamp: 'gwm 8/3/2007 15:48'! rows: aQuery self reportWidget rows: aQuery! ! !AIMSBrowseCategory methodsFor: 'rendering' stamp: 'gwm 8/3/2007 15:49'! saveRecord: rec val: value "They clicked on the checkbox to change it" (rec reviewed = value) ifFalse: ["They are not equal, so update the database" (tasks where: #id equals: rec id) update: [:ea | ea reviewed: value]]. ! ! !AIMSBrowseCategory methodsFor: 'rendering' stamp: 'gwm 8/3/2007 15:39'! searchActive ^ searchActive ifNil: [false]! ! !AIMSBrowseCategory methodsFor: 'rendering' stamp: 'gwm 8/3/2007 15:42'! searchActive: aBoolean searchActive := aBoolean! ! !AIMSBrowseCategory methodsFor: 'initialization' stamp: 'rbb 12/8/2006 15:59'! setupReportWidget |cols| cols := OrderedCollection new add: ((AIMSReportColumn selector: #taskfile title: 'Download') valueBlock: [:obj :html | html anchor url: (self taskLinkFor: obj); with: [ html image fileName: 'resources/download.png'; noBorder; mimeType: 'image/pngž']]); add: ((AIMSReportColumn selector: #title title: 'Task') valueBlock: [:obj :html | html anchor url: (self reportLinkFor: obj); with: obj title]); add: ((AIMSReportColumn selector: #image title: 'Image') valueBlock: [:obj :html | html anchor with: [ html image fileName: (self imageLinkFor: obj); mimeType: 'image/jpeg'; altText: 'Image for ', obj title ; noBorder; width: 100]]); add: (AIMSReportColumn renderBlock: [:obj :html | html emphasis: obj description] title: 'Description'); add: (AIMSReportColumn selector: #author title: 'Created By'); add: ((AIMSReportColumn selector: #submitted title: 'Submitted') sortBlock: [:a :b | a <= b ]; valueBlock: [:obj | obj submitted asDate mmddyyyy]); add: ((AIMSReportColumn selector: #reviewed title: 'Actions') hiddenBlock: [(self session loggedUser isNil) ]; valueBlock: [:obj :html | html form name: 'reviewForm', (obj id asString); with: [self actionsFor: obj on: html] ]); yourself. reportWidget := (AIMSCanvasTableReport new) columns: cols; rows: (tasks select: [:ea | (ea categoryid = self category id)]); rowPeriod: 1; rowColors: #('#CCCCCC' '#CCCCCC'); yourself.! ! !AIMSBrowseCategory methodsFor: 'rendering' stamp: 'rbb 11/30/2006 14:25'! showAllTasks ^ self session loggedUser notNil! ! !AIMSBrowseCategory methodsFor: 'rendering' stamp: 'rbb 10/7/2006 13:53'! taskLinkFor: task |url person email | person := persons where: #id equals: task personid. email := person asArray first email. url := 'tasks/', email, '/', task taskfile. "html anchor resourceUrl: url. " ^ url! ! !AIMSBrowseCategory methodsFor: 'rendering' stamp: 'rbb 9/22/2006 11:26'! trailName ^ 'Category: ', self category name! ! AIMSBaseWidget subclass: #AIMSCategoryList instanceVariableNames: 'widget categories category tree' classVariableNames: '' poolDictionaries: '' category: 'AIMS-Old'! !AIMSCategoryList class methodsFor: 'instance creation' stamp: 'rbb 10/7/2006 13:57'! parent: aWidget on: aCategory ^(self new) parent: aWidget; category: aCategory! ! !AIMSCategoryList methodsFor: 'accessing' stamp: 'rbb 10/7/2006 15:07'! category ^ category! ! !AIMSCategoryList methodsFor: 'accessing' stamp: 'rbb 10/7/2006 16:26'! category: aCategory category := aCategory. self setupReportWidget! ! !AIMSCategoryList methodsFor: 'rendering' stamp: 'lr 12/10/2007 21:16'! children ^Array with: widget with: tree! ! !AIMSCategoryList methodsFor: 'initialization' stamp: 'rbb 11/9/2006 15:28'! dataRows | catid rows | (self category isNil) ifTrue: [catid := 0] ifFalse: [catid := self category id]. (self session loggedUser isNil) ifTrue: [rows := (categories select: [:ea | (ea parentid = catid) & (ea name ~= 'Other') ])] ifFalse: [ rows := (categories select: [:ea | (ea parentid = catid)])]. ^ rows! ! !AIMSCategoryList methodsFor: 'initialization' stamp: 'lr 12/10/2007 21:25'! initialize | | super initialize. categories := RAPostgresRelation name: 'category' connection: self session connection. ! ! !AIMSCategoryList methodsFor: 'accessing' stamp: 'rbb 10/7/2006 15:25'! on: aCategory self category: aCategory! ! !AIMSCategoryList methodsFor: 'rendering' stamp: 'rbb 11/29/2006 09:49'! renderContentOn: html self category. (html div) class: 'categorylist'; with: [self renderListOn: html ]! ! !AIMSCategoryList methodsFor: 'rendering' stamp: 'rbb 11/22/2006 17:04'! renderListOn: html html render: widget. ! ! !AIMSCategoryList methodsFor: 'initialization' stamp: 'lr 12/19/2007 22:38'! setupReportWidget | cols catid | cols := OrderedCollection new add: ((AIMSReportColumn selector: #image title: 'Image' onClick: [:v | self inform: v description]) valueBlock: [:obj :html | html anchor callback: [self parent call: (AIMSCategoryView parent: self on: obj)]; with: [ html image fileName: 'resources/', obj image; mimeType: 'image/png'; border: 0; width: 50]]); add: (AIMSReportColumn selector: #name title: 'Name'); add: (AIMSReportColumn renderBlock: [:obj :html | html emphasis: obj description] title: 'Description'); yourself. (self category isNil) ifTrue: [catid := 0] ifFalse: [catid := self category id]. widget := (AIMSCanvasTableReport new) columns: cols; rows: self dataRows; rowPeriod: 1; rowColors: #('#CCCCCC' '#CCCCCC'); yourself.! ! !AIMSCategoryList methodsFor: 'rendering' stamp: 'rbb 9/21/2006 15:55'! trailName ^ 'Categories'! ! AIMSBaseWidget subclass: #AIMSCategoryTree instanceVariableNames: 'taskWidget tree tasks' classVariableNames: '' poolDictionaries: '' category: 'AIMS-Old'! !AIMSCategoryTree methodsFor: 'as yet unclassified' stamp: 'lr 12/10/2007 21:08'! categorySizeFor: aCategory ^ self storage tasks count: [ :each | each category = aCategory ]! ! !AIMSCategoryTree methodsFor: 'as yet unclassified' stamp: 'rbb 11/29/2006 15:54'! children ^ Array with: tree! ! !AIMSCategoryTree methodsFor: 'as yet unclassified' stamp: 'lr 12/10/2007 21:00'! initialize super initialize. tree := self setupTree. taskWidget := AIMSBrowseCategory parent: self! ! !AIMSCategoryTree methodsFor: 'as yet unclassified' stamp: 'lr 12/19/2007 22:39'! renderContentOn: html html div class: 'categorylist'; with: tree! ! !AIMSCategoryTree methodsFor: 'as yet unclassified' stamp: 'lr 12/10/2007 21:08'! setupTree ^ AIMSTree new root: self storage category; labelBlock: [ :each | each name , ' (' , (self categorySizeFor: each) asString , ' tasks)' ]; childrenBlock: [ :each | each children ]; selectBlock: [ :each | self call: (self taskWidget on: each) ]; yourself! ! !AIMSCategoryTree methodsFor: 'as yet unclassified' stamp: 'rbb 11/30/2006 14:47'! taskWidget ^ taskWidget! ! !AIMSCategoryTree methodsFor: 'as yet unclassified' stamp: 'rbb 11/29/2006 16:01'! trailName ^ 'Categories '! ! !AIMSCategoryTree methodsFor: 'as yet unclassified' stamp: 'rbb 11/29/2006 16:01'! tree ^ tree! ! AIMSBaseWidget subclass: #AIMSCategoryView instanceVariableNames: 'taskWidget categories categoryWidget category' classVariableNames: '' poolDictionaries: '' category: 'AIMS-Old'! !AIMSCategoryView class methodsFor: 'instance creation' stamp: 'rbb 10/7/2006 14:57'! parent: aWidget on: aCategory ^(self new) parent: aWidget; category: aCategory! ! !AIMSCategoryView methodsFor: 'accessing' stamp: 'rbb 10/7/2006 14:57'! category ^ category! ! !AIMSCategoryView methodsFor: 'accessing' stamp: 'rbb 10/7/2006 14:57'! category: aCategory category := aCategory! ! !AIMSCategoryView methodsFor: 'rendering' stamp: 'rbb 10/7/2006 14:59'! children ^Array with: taskWidget with: categoryWidget .! ! !AIMSCategoryView methodsFor: 'initialization' stamp: 'lr 12/10/2007 21:26'! initialize super initialize. categories := RAPostgresRelation name: 'category' connection: self session connection. taskWidget := AIMSBrowseCategory parent: self. categoryWidget := AIMSCategoryTree parent: self. ! ! !AIMSCategoryView methodsFor: 'rendering' stamp: 'rbb 11/29/2006 15:53'! renderContentOn: html html render: categoryWidget ! ! !AIMSCategoryView methodsFor: 'rendering' stamp: 'rbb 11/30/2006 13:49'! taskWidget ^ taskWidget! ! !AIMSCategoryView methodsFor: 'rendering' stamp: 'rbb 10/7/2006 16:30'! trailName (self category isNil) ifTrue: [^ 'Root Categories'] ifFalse: [^ 'Category: ', self category name.]! ! AIMSBaseWidget subclass: #AIMSContent instanceVariableNames: '' classVariableNames: '' poolDictionaries: '' category: 'AIMS-Session'! !AIMSContent methodsFor: 'rendering' stamp: 'lr 12/19/2007 22:38'! renderContentOn: html html heading level: 3; with: 'AIMS Task Repository'. html anchor callback: [self call: self parent categoryListWidget]; text: 'Browse By Category'. html break. html anchor callback: [self call: self parent searchWidget]; text: 'Task Search'. ! ! !AIMSContent methodsFor: 'rendering' stamp: 'rbb 9/21/2006 14:36'! trailName ^ 'Home'! ! AIMSBaseWidget subclass: #AIMSEditUser instanceVariableNames: 'emailText connection firstName lastName middleName personTable organization currentUser sessionLoginName sessionLoginPassword newUserTable isUpdated isError' classVariableNames: '' poolDictionaries: '' category: 'AIMS-Old'! !AIMSEditUser class methodsFor: 'as yet unclassified' stamp: 'jon made a few screens pretty 11/8/2007 15:52'! canBeRoot ^ true! ! !AIMSEditUser methodsFor: 'as yet unclassified' stamp: 'gm 11/12/2007 14:51'! authRow ^ ((self persons where: #login equals: sessionLoginName) where: #password equals: sessionLoginPassword)! ! !AIMSEditUser methodsFor: 'as yet unclassified' stamp: 'gm 11/12/2007 14:51'! getSessionData sessionLoginName := self session loggedUser. sessionLoginPassword := self session loggedUserPassword.! ! !AIMSEditUser methodsFor: 'as yet unclassified' stamp: 'gm 11/12/2007 14:30'! getUserData | row | [row := self authRow asArray.] on: Exception do: [:ex | Transcript cr; show: 'An error!!'. personTable := connection := nil. row := self authRow asArray]. row size > 0 ifTrue: [^row first values]. ^ nil! ! !AIMSEditUser methodsFor: 'as yet unclassified' stamp: 'gm 11/13/2007 10:10'! isError: aBoolean isError := aBoolean! ! !AIMSEditUser methodsFor: 'as yet unclassified' stamp: 'gm 11/13/2007 14:03'! isUpdated: aBoolean isUpdated := aBoolean! ! !AIMSEditUser methodsFor: 'as yet unclassified' stamp: 'gm 11/16/2007 14:35'! persons ^ personTable ifNil: [ personTable := RAPostgresRelation name: 'person' connection: AIMSPGPool connection.]! ! !AIMSEditUser methodsFor: 'as yet unclassified' stamp: 'gm 11/13/2007 12:12'! renderContentOn: html self getSessionData. self setUserData. (sessionLoginName isNil and: [sessionLoginPassword isNil]) ifFalse: [self renderUpdateUserFormOn: html.] ifTrue: [self answer].! ! !AIMSEditUser methodsFor: 'as yet unclassified' stamp: 'gm 11/16/2007 10:44'! renderUpdateUserFormOn: html html div style: ('text-align: center; width: 100%; align: center'); with: [ html form with: [ html heading level: 3; with: 'AIMS Repository - Update Page'. isUpdated = true ifTrue: [ isUpdated := false. html text: 'You have sucessfully updated your account information.'. html break. html break. html anchor callback: [ self answer]; with: 'Return to Account Options Page'. html break. html break. ]. html table class: 'newUserTable'; with: [ html tableRow: [html tableHeading: 'First Name:'; tableData: [html textInput value: firstName; callback: [:val | firstName := val]]; tableData: ''.]; tableRow: [html tableHeading: 'Middle Name:'; tableData: [html textInput value: middleName; callback: [:val | middleName := val]]; tableData: ''.]; tableRow: [html tableHeading: 'Last Name:'; tableData: [html textInput value: lastName; callback: [:val | lastName := val]]; tableData: ''.]; tableRow: [html tableHeading: 'Organization:'; tableData: [html textInput value: organization; callback: [:val | organization := val]]; tableData: ''.]; tableRow: [html tableHeading:'Email:'; tableData: [html textInput value: emailText; callback: [:val | emailText := val]]; tableData: ''.]; tableRow: [html tableHeading: ''; tableData: [html break. html submitButton callback: [self updateExistingUser]; text: 'Update User']; tableData: '']]]]. ! ! !AIMSEditUser methodsFor: 'as yet unclassified' stamp: 'gm 11/12/2007 15:39'! renderVerificationPageOn: html html heading level: 4; with: 'Your account has been updated.'. html space. html anchor callback: [ self answer]; with: 'Return to Account Options'.! ! !AIMSEditUser methodsFor: 'as yet unclassified' stamp: 'gm 11/12/2007 14:49'! setUserData currentUser := self getUserData. firstName := (currentUser at: 2). middleName := (currentUser at: 4). lastName := (currentUser at: 3). emailText := (currentUser at: 5). organization :=(currentUser at: 10). ! ! !AIMSEditUser methodsFor: 'as yet unclassified' stamp: 'gm 11/16/2007 10:43'! style ^' .newUserTable th {text-align: right; align: center; font-family: Arial; font-size: 10pt;} table.newUserTable {margin-left: auto; margin-right: auto} A:link {font-family: Arial; text-decoration: underline; font-size: 10pt;} A:visited {font-family: Arial; text-decoration: underline; font-size: 10pt;} A:active {font-family: Arial; text-decoration: underline; font-size: 10pt;} A:hover {font-family: Arial; text-decoration: underline; color: darkred; font-size: 10pt;}' ! ! !AIMSEditUser methodsFor: 'as yet unclassified' stamp: 'gm 11/13/2007 14:03'! updateExistingUser | isExist d | " verifying this user exists " isExist := ((self verifyUser count: [:ea | ea login = sessionLoginName])). d := Dictionary new. d at: 'first_name' put: firstName; at: 'middle_name' put: middleName; at: 'last_name' put: lastName; at: 'organization' put: organization; at: 'email' put: emailText. " enabled new user " isExist > 0 ifFalse: [isUpdated := false] ifTrue: [ isUpdated := true. (self persons where: #login equals: sessionLoginName) update: [:ea | d keysAndValuesDo: [:fld :val | ea takeValue: val forAttributeNamed: fld]]].! ! !AIMSEditUser methodsFor: 'as yet unclassified' stamp: 'gm 11/16/2007 14:35'! verifyUser ^ newUserTable ifNil: [newUserTable := RAPostgresRelation name: 'person' connection: AIMSPGPool connection.]! ! AIMSBaseWidget subclass: #AIMSEditUserPW instanceVariableNames: 'newUserTable personTable isValidated loginNewPassword loginConfirmNewPassword currentPassword sessionLoginName sessionLoginPassword statusMessage isError' classVariableNames: '' poolDictionaries: '' category: 'AIMS-Old'! !AIMSEditUserPW methodsFor: 'as yet unclassified' stamp: 'gm 11/13/2007 11:12'! clearFields currentPassword := ''. loginNewPassword := ''. loginConfirmNewPassword := ''. isValidated := false. isError := false.! ! !AIMSEditUserPW methodsFor: 'as yet unclassified' stamp: 'gm 11/12/2007 15:13'! getSessionData sessionLoginName := self session loggedUser. sessionLoginPassword := self session loggedUserPassword.! ! !AIMSEditUserPW methodsFor: 'as yet unclassified' stamp: 'gm 11/13/2007 10:26'! isError: aBoolean isError := aBoolean! ! !AIMSEditUserPW methodsFor: 'as yet unclassified' stamp: 'gm 11/13/2007 10:37'! isValidated: aBoolean isValidated := aBoolean! ! !AIMSEditUserPW methodsFor: 'as yet unclassified' stamp: 'gm 11/16/2007 14:35'! persons ^ personTable ifNil: [ personTable := RAPostgresRelation name: 'person' connection: AIMSPGPool connection.]! ! !AIMSEditUserPW methodsFor: 'as yet unclassified' stamp: 'gm 11/16/2007 10:45'! renderChangePasswordFormOn: html html div style: ('text-align: center; width: 100%; align: center'); with: [ html form with: [ html heading level: 3; with: 'AIMS Repository - Change Password'. isValidated = true ifTrue: [ self clearFields. html text: 'You have sucessfully changed your password. '. html break. html break. html anchor callback: [ self answer]; with: 'Return to Account Options Page'. html break. html break.]. isError = true ifTrue: [ html heading level: 4; with: statusMessage. html break.]. html table class: 'newUserTable'; with: [ html tableRow: [html tableHeading: 'Current Password:'; tableData: [html passwordInput value: currentPassword; callback: [:val | currentPassword := val]]; tableData: ''.]; tableRow: [html tableHeading: 'New Password:'; tableData: [html passwordInput value: loginNewPassword; callback: [:val | loginNewPassword := val]]; tableData: ''.]; tableRow: [html tableHeading: 'Confirm Password:'; tableData: [html passwordInput value: loginConfirmNewPassword; callback: [:val | loginConfirmNewPassword := val]]; tableData: ''.]; tableRow: [html tableHeading: ''; tableData: [html break. html submitButton callback: [self updateExistingUser]; text: 'Change Password']; tableData: '']]]]. ! ! !AIMSEditUserPW methodsFor: 'as yet unclassified' stamp: 'gm 11/12/2007 15:22'! renderContentOn: html self getSessionData. (sessionLoginName isNil and: [sessionLoginPassword isNil]) ifFalse: [ self renderChangePasswordFormOn: html.] ifTrue: [self answer].! ! !AIMSEditUserPW methodsFor: 'as yet unclassified' stamp: 'gm 11/13/2007 11:03'! statusMessage: aString statusMessage := aString! ! !AIMSEditUserPW methodsFor: 'as yet unclassified' stamp: 'gm 11/16/2007 10:44'! style ^' .newUserTable th {text-align: right; align: center; font-family: Arial; font-size: 10pt;} table.newUserTable {margin-left: auto; margin-right: auto} A:link {font-family: Arial; text-decoration: underline; font-size: 10pt;} A:visited {font-family: Arial; text-decoration: underline; font-size: 10pt;} A:active {font-family: Arial; text-decoration: underline; font-size: 10pt;} A:hover {font-family: Arial; text-decoration: underline; color: darkred; font-size: 10pt;}'! ! !AIMSEditUserPW methodsFor: 'as yet unclassified' stamp: 'gm 11/13/2007 11:20'! updateExistingUser | isExist | self validateNewPassword. isError "verify there was not a error in user entered fields" ifFalse: [ " verifying this user exists " isExist := ((self verifyUser count: [:ea | ea login = sessionLoginName])). isExist > 0 ifTrue: [ self session loggedUserPassword: loginNewPassword. isValidated := true. (self persons where: #login equals: sessionLoginName) update: [:ea | ea password: loginNewPassword]. ] ifFalse: [isValidated := false.].].! ! !AIMSEditUserPW methodsFor: 'as yet unclassified' stamp: 'gm 11/13/2007 15:18'! validateNewPassword (currentPassword = sessionLoginPassword) ifFalse: [ isError := true. statusMessage := 'Current password is not valid. Please try again.'.] ifTrue: [ "Make sure new password is not empty" loginNewPassword size > 0 ifFalse: [isError := true. statusMessage := 'You need to enter your new password.'] ifTrue: [ (loginNewPassword = loginConfirmNewPassword) ifTrue: [ isError := false. statusMessage := ''] ifFalse: [ isError := true. statusMessage := 'Your passwords do not match. Please try again.'].]].! ! !AIMSEditUserPW methodsFor: 'as yet unclassified' stamp: 'gm 11/16/2007 14:35'! verifyUser ^ newUserTable ifNil: [newUserTable := RAPostgresRelation name: 'person' connection: AIMSPGPool connection.]! ! AIMSBaseWidget subclass: #AIMSEnableAdminUser instanceVariableNames: 'personTable isValidated newUserTable aimsAccount isError' classVariableNames: '' poolDictionaries: '' category: 'AIMS-Old'! !AIMSEnableAdminUser class methodsFor: 'as yet unclassified' stamp: 'gm 11/13/2007 16:16'! canBeRoot ^ true! ! !AIMSEnableAdminUser methodsFor: 'as yet unclassified' stamp: 'gm 11/16/2007 14:45'! enableAdminOnAccount | isExist | " verifying this user exists " isExist := ((self verifyUser count: [:ea | ea login = aimsAccount])) . " enabled new user " isExist > 0 ifTrue: [ isError := false. isValidated := true. (self persons where: #login equals: aimsAccount) update: [:ea | ea admin: true]] ifFalse: [isError := true. isValidated := false.]. ! ! !AIMSEnableAdminUser methodsFor: 'as yet unclassified' stamp: 'gm 11/14/2007 12:08'! isError: aBoolean isError := aBoolean! ! !AIMSEnableAdminUser methodsFor: 'as yet unclassified' stamp: 'gm 11/14/2007 11:54'! isValidated: aBoolean isValidated := aBoolean! ! !AIMSEnableAdminUser methodsFor: 'as yet unclassified' stamp: 'gm 11/16/2007 14:35'! persons ^ personTable ifNil: [ personTable := RAPostgresRelation name: 'person' connection: AIMSPGPool connection.]! ! !AIMSEnableAdminUser methodsFor: 'as yet unclassified' stamp: 'gm 11/13/2007 16:18'! renderContentOn: html self renderLoginFormOn: html.! ! !AIMSEnableAdminUser methodsFor: 'as yet unclassified' stamp: 'gm 11/14/2007 12:33'! renderLoginFormOn: html html div style: ('text-align: center; width: 100%; align: center'); with: [ html form with: [ html heading level: 3; with: 'AIMS Repository - Enable Administrative Rights'. isError = true ifTrue: [html text: 'There was a problem updating this user, Please verify this user exists.'. html break. html break.]. isValidated = true ifTrue: [html text: 'This account has been updated with administrative rights.'. html break. html break.]. html table class: 'newUserTable'; with: [ html tableRow: [html tableHeading: 'AIMS Account:'; tableData: [html textInput value: aimsAccount ; callback: [:val | aimsAccount := val]]; tableData: ''.]; tableRow: [html tableHeading: ''; tableData: [html break. html submitButton callback: [self enableAdminOnAccount]; text: 'Update']; tableData: '']]]]. ! ! !AIMSEnableAdminUser methodsFor: 'as yet unclassified' stamp: 'gm 11/13/2007 16:14'! style ^' .newUserTable th { text-align: right; align: center; font-family: Arial; font-size: 10pt; } table.newUserTable { margin-left: auto; margin-right: auto }' ! ! !AIMSEnableAdminUser methodsFor: 'as yet unclassified' stamp: 'gm 11/16/2007 14:36'! verifyUser ^ newUserTable ifNil: [newUserTable := RAPostgresRelation name: 'person' connection: AIMSPGPool connection.]! ! AIMSBaseWidget subclass: #AIMSLoginUser instanceVariableNames: 'loginName loginPassword isChangeAccountInfo aimsEditUser isValidated newUserTable aimsChangePW aimsNewUser' classVariableNames: '' poolDictionaries: '' category: 'AIMS-Old'! !AIMSLoginUser class methodsFor: 'testing' stamp: 'jon made a few screens pretty 11/9/2007 16:22'! canBeRoot ^ true! ! !AIMSLoginUser class methodsFor: 'class initialization' stamp: 'lr 12/5/2007 22:57'! initialize self registerAsApplication: 'aims'! ! !AIMSLoginUser methodsFor: 'as yet unclassified' stamp: 'lr 12/10/2007 21:26'! initialize super initialize. aimsEditUser := AIMSEditUser parent: self. aimsChangePW := AIMSEditUserPW parent: self. aimsNewUser := AIMSNewUser parent: self. ! ! !AIMSLoginUser methodsFor: 'as yet unclassified' stamp: 'gm 11/16/2007 14:57'! isValidated: aBoolean isValidated := aBoolean! ! !AIMSLoginUser methodsFor: 'as yet unclassified' stamp: 'gm 11/16/2007 10:31'! renderAccountOptionsOn: html html div style: ('text-align: center; width: 100%; align: center'); with: [ html form with: [ html heading level: 3; with: 'AIMS Repository - Account Options'. html table class: 'newUserTable'; with: [ html tableRow: [html tableHeading: ''; tableData: [html anchor callback: [ isChangeAccountInfo := true. self call: aimsEditUser]; with: 'Update Your Account'.]; tableData: ''.]; tableRow: [html tableHeading: ''; tableData: [html anchor callback: [ self call: aimsChangePW]; with: 'Change Your Password'. ]; tableData: ''.] ]]]. ! ! !AIMSLoginUser methodsFor: 'as yet unclassified' stamp: 'gm 11/16/2007 16:09'! renderContentOn: html isValidated = true ifFalse: [self renderLoginFormOn: html] ifTrue: [self renderAccountOptionsOn: html]. ! ! !AIMSLoginUser methodsFor: 'as yet unclassified' stamp: 'gm 11/15/2007 10:49'! renderLoginFormOn: html html div style: ('text-align: center; width: 100%; align: center'); with: [ html form with: [ html heading level: 3; with: 'AIMS Repository Login Page'. "html text: 'Please login to your AIMS Repository account.'. html break." html text: ' Click '. html anchor callback: [self call: aimsNewUser]; with: 'here'. html text: ' to create a new AIMS Repository account.'. html break. html break. html table class: 'newUserTable'; with: [ html tableRow: [html tableHeading: 'Login:'; tableData: [html textInput value: loginName ; callback: [:val | loginName := val]]; tableData: ''.]; tableRow: [html tableHeading: 'Password:'; tableData: [html passwordInput value: loginPassword; callback: [:val | loginPassword := val]]; tableData: ''.]; tableRow: [html tableHeading: ''; tableData: [html break. html submitButton callback: [self validateExistingUser: html]; text: 'Login'.]; tableData: ['']]; tableRow: [html tableHeading: ''; tableData: ''; tableData: ''.] ]]]. ! ! !AIMSLoginUser methodsFor: 'as yet unclassified' stamp: 'gm 11/16/2007 10:41'! style ^' .newUserTable th {text-align: right; align: center; font-family: Arial; font-size: 10pt;} table.newUserTable {margin-left: auto; margin-right: auto} A:link {font-family: Arial; text-decoration: underline;} A:visited {font-family: Arial; text-decoration: underline;} A:active {font-family: Arial; text-decoration: underline;} A:hover {font-family: Arial; text-decoration: underline; color: darkred;}' ! ! !AIMSLoginUser methodsFor: 'as yet unclassified' stamp: 'gm 11/16/2007 14:58'! validateExistingUser: html | isExist | " verifying this user exists " isExist := ((self verifyUser count: [:ea | ea login = loginName & ea password = loginPassword])) . "currentUser := (self persons select: [:ea | (ea login = loginName) & (ea password = loginPassword) ])." " enabled new user " isExist > 0 ifTrue: [ isValidated := true. self session loggedUser: loginName. self session loggedUserPassword: loginPassword.] ifFalse: [ isValidated := false. self session loggedUser: nil. self session loggedUserPassword: nil.] ! ! !AIMSLoginUser methodsFor: 'as yet unclassified' stamp: 'gm 11/16/2007 14:19'! verifyUser ^ newUserTable ifNil: [newUserTable := RAPostgresRelation name: 'person' connection: AIMSPGPool connection.]! ! AIMSBaseWidget subclass: #AIMSMain instanceVariableNames: 'loginWidget pageWidget trail categoryListWidget searchWidget newUserWidget' classVariableNames: '' poolDictionaries: '' category: 'AIMS-Session'! !AIMSMain commentStamp: '' prior: 0! Database Schema definition for the AIMS Task Repository! !AIMSMain class methodsFor: 'seaside' stamp: 'rbb 9/21/2006 13:52'! canBeRoot ^ true! ! !AIMSMain class methodsFor: 'seaside' stamp: 'lr 12/10/2007 20:55'! initialize (self registerAsApplication: 'aims') preferenceAt: #sessionClass put: AIMSSession! ! !AIMSMain methodsFor: 'accessing' stamp: 'rbb 9/21/2006 15:47'! categoryListWidget "Answer the value of categoryListWidget" ^ categoryListWidget! ! !AIMSMain methodsFor: 'rendering' stamp: 'gwm 8/7/2007 13:46'! children ^ Array with: loginWidget with: pageWidget with: trail with: searchWidget with: categoryListWidget ! ! !AIMSMain methodsFor: 'initialization' stamp: 'lr 12/10/2007 21:39'! initialize super initialize. loginWidget := AIMSLogin new. pageWidget := AIMSContent parent: self. categoryListWidget := AIMSCategoryTree parent: self. searchWidget := AIMSSearch parent: self. trail := WATrail on: pageWidget! ! !AIMSMain methodsFor: 'accessing' stamp: 'rbb 9/21/2006 15:47'! loginWidget "Answer the value of loginWidget" ^ loginWidget! ! !AIMSMain methodsFor: 'accessing' stamp: 'lr 12/10/2007 20:51'! newUserWidget "Answer the value of searchWidget" ^ newUserWidget! ! !AIMSMain methodsFor: 'accessing' stamp: 'rbb 9/21/2006 15:47'! pageWidget "Answer the value of pageWidget" ^ pageWidget! ! !AIMSMain methodsFor: 'rendering' stamp: 'lr 12/10/2007 21:51'! renderAdminAreaOn: html html div id: #AdminArea; with: [ html text: 'Admin Area'; break. html anchor callback: [ self call: WAVersionUploader new ]; text: 'Upload New Code'. html break. html anchor callback: [ self call: self newUserWidget ]; text: 'New User' ]! ! !AIMSMain methodsFor: 'rendering' stamp: 'lr 12/10/2007 21:49'! renderContentOn: html html div id: #trail; with: [html render: trail]. html div class: #Content; with: [html render: pageWidget]. html render: loginWidget. self session loggedUser isNil ifFalse: [ self renderAdminAreaOn: html ]! ! !AIMSMain methodsFor: 'accessing' stamp: 'rbb 9/21/2006 15:49'! searchWidget "Answer the value of searchWidget" ^ searchWidget! ! !AIMSMain methodsFor: 'accessing' stamp: 'rbb 9/21/2006 15:47'! trail "Answer the value of trail" ^ trail! ! !AIMSMain methodsFor: 'accessing' stamp: 'rbb 9/21/2006 15:47'! trail: anObject "Set the value of trail" trail := anObject! ! !AIMSMain methodsFor: 'updating' stamp: 'lr 12/10/2007 21:28'! updateRoot: aRoot super updateRoot: aRoot. aRoot title: 'AIMS Task Repository'. aRoot stylesheet url: '/seaside/css/aims.css'. ! ! AIMSBaseWidget subclass: #AIMSNewUser instanceVariableNames: 'emailText passText connection firstName lastName middleName passConfirmText errorMessage completed uuid newUserTable personTable sUUID sEmail organization newUserText' classVariableNames: '' poolDictionaries: '' category: 'AIMS-Old'! !AIMSNewUser class methodsFor: 'as yet unclassified' stamp: 'gwm 8/7/2007 13:23'! canBeRoot ^ true! ! !AIMSNewUser methodsFor: 'as yet unclassified' stamp: 'gwm 8/16/2007 16:34'! ValidateNewUser | isExist | " verifying this user exists " isExist := ((self verifyNewUser count: [:ea | ea uuid = sUUID])) . " enabled new user " isExist > 0 ifTrue: [(self persons where: #email equals: sEmail) update: [:ea | ea enabled: true]. " user has been verified, remove them from verifyNewUser table " self verifyNewUser deleteFor: (self verifyNewUser select: [:ea | ea uuid = sUUID]). ^ true.] ifFalse:[^ false]. ! ! !AIMSNewUser methodsFor: 'as yet unclassified' stamp: 'gwm 8/9/2007 15:47'! appendErrorMessage: aString errorMessage := errorMessage, ' ', aString! ! !AIMSNewUser methodsFor: 'as yet unclassified' stamp: 'gwm 8/9/2007 16:03'! completed: aBoolean completed := aBoolean! ! !AIMSNewUser methodsFor: 'as yet unclassified' stamp: 'gwm 8/8/2007 14:49'! emailText ^ emailText ! ! !AIMSNewUser methodsFor: 'as yet unclassified' stamp: 'gwm 8/9/2007 15:47'! errorMessage ^ errorMessage ifNil: [errorMessage := '']! ! !AIMSNewUser methodsFor: 'as yet unclassified' stamp: 'gwm 8/9/2007 15:47'! errorMessage: aString errorMessage :=aString! ! !AIMSNewUser methodsFor: 'as yet unclassified' stamp: 'gwm 8/9/2007 15:40'! hasErrors ^ self errorMessage notEmpty! ! !AIMSNewUser methodsFor: 'as yet unclassified' stamp: 'gm 11/15/2007 11:15'! newUserText ^ newUserText ifNil: [^'enter new user']! ! !AIMSNewUser methodsFor: 'as yet unclassified' stamp: 'gwm 8/8/2007 14:49'! passText ^ passText ! ! !AIMSNewUser methodsFor: 'as yet unclassified' stamp: 'gm 11/16/2007 14:36'! persons ^ personTable ifNil: [ personTable := RAPostgresRelation name: 'person' connection: AIMSPGPool connection.]! ! !AIMSNewUser methodsFor: 'as yet unclassified' stamp: 'gwm 8/9/2007 16:03'! registrationSuccessful ^ completed ifNil: [^ false]! ! !AIMSNewUser methodsFor: 'as yet unclassified' stamp: 'gwm 8/16/2007 16:28'! renderConfirmPageOn: html html heading level: 3; with: 'Your account has been verified, you can now update your tasks to the AIMS Repository.'. html anchor url: 'http://www.aimsxml.com:8081/seaside/repo'; with: 'Browse AIMS Repository' ! ! !AIMSNewUser methodsFor: 'as yet unclassified' stamp: 'lr 12/19/2007 22:39'! renderContentOn: html sUUID := (self session currentRequest at: 'id' ifAbsent:[nil]). sEmail := (self session currentRequest at: 'email' ifAbsent:[nil]). (sUUID isNil and: [sEmail isNil]) ifFalse: [ self ValidateNewUser ifTrue: [self renderConfirmPageOn: html.] ifFalse: [self renderNoConfirmPageOn: html.]. ] ifTrue: [(self hasErrors) ifTrue: [ html div class: 'ErrorStuff'; with: self errorMessage. self resetErrorMessage ]. (self registrationSuccessful) ifTrue: [self renderVerificationPageOn: html] ifFalse: [self renderNewUserFormOn: html.]]. ! ! !AIMSNewUser methodsFor: 'as yet unclassified' stamp: 'gm 11/15/2007 11:31'! renderNewUserFormOn: html html div style: ('text-align: center; width: 100%; align: center'); with: [ html form with: [ html heading level: 3; with: 'AIMS Repository - Signup Page'. html table class: 'newUserTable'; with: [ html tableRow: [html tableHeading: ''; tableData: 'Required Field (*)'; tableData: ''.]; tableRow: [html tableHeading: 'First Name:'; tableData: [html textInput value: firstName ; callback: [:val | firstName := val]]; tableData: ''.]; tableRow: [html tableHeading: 'Middle Name:'; tableData: [html textInput value: middleName; callback: [:val | middleName := val]]; tableData: ''.]; tableRow: [html tableHeading: 'Last Name:'; tableData: [html textInput value: lastName; callback: [:val | lastName := val]]; tableData: ''.]; tableRow: [html tableHeading: 'Organization:'; tableData: [html textInput value: organization; callback: [:val | organization := val]]; tableData: ''.]; tableRow: [html tableHeading:'Email:'; tableData: [html textInput value: emailText; callback: [:val | emailText := val]]; tableData: '*'.]; tableRow: [html tableHeading: 'Password:'; tableData: [html passwordInput value: passText; callback: [:val | passText := val]]; tableData: '*'.]; tableRow: [html tableHeading: 'Confirm:'; tableData: [html passwordInput value: passConfirmText; callback: [:val | passConfirmText := val]]; tableData: '*'.]; tableRow: [html tableHeading: ''; tableData: [html break. html submitButton callback: [self savePerson]; text: 'Sign Up']; tableData: '']]]]. ! ! !AIMSNewUser methodsFor: 'as yet unclassified' stamp: 'gwm 8/16/2007 16:36'! renderNoConfirmPageOn: html html heading level: 3; with: 'Your account was not able to be verified.'. ! ! !AIMSNewUser methodsFor: 'as yet unclassified' stamp: 'gwm 8/21/2007 15:05'! renderVerificationPageOn: html html heading level: 4; with: 'A confirmation email has been sent to the email address you provided. Please Click on the confirmation link in the email to finish setting up your account.'. ! ! !AIMSNewUser methodsFor: 'as yet unclassified' stamp: 'gm 11/15/2007 11:16'! resetConnection connection := nil. ! ! !AIMSNewUser methodsFor: 'as yet unclassified' stamp: 'gwm 8/9/2007 15:47'! resetErrorMessage errorMessage := ''! ! !AIMSNewUser methodsFor: 'as yet unclassified' stamp: 'gwm 8/16/2007 15:08'! saveNewUser |saveRegDataFields | uuid := UUID new. saveRegDataFields := OrderedCollection new. saveRegDataFields add: emailText asString; add: uuid asString. self verifyNewUser addValues: saveRegDataFields. ! ! !AIMSNewUser methodsFor: 'as yet unclassified' stamp: 'gwm 8/21/2007 15:43'! savePerson |savePersonFields | self validate ifTrue: [ savePersonFields := OrderedCollection new. savePersonFields add: firstName; add: lastName; add: middleName; add: emailText; add: passText; add: false; add: emailText; add: false; add: organization. self persons addMostValues: savePersonFields. firstName := lastName := middleName := passText := passConfirmText := nil. self completed: true. self saveNewUser. self sendConfEmail] ! ! !AIMSNewUser methodsFor: 'as yet unclassified' stamp: 'jon made a few screens pretty 9/6/2007 13:12'! sendConfEmail SMTPClient deliverMailFrom: 'aimsrepo@ablelinktech.com' to: (Array with: emailText) text: 'Subject: AIMS Repository User Verification from: AIMS Repository Click on the following link to confirm your new AIMS Repository Account. http://www.aimsxml.com:8081/seaside/newUser?id=',uuid asString,'&email=',emailText usingServer: 'mail.ablelinktech.com' ! ! !AIMSNewUser methodsFor: 'as yet unclassified' stamp: 'jon made a few screens pretty 8/27/2007 14:20'! style ^' .newUserTable th { text-align: right; align: center; font-family: Arial; font-size: 10pt; } table.newUserTable { margin-left: auto; margin-right: auto }' ! ! !AIMSNewUser methodsFor: 'as yet unclassified' stamp: 'gwm 8/9/2007 15:53'! validate emailText ifNil: [self appendErrorMessage: 'You must enter an email address']. passText isEmptyOrNil ifTrue: [self appendErrorMessage: 'You must enter a password'] ifFalse: [ (passText = passConfirmText) ifFalse: [self appendErrorMessage: 'Your passwords don''t match']]. errorMessage isEmpty ifTrue: [^ true]. ^ false! ! !AIMSNewUser methodsFor: 'as yet unclassified' stamp: 'gm 11/16/2007 14:37'! verifyNewUser ^ newUserTable ifNil: [newUserTable := RAPostgresRelation name: 'verifynewuser' connection: AIMSPGPool connection.]! ! AIMSBaseWidget subclass: #AIMSSearch instanceVariableNames: 'category tasks taskWidget persons widget searchText' classVariableNames: '' poolDictionaries: '' category: 'AIMS-Old'! !AIMSSearch methodsFor: 'accessing' stamp: 'rbb 10/16/2006 14:45'! category ^ category ifNil: [category := 0]! ! !AIMSSearch methodsFor: 'rendering' stamp: 'rbb 10/16/2006 14:45'! children ^ Array with: taskWidget with: widget! ! !AIMSSearch methodsFor: 'rendering' stamp: 'rbb 10/16/2006 14:45'! imageLinkFor: task |url person email | person := persons where: #id equals: task personid. email := person asArray first email. url := 'tasks/', email, '/', task image. "html anchor resourceUrl: url. " ^ url! ! !AIMSSearch methodsFor: 'initialization' stamp: 'lr 12/10/2007 21:45'! initialize super initialize. taskWidget := AIMSTaskViewer parent: self. widget := AIMSBrowseCategory parent: self! ! !AIMSSearch methodsFor: 'accessing' stamp: 'rbb 10/16/2006 14:45'! on: aCategory category := aCategory! ! !AIMSSearch methodsFor: 'rendering' stamp: 'gwm 8/16/2007 13:38'! renderContentOn: html html div class: 'searchbox'; with: [ html form with: [ html textInput value: searchText; callback: [:val | searchText := val]. html submitButton ]]. html div class: 'tasklist'; with: [ (searchText isNil) ifFalse: [ self halt. widget searchActive: true. widget rows: self searchQuery. html render: widget]] ! ! !AIMSSearch methodsFor: 'initialization' stamp: 'gwm 8/3/2007 15:48'! searchQuery | query | (self session loggedUser isNil) ifTrue: [ query := (tasks select: [:ea | ((ea description like: self sqlSearchText ignoreCase: true) | (ea title like: self sqlSearchText ignoreCase: true) | (ea author like: self sqlSearchText ignoreCase: true)) & (ea reviewed) ])] ifFalse: [ query := (tasks select: [:ea | (ea description like: self sqlSearchText ignoreCase: true) | (ea title like: self sqlSearchText ignoreCase: true) | (ea author like: self sqlSearchText ignoreCase: true)] )]. "Transcript cr; show: 'searchQuery: ', query printString." ^ query! ! !AIMSSearch methodsFor: 'accessing' stamp: 'rbb 11/22/2006 15:42'! searchText ^ searchText ifNil: ['']! ! !AIMSSearch methodsFor: 'accessing' stamp: 'rbb 11/22/2006 15:43'! sqlSearchText ^ '%', self searchText, '%'! ! !AIMSSearch methodsFor: 'rendering' stamp: 'rbb 10/16/2006 14:45'! taskLinkFor: task |url person email | person := persons where: #id equals: task personid. email := person asArray first email. url := 'tasks/', email, '/', task taskfile. "html anchor resourceUrl: url. " ^ url! ! !AIMSSearch methodsFor: 'rendering' stamp: 'rbb 10/16/2006 14:45'! trailName ^ 'Search for Tasks'! ! AIMSBaseWidget subclass: #AIMSTaskEditor instanceVariableNames: 'task title taskFile taskImage taskReport author category persons tasks description submitted created modified notes categories person' classVariableNames: '' poolDictionaries: '' category: 'AIMS-Old'! !AIMSTaskEditor commentStamp: '' prior: 0! This is used by admins to edit the data for the supplied taskinfo record.! !AIMSTaskEditor methodsFor: 'rendering' stamp: 'rbb 11/3/2006 10:28'! categories ^ categories ifNil: [categories := RAPostgresRelation name: 'category' connection: self session connection]! ! !AIMSTaskEditor methodsFor: 'rendering' stamp: 'rbb 11/1/2006 09:57'! persons ^ persons ifNil: [persons := RAPostgresRelation name: 'person' connection: self session connection]! ! !AIMSTaskEditor methodsFor: 'rendering' stamp: 'rbb 11/3/2006 10:44'! renderCategoriesAsListWith: aRelation attribute: attr on: html | item | item := ((self categories select: [:ea | ea id = (aRelation at: attr)]) asArray) first. html select size: 1; list: (self categories asArray); selected: item; callback: [:v | category := v id]; labels: [:ea | ea name]! ! !AIMSTaskEditor methodsFor: 'rendering' stamp: 'rbb 12/13/2006 12:51'! renderContentOn: html html form with: [html fieldSet legend: 'Edit Task: ', self task title; with:[ (html label) for: #title; with: [html text: 'Title'; space. (html textInput) id: #title; value: self task title; callback: [:val | title := val]]. html break. (html label) for: #description; with: [html text: 'Description'; space. (html textInput) id: #description; value: self task description; callback: [:val | description := val]]. html break. (html label) for: #notes; with: [html text: 'Notes'; space. (html textArea) id: #notes; value: self task notes; callback: [:val | notes := val]]. html break. (html label) for: #taskFile; with: [html text: 'Task File'; space. (html textInput) id: #taskFile; value: self task taskfile; callback: [:val | taskFile := val]]. html break. (html label) for: #taskImage; with: [html text: 'Task Image'; space. (html textInput) id: #taskImage; value: self task image; callback: [:val | taskImage := val]]. html break. (html label) for: #taskReport; with: [html text: 'Task Report'; space. (html textInput) id: #taskReport; value: self task taskreport; callback: [:val | taskReport := val]]. html break. (html label) for: #author; with: [html text: 'Author'; space. (html textInput) id: #author; value: self task author; callback: [:val | author := val]]. html break. (html label) for: #category; with: [html text: 'Category'; space. self renderCategoriesAsListWith: (self task) attribute: #categoryid on: html]. html break. (html label) for: #submitter; with: [html text: 'Submitter'; space. self renderPersonsAsListWith: (self task) attribute: #personid on: html]. html break. html submitButton callback: [self save]; text: 'Save'. html submitButton callback: [self answer: true]; text: 'Cancel']]! ! !AIMSTaskEditor methodsFor: 'rendering' stamp: 'rbb 11/3/2006 10:37'! renderPersonsAsListWith: aRelation attribute: attr on: html | item | item := ((self persons select: [:ea | ea id = (aRelation at: attr)]) asArray) first. html select size: 1; list: (self persons asArray); selected: item; callback: [:v | person := v id]; labels: [:ea | (ea at: 'first_name'), ' ', (ea at: 'last_name' )]! ! !AIMSTaskEditor methodsFor: 'data' stamp: 'rbb 11/3/2006 10:43'! save (self tasks where: #id equals: task id) update: [:ea | ea title: title; author: author; description: description; image: taskImage; taskfile: taskFile; taskreport: taskReport; notes: notes; categoryid: category; personid: person]. self answer: true. ! ! !AIMSTaskEditor methodsFor: 'rendering' stamp: 'rbb 11/1/2006 09:56'! task ^ task! ! !AIMSTaskEditor methodsFor: 'rendering' stamp: 'rbb 11/1/2006 09:56'! task: aTaskRecord task := aTaskRecord! ! !AIMSTaskEditor methodsFor: 'rendering' stamp: 'rbb 11/3/2006 10:40'! tasks ^ tasks ifNil: [tasks := RAPostgresRelation name: 'taskinfo' connection: self session connection]! ! AIMSBaseWidget subclass: #AIMSTaskViewer instanceVariableNames: 'task' classVariableNames: '' poolDictionaries: '' category: 'AIMS-Old'! !AIMSTaskViewer methodsFor: 'accessing' stamp: 'rbb 10/7/2006 13:36'! on: aTask self task: aTask! ! !AIMSTaskViewer methodsFor: 'rendering' stamp: 'lr 12/19/2007 22:39'! renderContentOn: html html heading level: 3; with: self task title! ! !AIMSTaskViewer methodsFor: 'accessing' stamp: 'rbb 9/22/2006 11:47'! task ^ task! ! !AIMSTaskViewer methodsFor: 'accessing' stamp: 'rbb 9/22/2006 11:46'! task: aTask task := aTask! ! !AIMSTaskViewer methodsFor: 'rendering' stamp: 'rbb 10/7/2006 13:38'! trailName ^ 'Task Detail: ', self task title! ! WAComponent subclass: #AIMSLogin instanceVariableNames: 'user password' classVariableNames: '' poolDictionaries: '' category: 'AIMS-Session'! !AIMSLogin commentStamp: 'rbb 3/25/2005 12:22' prior: 0! SD stands for Session Data login. I am meant to be used in conjunction with a WASession that provides the data. I need some specific messages to be understood by the session, #userForLogin: aString, #loggedUser: anObject, #loggedUser. The object used for the #loggedUser must understand the messages #login and #password.! !AIMSLogin methodsFor: 'actions' stamp: 'rbb 3/25/2005 13:41'! confirmLogin (self session userForLogin: user) ifNotNilDo: [:tryUser | (password = tryUser password) ifTrue: [self session loggedUser: tryUser. password _ nil. ^ true] ifFalse: [self session loggedUser: nil. password _ nil]]. self inform: 'Sorry, the password or login is incorrect.' ! ! !AIMSLogin methodsFor: 'actions' stamp: 'rbb 5/23/2005 14:56'! logout self session loggedUser: nil.! ! !AIMSLogin methodsFor: 'rendering' stamp: 'lr 12/10/2007 21:29'! renderContentOn: html html div id: 'loginwidget'; with: [ self session loggedUser isNil ifTrue: [ self renderLoginFormOn: html ] ifFalse: [ self renderLoginInfoOn: html ] ]! ! !AIMSLogin methodsFor: 'rendering' stamp: 'lr 12/10/2007 21:37'! renderLoginFormOn: html html form defaultAction: [ self confirmLogin ]; with: [ html text: 'login:'. html textInput value: user; callback: [ :value | user := value ]. html break. html text: 'pass:'. html passwordInput value: password; callback: [ :value | password := value ]. html break. html submitButton callback: [ self confirmLogin ]; text: 'log in' ]! ! !AIMSLogin methodsFor: 'rendering' stamp: 'lr 12/10/2007 21:34'! renderLoginInfoOn: html html text: 'logged in as: '; text: self session loggedUser login; text: ' '. html anchor callback: [ self logout ]; with: '[x]'. html break! ! WATableReport subclass: #AIMSCanvasTableReport instanceVariableNames: '' classVariableNames: '' poolDictionaries: '' category: 'AIMS-Old'! !AIMSCanvasTableReport methodsFor: 'rendering' stamp: 'lr 12/10/2007 21:16'! renderColumn: aColumn row: aRow on: html (aColumn isHidden) ifTrue: [ ^ self ]. super renderColumn: aColumn row: aRow on: html ! ! !AIMSCanvasTableReport methodsFor: 'rendering' stamp: 'lr 12/10/2007 21:17'! renderHeaderForColumn: aColumn on: html (aColumn isHidden) ifTrue: [ ^ self ]. super renderHeaderForColumn: aColumn on: html ! ! !AIMSCanvasTableReport methodsFor: 'rendering' stamp: 'rbb 10/16/2006 10:25'! renderRowNumber: index item: row on: html html tableRow style: 'background-color: ' , (self colorForRowNumber: index); class: 'row', index asString; with: [ columns do: [ :each | self renderColumn: each row: row on: html ] ]! ! !AIMSCanvasTableReport methodsFor: 'rendering' stamp: 'rbb 10/16/2006 10:07'! renderTableFooterOn: html html tableRow class: 'tableFooter'; with:[ columns do: [ :each | self renderFooterForColumn: each on: html ] ]! ! !AIMSCanvasTableReport methodsFor: 'rendering' stamp: 'rbb 10/16/2006 10:08'! renderTableHeaderOn: html html tableRow class: 'tableHeader'; with: [ columns do: [ :each | self renderHeaderForColumn: each on: html ] ]! ! Object subclass: #AIMSCategory instanceVariableNames: 'name comment image children' classVariableNames: '' poolDictionaries: '' category: 'AIMS-Model'! !AIMSCategory methodsFor: 'actions' stamp: 'lr 12/10/2007 21:04'! add: anObject ^ children add: anObject! ! !AIMSCategory methodsFor: 'accessing-readonly' stamp: 'lr 12/10/2007 20:31'! children ^ children! ! !AIMSCategory methodsFor: 'accessing' stamp: 'lr 12/10/2007 20:31'! comment ^ comment! ! !AIMSCategory methodsFor: 'accessing' stamp: 'lr 12/10/2007 20:33'! comment: aString comment := aString! ! !AIMSCategory methodsFor: 'accessing' stamp: 'lr 12/10/2007 20:31'! image ^ image! ! !AIMSCategory methodsFor: 'accessing' stamp: 'lr 12/10/2007 20:31'! image: anObject image := anObject! ! !AIMSCategory methodsFor: 'initialization' stamp: 'lr 12/10/2007 20:32'! initialize super initialize. children := OrderedCollection new! ! !AIMSCategory methodsFor: 'accessing' stamp: 'lr 12/10/2007 20:32'! name ^ name! ! !AIMSCategory methodsFor: 'accessing' stamp: 'lr 12/10/2007 20:33'! name: aString name := aString! ! !AIMSCategory methodsFor: 'printing' stamp: 'lr 12/10/2007 20:43'! printOn: aStream super printOn: aStream. aStream nextPutAll: ' name: '; print: self name! ! !AIMSCategory methodsFor: 'actions' stamp: 'lr 12/10/2007 21:04'! remove: anObject ^ children remove: anObject! ! Object subclass: #AIMSPGPool instanceVariableNames: '' classVariableNames: '' poolDictionaries: '' category: 'AIMS-Old'! AIMSPGPool class instanceVariableNames: 'connArgs connection'! AIMSPGPool class instanceVariableNames: 'connArgs connection'! !AIMSPGPool class methodsFor: 'as yet unclassified' stamp: 'gm 11/16/2007 16:40'! connection connection ifNil: [connection := PGConnection new connectionArgs: self connectionArgs; startup; yourself]. (connection isConnected) ifFalse: [connection := PGConnection new connectionArgs: self connectionArgs; startup; yourself]. ^ connection! ! !AIMSPGPool class methodsFor: 'as yet unclassified' stamp: 'gm 11/16/2007 14:32'! connectionArgs ^ connArgs ifNil: [ connArgs := PGConnectionArgs hostname: (WACurrentSession value application preferenceAt: #dbHost) portno: (WACurrentSession value application preferenceAt: #dbPort) databaseName: (WACurrentSession value application preferenceAt: #dbName) userName: (WACurrentSession value application preferenceAt: #dbUser) password: (WACurrentSession value application preferenceAt: #dbPassword)]! ! Object subclass: #AIMSPerson instanceVariableNames: 'firstName middleName lastName email login password' classVariableNames: '' poolDictionaries: '' category: 'AIMS-Model'! !AIMSPerson methodsFor: 'accessing' stamp: 'lr 12/10/2007 20:31'! email ^ email! ! !AIMSPerson methodsFor: 'accessing' stamp: 'lr 12/10/2007 20:31'! email: anObject email := anObject! ! !AIMSPerson methodsFor: 'accessing' stamp: 'lr 12/10/2007 20:31'! firstName ^ firstName! ! !AIMSPerson methodsFor: 'accessing' stamp: 'lr 12/10/2007 20:31'! firstName: anObject firstName := anObject! ! !AIMSPerson methodsFor: 'accessing' stamp: 'lr 12/10/2007 20:31'! lastName ^ lastName! ! !AIMSPerson methodsFor: 'accessing' stamp: 'lr 12/10/2007 20:31'! lastName: anObject lastName := anObject! ! !AIMSPerson methodsFor: 'accessing' stamp: 'lr 12/10/2007 20:31'! login ^ login! ! !AIMSPerson methodsFor: 'accessing' stamp: 'lr 12/10/2007 20:31'! login: anObject login := anObject! ! !AIMSPerson methodsFor: 'accessing' stamp: 'lr 12/10/2007 20:31'! middleName ^ middleName! ! !AIMSPerson methodsFor: 'accessing' stamp: 'lr 12/10/2007 20:31'! middleName: anObject middleName := anObject! ! !AIMSPerson methodsFor: 'accessing' stamp: 'lr 12/10/2007 20:31'! password ^ password! ! !AIMSPerson methodsFor: 'accessing' stamp: 'lr 12/10/2007 20:31'! password: anObject password := anObject! ! !AIMSPerson methodsFor: 'printing' stamp: 'lr 12/10/2007 20:44'! printOn: aStream super printOn: aStream. aStream nextPutAll: ' login: '; print: self login! ! Object subclass: #AIMSStorage instanceVariableNames: 'users category tasks' classVariableNames: '' poolDictionaries: '' category: 'AIMS-Model'! AIMSStorage class instanceVariableNames: 'Default'! AIMSStorage class instanceVariableNames: 'Default'! !AIMSStorage class methodsFor: 'accessing' stamp: 'lr 12/10/2007 21:20'! default ^ Default ifNil: [ Default := self new initializeExample ]! ! !AIMSStorage methodsFor: 'accessing' stamp: 'lr 12/10/2007 21:03'! category "Answer the root category." ^ category! ! !AIMSStorage methodsFor: 'initialization' stamp: 'lr 12/10/2007 21:38'! initialize super initialize. category := AIMSCategory new name: 'Root'; yourself. users := OrderedCollection new. tasks := OrderedCollection new. ! ! !AIMSStorage methodsFor: 'initialization' stamp: 'lr 12/10/2007 21:38'! initializeExample self users add: (AIMSPerson new firstName: 'System'; lastName: 'Admin'; email: 'aims@aimsxml.com'; login: 'admin'; password: 'admin'; yourself). self category add: (AIMSCategory new name: 'Independent Living'; comment: 'Tasks for independent and supported living, such as cooking, cleaning, money management, using household appliances, and practicing healthy living.'; image: 'independent.jpg'; yourself); add: (AIMSCategory new name: 'Educational'; comment: 'Tasks for academic settings, such as using the library, recognizing bird songs, or learning the sounds of musical instruments.'; image: 'educational.jpg'; yourself); add: (AIMSCategory new name: 'Vocational'; comment: 'Work related tasks, such as using a FAX machine, cleaning offices, filling out a time card, etc.'; image: 'vocational.jpg'; yourself); add: (AIMSCategory new name: 'Recreation & Leisure'; comment: 'Task instructions for activities, such as learning to play games, learning about local parks and museums, etc.'; image: 'recreation.jpg'; yourself); add: (AIMSCategory new name: 'Community Access'; comment: 'Assistance for community-based activities, such as taking the bus, using a pay phone, using an ATM, learning traffic signs, etc.'; image: 'community.jpg'; yourself); add: (AIMSCategory new name: 'Other'; comment: 'Non Categorized'; image: 'community.jpg'; yourself); yourself! ! !AIMSStorage methodsFor: 'actions' stamp: 'lr 12/10/2007 20:37'! save self save: 'aim.obj'! ! !AIMSStorage methodsFor: 'actions' stamp: 'lr 12/10/2007 20:37'! save: aString | stream | stream := ReferenceStream fileNamed: aString. [ stream nextPut: self ] ensure: [ stream close ]! ! !AIMSStorage methodsFor: 'accessing' stamp: 'lr 12/10/2007 20:35'! tasks ^ tasks! ! !AIMSStorage methodsFor: 'accessing' stamp: 'lr 12/10/2007 21:38'! users ^ users! ! Object subclass: #AIMSTask instanceVariableNames: 'title comment author submitted created modified image taskfile taskreport filehash reviewed notes category person' classVariableNames: '' poolDictionaries: '' category: 'AIMS-Model'! !AIMSTask methodsFor: 'accessing' stamp: 'lr 12/10/2007 20:30'! author ^ author! ! !AIMSTask methodsFor: 'accessing' stamp: 'lr 12/10/2007 20:47'! author: aString author := aString! ! !AIMSTask methodsFor: 'accessing' stamp: 'lr 12/10/2007 20:30'! category ^ category! ! !AIMSTask methodsFor: 'accessing' stamp: 'lr 12/10/2007 20:50'! category: aCategory category := aCategory! ! !AIMSTask methodsFor: 'accessing' stamp: 'lr 12/10/2007 20:31'! comment ^ comment! ! !AIMSTask methodsFor: 'accessing' stamp: 'lr 12/10/2007 20:47'! comment: aString comment := aString! ! !AIMSTask methodsFor: 'accessing' stamp: 'lr 12/10/2007 20:30'! created ^ created! ! !AIMSTask methodsFor: 'accessing' stamp: 'lr 12/10/2007 20:49'! created: aTimeStamp created := aTimeStamp! ! !AIMSTask methodsFor: 'accessing' stamp: 'lr 12/10/2007 20:30'! filehash ^ filehash! ! !AIMSTask methodsFor: 'accessing' stamp: 'lr 12/10/2007 20:48'! filehash: aString filehash := aString! ! !AIMSTask methodsFor: 'accessing' stamp: 'lr 12/10/2007 20:30'! image ^ image! ! !AIMSTask methodsFor: 'accessing' stamp: 'lr 12/10/2007 20:48'! image: aString image := aString! ! !AIMSTask methodsFor: 'accessing' stamp: 'lr 12/10/2007 20:30'! modified ^ modified! ! !AIMSTask methodsFor: 'accessing' stamp: 'lr 12/10/2007 20:48'! modified: aTimeStamp modified := aTimeStamp! ! !AIMSTask methodsFor: 'accessing' stamp: 'lr 12/10/2007 20:30'! notes ^ notes! ! !AIMSTask methodsFor: 'accessing' stamp: 'lr 12/10/2007 20:50'! notes: aString notes := aString! ! !AIMSTask methodsFor: 'accessing' stamp: 'lr 12/10/2007 20:30'! person ^ person! ! !AIMSTask methodsFor: 'accessing' stamp: 'lr 12/10/2007 20:50'! person: aPerson person := aPerson! ! !AIMSTask methodsFor: 'printing' stamp: 'lr 12/10/2007 20:44'! printOn: aStream super printOn: aStream. aStream nextPutAll: ' title: '; print: self title! ! !AIMSTask methodsFor: 'accessing' stamp: 'lr 12/10/2007 20:30'! reviewed ^ reviewed! ! !AIMSTask methodsFor: 'accessing' stamp: 'lr 12/10/2007 20:49'! reviewed: aBoolean reviewed := aBoolean! ! !AIMSTask methodsFor: 'accessing' stamp: 'lr 12/10/2007 20:30'! submitted ^ submitted! ! !AIMSTask methodsFor: 'accessing' stamp: 'lr 12/10/2007 20:48'! submitted: aTimeStamp submitted := aTimeStamp! ! !AIMSTask methodsFor: 'accessing' stamp: 'lr 12/10/2007 20:49'! taskfile ^ taskfile! ! !AIMSTask methodsFor: 'accessing' stamp: 'lr 12/10/2007 20:50'! taskfile: aString taskfile := aString! ! !AIMSTask methodsFor: 'accessing' stamp: 'lr 12/10/2007 20:49'! taskreport ^ taskreport! ! !AIMSTask methodsFor: 'accessing' stamp: 'lr 12/10/2007 20:48'! taskreport: aString taskreport := aString! ! !AIMSTask methodsFor: 'accessing' stamp: 'lr 12/10/2007 20:30'! title ^ title! ! !AIMSTask methodsFor: 'accessing' stamp: 'lr 12/10/2007 20:47'! title: aString title := aString! ! WASession subclass: #AIMSSession instanceVariableNames: 'loggedUser' classVariableNames: '' poolDictionaries: '' category: 'AIMS-Session'! !AIMSSession methodsFor: 'accessing' stamp: 'lr 12/10/2007 21:30'! loggedUser ^ loggedUser! ! !AIMSSession methodsFor: 'accessing' stamp: 'lr 12/10/2007 21:36'! loggedUser: aUser loggedUser := aUser! ! !AIMSSession methodsFor: 'accessing-readonly' stamp: 'lr 12/10/2007 20:57'! storage ^ AIMSStorage default! ! !AIMSSession methodsFor: 'actions' stamp: 'lr 12/10/2007 21:35'! userForLogin: aString ^ self storage users detect: [ :each | each login = aString ] ifNone: [ nil ]! ! WAReportColumn subclass: #AIMSReportColumn instanceVariableNames: 'hiddenBlock' classVariableNames: '' poolDictionaries: '' category: 'AIMS-Old'! !AIMSReportColumn methodsFor: 'as yet unclassified' stamp: 'rbb 10/30/2006 16:08'! hiddenBlock: aBlock hiddenBlock := aBlock! ! !AIMSReportColumn methodsFor: 'as yet unclassified' stamp: 'rbb 10/30/2006 16:34'! isHidden ^ hiddenBlock notNil ifTrue: [hiddenBlock value] ifFalse: [false]! ! AIMSLoginUser initialize! AIMSMain initialize!