EAP 6.1Migration issue: Successful login results in cyclic page redirects; how to debug
devsisodia Oct 28, 2013 1:59 PMHello,
I am migrating my seam 2.x jsf1.2 webapp from AS6.0 to EAP6.1 and stuck badly at redirect problem of from login page to home page. From logs it is not getting clear to me as to what is the issue as no ERROR or WARN statements exists in the server logs. I can see the user is successfully authenticated and then user is being "redirecting to" alarmViewer.seam (home page of our application). But soon after that it runs into several redirects each sending to view to error.xhtml and browser complains of "The page isn't redirecting properly".
I must mention that no code changes were done in pages.xml for navigation rules and the same code runs fine in AS6.0 but after making changes suggested in : here and here
Here I request all to please let me know what could go wrong here and how to debug and solve it.
---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
Application logs:
22:12:30,177 DEBUG [org.jboss.jca.core.connectionmanager.pool.strategy.OnePool] (http-/127.0.0.1:8080-3) sdp-model-datasource: returnConnection(10ea508, false) [1/20]
22:12:30,210 INFO [com.tatacommunications.tp.sdp.gui.session.Authenticator] (http-/127.0.0.1:8080-3) User Authenticated devendra.sisodia@xxx.comGUEST
22:12:30,224 DEBUG [org.jboss.seam.core.ResourceLoader] (http-/127.0.0.1:8080-3) resource bundle missing: login
22:12:30,225 DEBUG [org.jboss.seam.faces.Navigator] (http-/127.0.0.1:8080-3) redirecting to: /alarmViewer.xhtml
22:12:30,225 FINE [javax.enterprise.resource.webcontainer.jsf.application] (http-/127.0.0.1:8080-3) URL pattern of the FacesServlet executing the current request .seam
22:12:30,225 DEBUG [org.jboss.seam.util.Resources] (http-/127.0.0.1:8080-3) Loaded resource from context classloader: vfs:/C:/jboss-eap-6.1/bin/content/sdp-gui.ear/sdp-gui.war/WEB-INF/lib/jboss-seam-debug-2.2.2.Final.jar/META-INF/debug.xhtml
22:12:30,227 FINE [javax.enterprise.resource.webcontainer.jsf.lifecycle] (http-/127.0.0.1:8080-3) Exiting InvokeApplicationsPhase
22:12:30,227 DEBUG [org.jboss.seam.jsf.SeamPhaseListener] (http-/127.0.0.1:8080-3) committing transaction after phase: INVOKE_APPLICATION 5
22:12:30,228 DEBUG [org.hibernate.event.internal.AbstractFlushingEventListener] (http-/127.0.0.1:8080-3) Processing flush-time cascades
22:12:30,233 DEBUG [org.hibernate.event.internal.AbstractFlushingEventListener] (http-/127.0.0.1:8080-3) Dirty checking collections
22:12:30,238 DEBUG [org.hibernate.event.internal.AbstractFlushingEventListener] (http-/127.0.0.1:8080-3) Flushed: 0 insertions, 0 updates, 0 deletions to 4 objects
22:12:30,238 DEBUG [org.hibernate.event.internal.AbstractFlushingEventListener] (http-/127.0.0.1:8080-3) Flushed: 0 (re)creations, 0 updates, 0 removals to 10 collections
22:12:30,240 DEBUG [org.jboss.seam.contexts.Contexts] (http-/127.0.0.1:8080-3) destroying business process context
22:12:30,240 DEBUG [org.jboss.seam.contexts.Contexts] (http-/127.0.0.1:8080-3) flushing server-side conversation context
22:12:30,240 DEBUG [org.jboss.seam.contexts.Contexts] (http-/127.0.0.1:8080-3) flushing session context
22:12:30,240 DEBUG [org.jboss.seam.contexts.Contexts] (http-/127.0.0.1:8080-3) destroying event context
22:12:30,241 DEBUG [org.jboss.seam.contexts.Contexts] (http-/127.0.0.1:8080-3) destroying: errorMessage
22:12:30,241 DEBUG [org.jboss.seam.contexts.Contexts] (http-/127.0.0.1:8080-3) destroying: com.sun.faces.util.RequestStateManager
22:12:30,241 DEBUG [org.jboss.seam.contexts.Contexts] (http-/127.0.0.1:8080-3) destroying: org.ajax4jsf.webapp.BaseFilter:MyFacesFilterChecked
22:12:30,241 DEBUG [org.jboss.seam.contexts.Contexts] (http-/127.0.0.1:8080-3) destroying: org.jboss.seam.core.manager
22:12:30,241 DEBUG [org.jboss.seam.contexts.Contexts] (http-/127.0.0.1:8080-3) destroying: historyService
22:12:30,241 DEBUG [org.jboss.seam.contexts.Contexts] (http-/127.0.0.1:8080-3) destroying: org.jboss.seam.faces.validation
22:12:30,241 DEBUG [org.jboss.seam.contexts.Contexts] (http-/127.0.0.1:8080-3) destroying: org.jboss.seam.transaction.synchronizations
22:12:30,241 DEBUG [org.jboss.seam.contexts.Contexts] (http-/127.0.0.1:8080-3) destroying: org.jboss.seam.web.requestContextPath
22:12:30,241 DEBUG [org.jboss.seam.contexts.Contexts] (http-/127.0.0.1:8080-3) destroying: com.exade.vcp.Filter.ResponseWrapper
22:12:30,241 DEBUG [org.jboss.seam.contexts.Contexts] (http-/127.0.0.1:8080-3) destroying: org.jboss.seam.core.conversationPropagation
22:12:30,241 DEBUG [org.jboss.seam.contexts.Contexts] (http-/127.0.0.1:8080-3) destroying: org.jboss.seam.international.messages
22:12:30,241 DEBUG [org.jboss.seam.contexts.Contexts] (http-/127.0.0.1:8080-3) destroying: authenticator
22:12:30,241 DEBUG [org.jboss.seam.contexts.Contexts] (http-/127.0.0.1:8080-3) destroying: org.ajax4jsf.application.AjaxStateManager.AJAX_VIEW_SEQUENCE
22:12:30,241 DEBUG [org.jboss.seam.contexts.Contexts] (http-/127.0.0.1:8080-3) destroying: com.exade.vcp.Filter.done
22:12:30,241 DEBUG [org.jboss.seam.contexts.Contexts] (http-/127.0.0.1:8080-3) destroying: org.jboss.seam.transaction.transaction
22:12:30,241 DEBUG [org.jboss.seam.contexts.Contexts] (http-/127.0.0.1:8080-3) destroying: org.jboss.seam.web.servletContexts
22:12:30,241 DEBUG [org.jboss.seam.contexts.Contexts] (http-/127.0.0.1:8080-3) destroying: org.jboss.seam.core.events
22:12:30,241 DEBUG [org.jboss.seam.contexts.Contexts] (http-/127.0.0.1:8080-3) destroying: org.jboss.seam.web.requestServletPath
22:12:30,241 DEBUG [org.jboss.seam.contexts.Contexts] (http-/127.0.0.1:8080-3) destroying: ajaxContext
22:12:30,241 FINE [javax.enterprise.resource.webcontainer.jsf.timing] (http-/127.0.0.1:8080-3) [TIMING] - [378ms] : Execution time for phase (including any PhaseListeners) -> INVOKE_APPLICATION 5
22:12:30,241 FINE [javax.enterprise.resource.webcontainer.jsf.lifecycle] (http-/127.0.0.1:8080-3) render(com.sun.faces.context.FacesContextImpl@16cab56)
22:12:30,288 DEBUG [org.apache.catalina.authenticator] (http-/127.0.0.1:8080-3) Security checking request GET /sdp-gui/alarmViewer.seam
22:12:30,288 DEBUG [org.apache.catalina.realm] (http-/127.0.0.1:8080-3) Checking constraint 'SecurityConstraint[XHTML]' against GET /alarmViewer.seam --> false
22:12:30,288 DEBUG [org.apache.catalina.realm] (http-/127.0.0.1:8080-3) Checking constraint 'SecurityConstraint[XHTML]' against GET /alarmViewer.seam --> false
22:12:30,288 DEBUG [org.apache.catalina.realm] (http-/127.0.0.1:8080-3) Checking constraint 'SecurityConstraint[XHTML]' against GET /alarmViewer.seam --> false
22:12:30,288 DEBUG [org.apache.catalina.realm] (http-/127.0.0.1:8080-3) Checking constraint 'SecurityConstraint[XHTML]' against GET /alarmViewer.seam --> false
22:12:30,288 DEBUG [org.apache.catalina.realm] (http-/127.0.0.1:8080-3) No applicable constraint located
22:12:30,288 DEBUG [org.apache.catalina.authenticator] (http-/127.0.0.1:8080-3) Not subject to any constraint
22:12:30,289 DEBUG [org.jboss.seam.init.Initialization] (http-/127.0.0.1:8080-3) Using Java hot deploy
22:12:30,297 DEBUG [org.jboss.seam.util.Resources] (http-/127.0.0.1:8080-3) Loaded resource from servlet context: jndi:/default-host/sdp-gui/login.page.xml
22:12:30,301 DEBUG [org.jboss.seam.util.Resources] (http-/127.0.0.1:8080-3) Loaded resource from servlet context: jndi:/default-host/sdp-gui/WEB-INF/pages.xml
22:12:30,302 FINE [javax.enterprise.resource.webcontainer.jsf.lifecycle] (http-/127.0.0.1:8080-3) execute(com.sun.faces.context.FacesContextImpl@168cebc)
22:12:30,303 DEBUG [org.jboss.seam.jsf.SeamPhaseListener] (http-/127.0.0.1:8080-3) beginning transaction prior to phase: RESTORE_VIEW 1
22:12:30,303 FINE [javax.enterprise.resource.webcontainer.jsf.lifecycle] (http-/127.0.0.1:8080-3) Entering RestoreViewPhase
22:12:30,303 DEBUG [org.apache.coyote.http11] (http-/127.0.0.1:8080-3) JBWEB003028: Start processing with input [cid=3]
22:12:30,303 FINE [javax.enterprise.resource.webcontainer.jsf.lifecycle] (http-/127.0.0.1:8080-3) New request: creating a view for /alarmViewer.seam
22:12:30,303 FINE [javax.enterprise.resource.webcontainer.jsf.application] (http-/127.0.0.1:8080-3) Created component with component type of 'javax.faces.ViewRoot'
22:12:30,303 FINE [javax.enterprise.resource.webcontainer.jsf.application] (http-/127.0.0.1:8080-3) servletPath /alarmViewer.seam
22:12:30,303 FINE [javax.enterprise.resource.webcontainer.jsf.application] (http-/127.0.0.1:8080-3) pathInfo null
22:12:30,303 FINE [javax.enterprise.resource.webcontainer.jsf.application] (http-/127.0.0.1:8080-3) URL pattern of the FacesServlet executing the current request .seam
22:12:30,304 FINE [javax.enterprise.resource.webcontainer.jsf.application] (http-/127.0.0.1:8080-3) viewId after appending the context suffix /alarmViewer.xhtml
22:12:30,304 FINE [javax.enterprise.resource.webcontainer.jsf.application] (http-/127.0.0.1:8080-3) Created new view for /alarmViewer.xhtml
22:12:30,304 FINE [javax.enterprise.resource.webcontainer.jsf.application] (http-/127.0.0.1:8080-3) Locale for this view as determined by calculateLocale en
22:12:30,304 FINE [javax.enterprise.resource.webcontainer.jsf.application] (http-/127.0.0.1:8080-3) RenderKitId for this view as determined by calculateRenderKitId HTML_BASIC
22:12:30,304 FINE [javax.enterprise.resource.webcontainer.jsf.lifecycle] (http-/127.0.0.1:8080-3) Exiting RestoreViewPhase
22:12:30,305 DEBUG [org.jboss.seam.util.Resources] (http-/127.0.0.1:8080-3) Loaded resource from context classloader: vfs:/C:/jboss-eap-6.1/bin/content/sdp-gui.ear/sdp-gui.war/WEB-INF/lib/jboss-seam-debug-2.2.2.Final.jar/META-INF/debug.xhtml
22:12:30,305 DEBUG [org.jboss.seam.util.Resources] (http-/127.0.0.1:8080-3) Loaded resource from context classloader: vfs:/C:/jboss-eap-6.1/bin/content/sdp-gui.ear/sdp-gui.war/WEB-INF/lib/jboss-seam-debug-2.2.2.Final.jar/META-INF/debug.xhtml
22:12:30,305 DEBUG [org.jboss.seam.jsf.SeamPhaseListener] (http-/127.0.0.1:8080-3) committing transaction after phase: RESTORE_VIEW 1
22:12:30,305 FINE [javax.enterprise.resource.webcontainer.jsf.timing] (http-/127.0.0.1:8080-3) [TIMING] - [3ms] : Execution time for phase (including any PhaseListeners) -> RESTORE_VIEW 1
22:12:30,305 FINE [javax.enterprise.resource.webcontainer.jsf.lifecycle] (http-/127.0.0.1:8080-3) render(com.sun.faces.context.FacesContextImpl@168cebc)
22:12:30,305 DEBUG [org.jboss.seam.util.Resources] (http-/127.0.0.1:8080-3) Loaded resource from context classloader: vfs:/C:/jboss-eap-6.1/bin/content/sdp-gui.ear/sdp-gui.war/WEB-INF/lib/jboss-seam-debug-2.2.2.Final.jar/META-INF/debug.xhtml
22:12:30,306 DEBUG [org.jboss.seam.jsf.SeamPhaseListener] (http-/127.0.0.1:8080-3) beginning transaction prior to phase: RENDER_RESPONSE 6
22:12:30,306 DEBUG [org.jboss.seam.util.Resources] (http-/127.0.0.1:8080-3) Loaded resource from context classloader: vfs:/C:/jboss-eap-6.1/bin/content/sdp-gui.ear/sdp-gui.war/WEB-INF/lib/jboss-seam-debug-2.2.2.Final.jar/META-INF/debug.xhtml
22:12:30,314 DEBUG [org.jboss.seam.util.Resources] (http-/127.0.0.1:8080-3) Loaded resource from context classloader: vfs:/C:/jboss-eap-6.1/bin/content/sdp-gui.ear/sdp-gui.war/WEB-INF/lib/jboss-seam-debug-2.2.2.Final.jar/META-INF/debug.xhtml
22:12:30,315 DEBUG [org.jboss.seam.faces.Navigator] (http-/127.0.0.1:8080-3) redirecting to: /error.xhtml
22:12:30,315 FINE [javax.enterprise.resource.webcontainer.jsf.application] (http-/127.0.0.1:8080-3) URL pattern of the FacesServlet executing the current request .seam
22:12:30,316 DEBUG [org.jboss.seam.util.Resources] (http-/127.0.0.1:8080-3) Loaded resource from context classloader: vfs:/C:/jboss-eap-6.1/bin/content/sdp-gui.ear/sdp-gui.war/WEB-INF/lib/jboss-seam-debug-2.2.2.Final.jar/META-INF/debug.xhtml
22:12:30,318 DEBUG [org.jboss.seam.jsf.SeamPhaseListener] (http-/127.0.0.1:8080-3) committing transaction after phase: RENDER_RESPONSE 6
22:12:30,319 DEBUG [org.jboss.seam.contexts.Contexts] (http-/127.0.0.1:8080-3) destroying business process context
22:12:30,319 DEBUG [org.jboss.seam.contexts.Contexts] (http-/127.0.0.1:8080-3) flushing server-side conversation context
22:12:30,319 DEBUG [org.jboss.seam.contexts.Contexts] (http-/127.0.0.1:8080-3) flushing session context
22:12:30,319 DEBUG [org.jboss.seam.contexts.Contexts] (http-/127.0.0.1:8080-3) destroying event context
22:12:30,319 DEBUG [org.jboss.seam.contexts.Contexts] (http-/127.0.0.1:8080-3) destroying: com.sun.faces.util.RequestStateManager
22:12:30,319 DEBUG [org.jboss.seam.contexts.Contexts] (http-/127.0.0.1:8080-3) destroying: org.ajax4jsf.webapp.BaseFilter:MyFacesFilterChecked
22:12:30,319 DEBUG [org.jboss.seam.contexts.Contexts] (http-/127.0.0.1:8080-3) destroying: org.jboss.seam.core.manager
22:12:30,319 DEBUG [org.jboss.seam.contexts.Contexts] (http-/127.0.0.1:8080-3) destroying: org.jboss.seam.transaction.synchronizations
22:12:30,319 DEBUG [org.jboss.seam.contexts.Contexts] (http-/127.0.0.1:8080-3) destroying: org.jboss.seam.web.requestContextPath
22:12:30,319 DEBUG [org.jboss.seam.contexts.Contexts] (http-/127.0.0.1:8080-3) destroying: com.exade.vcp.Filter.ResponseWrapper
22:12:30,319 DEBUG [org.jboss.seam.contexts.Contexts] (http-/127.0.0.1:8080-3) destroying: org.jboss.seam.core.conversationPropagation
22:12:30,319 DEBUG [org.jboss.seam.contexts.Contexts] (http-/127.0.0.1:8080-3) destroying: com.exade.vcp.Filter.done
22:12:30,319 DEBUG [org.jboss.seam.contexts.Contexts] (http-/127.0.0.1:8080-3) destroying: org.jboss.seam.transaction.transaction
22:12:30,319 DEBUG [org.jboss.seam.contexts.Contexts] (http-/127.0.0.1:8080-3) destroying: org.jboss.seam.web.servletContexts
22:12:30,319 DEBUG [org.jboss.seam.contexts.Contexts] (http-/127.0.0.1:8080-3) destroying: org.jboss.seam.core.events
22:12:30,319 DEBUG [org.jboss.seam.contexts.Contexts] (http-/127.0.0.1:8080-3) destroying: org.jboss.seam.web.requestServletPath
22:12:30,319 DEBUG [org.jboss.seam.contexts.Contexts] (http-/127.0.0.1:8080-3) destroying: ajaxContext
22:12:30,319 FINE [javax.enterprise.resource.webcontainer.jsf.timing] (http-/127.0.0.1:8080-3) [TIMING] - [14ms] : Execution time for phase (including any PhaseListeners) -> RENDER_RESPONSE 6
22:12:30,322 DEBUG [org.apache.catalina.authenticator] (http-/127.0.0.1:8080-3) Security checking request GET /sdp-gui/error.seam
22:12:30,322 DEBUG [org.apache.catalina.realm] (http-/127.0.0.1:8080-3) Checking constraint 'SecurityConstraint[XHTML]' against GET /error.seam --> false
22:12:30,322 DEBUG [org.apache.catalina.realm] (http-/127.0.0.1:8080-3) Checking constraint 'SecurityConstraint[XHTML]' against GET /error.seam --> false
22:12:30,322 DEBUG [org.apache.catalina.realm] (http-/127.0.0.1:8080-3) Checking constraint 'SecurityConstraint[XHTML]' against GET /error.seam --> false
22:12:30,322 DEBUG [org.apache.catalina.realm] (http-/127.0.0.1:8080-3) Checking constraint 'SecurityConstraint[XHTML]' against GET /error.seam --> false
22:12:30,322 DEBUG [org.apache.catalina.realm] (http-/127.0.0.1:8080-3) No applicable constraint located
22:12:30,322 DEBUG [org.apache.catalina.authenticator] (http-/127.0.0.1:8080-3) Not subject to any constraint
22:12:30,323 DEBUG [org.jboss.seam.init.Initialization] (http-/127.0.0.1:8080-3) Using Java hot deploy
22:12:30,328 DEBUG [org.jboss.seam.util.Resources] (http-/127.0.0.1:8080-3) Loaded resource from servlet context: jndi:/default-host/sdp-gui/login.page.xml
22:12:30,334 DEBUG [org.jboss.seam.util.Resources] (http-/127.0.0.1:8080-3) Loaded resource from servlet context: jndi:/default-host/sdp-gui/WEB-INF/pages.xml
22:12:30,334 FINE [javax.enterprise.resource.webcontainer.jsf.lifecycle] (http-/127.0.0.1:8080-3) execute(com.sun.faces.context.FacesContextImpl@1aad19e)
22:12:30,335 DEBUG [org.jboss.seam.jsf.SeamPhaseListener] (http-/127.0.0.1:8080-3) beginning transaction prior to phase: RESTORE_VIEW 1
22:12:30,335 FINE [javax.enterprise.resource.webcontainer.jsf.lifecycle] (http-/127.0.0.1:8080-3) Entering RestoreViewPhase
22:12:30,335 DEBUG [org.apache.coyote.http11] (http-/127.0.0.1:8080-3) JBWEB003028: Start processing with input [cid=3]
22:12:30,335 FINE [javax.enterprise.resource.webcontainer.jsf.lifecycle] (http-/127.0.0.1:8080-3) New request: creating a view for /error.seam
22:12:30,336 FINE [javax.enterprise.resource.webcontainer.jsf.application] (http-/127.0.0.1:8080-3) Created component with component type of 'javax.faces.ViewRoot'
22:12:30,336 FINE [javax.enterprise.resource.webcontainer.jsf.application] (http-/127.0.0.1:8080-3) servletPath /error.seam
22:12:30,336 FINE [javax.enterprise.resource.webcontainer.jsf.application] (http-/127.0.0.1:8080-3) pathInfo null
22:12:30,336 FINE [javax.enterprise.resource.webcontainer.jsf.application] (http-/127.0.0.1:8080-3) URL pattern of the FacesServlet executing the current request .seam
22:12:30,336 FINE [javax.enterprise.resource.webcontainer.jsf.application] (http-/127.0.0.1:8080-3) viewId after appending the context suffix /error.xhtml
22:12:30,336 FINE [javax.enterprise.resource.webcontainer.jsf.application] (http-/127.0.0.1:8080-3) Created new view for /error.xhtml
22:12:30,336 FINE [javax.enterprise.resource.webcontainer.jsf.application] (http-/127.0.0.1:8080-3) Locale for this view as determined by calculateLocale en
22:12:30,336 FINE [javax.enterprise.resource.webcontainer.jsf.application] (http-/127.0.0.1:8080-3) RenderKitId for this view as determined by calculateRenderKitId HTML_BASIC
22:12:30,336 FINE [javax.enterprise.resource.webcontainer.jsf.lifecycle] (http-/127.0.0.1:8080-3) Exiting RestoreViewPhase
22:12:30,337 DEBUG [org.jboss.seam.util.Resources] (http-/127.0.0.1:8080-3) Loaded resource from context classloader: vfs:/C:/jboss-eap-6.1/bin/content/sdp-gui.ear/sdp-gui.war/WEB-INF/lib/jboss-seam-debug-2.2.2.Final.jar/META-INF/debug.xhtml
22:12:30,337 DEBUG [org.jboss.seam.util.Resources] (http-/127.0.0.1:8080-3) Loaded resource from context classloader: vfs:/C:/jboss-eap-6.1/bin/content/sdp-gui.ear/sdp-gui.war/WEB-INF/lib/jboss-seam-debug-2.2.2.Final.jar/META-INF/debug.xhtml
22:12:30,337 DEBUG [org.jboss.seam.jsf.SeamPhaseListener] (http-/127.0.0.1:8080-3) committing transaction after phase: RESTORE_VIEW 1
22:12:30,337 FINE [javax.enterprise.resource.webcontainer.jsf.timing] (http-/127.0.0.1:8080-3) [TIMING] - [3ms] : Execution time for phase (including any PhaseListeners) -> RESTORE_VIEW 1
22:12:30,337 FINE [javax.enterprise.resource.webcontainer.jsf.lifecycle] (http-/127.0.0.1:8080-3) render(com.sun.faces.context.FacesContextImpl@1aad19e)
22:12:30,337 DEBUG [org.jboss.seam.util.Resources] (http-/127.0.0.1:8080-3) Loaded resource from context classloader: vfs:/C:/jboss-eap-6.1/bin/content/sdp-gui.ear/sdp-gui.war/WEB-INF/lib/jboss-seam-debug-2.2.2.Final.jar/META-INF/debug.xhtml
22:12:30,338 DEBUG [org.jboss.seam.jsf.SeamPhaseListener] (http-/127.0.0.1:8080-3) beginning transaction prior to phase: RENDER_RESPONSE 6
22:12:30,338 DEBUG [org.jboss.seam.util.Resources] (http-/127.0.0.1:8080-3) Loaded resource from context classloader: vfs:/C:/jboss-eap-6.1/bin/content/sdp-gui.ear/sdp-gui.war/WEB-INF/lib/jboss-seam-debug-2.2.2.Final.jar/META-INF/debug.xhtml
22:12:30,338 DEBUG [org.jboss.seam.faces.Navigator] (http-/127.0.0.1:8080-3) redirecting to: /error.xhtml
-
login.page.xml 853 bytes
-
components.xml 3.2 KB
-
pages.xml 5.5 KB
-
web.xml 3.8 KB
-
server.zip 179.8 KB